如何获取反应传单地图的边框并检查地图内的标记?

2023-12-23

我的代码在这里:

import React, { useState, useEffect, useRef } from 'react';
import restaurantsInfo from "./RestaurantsList.json";
import "./App.css";
import { MapContainer, Marker, Popup, TileLayer, useMapEvents } from "react-leaflet";
import { Icon, latLng } from "leaflet";
import Restaurants from "./Restaurants.js";
import LocationMarker from "./LocationMarker.js";
import L from 'leaflet';

export default function App() {
    function LocationMarker() {
        const [position, setPosition] = useState(null);
        const [bbox, setBbox] = useState([]);
    
        const map = useMap();
    
        useEffect(() => {
          map.locate().on("locationfound", function (e) {
            setPosition(e.latlng);
            map.flyTo(e.latlng, map.getZoom());
            const radius = e.accuracy;
            const circle = L.circle(e.latlng, radius);
            circle.addTo(map);
            setBbox(e.bounds.toBBoxString().split(","));
          });
        }, [map]);
    
        return position === null ? null : (
          <Marker position={position} icon={icon}>
            <Popup>
              You are here. <br />
              Map bbox: <br />
              <b>Southwest lng</b>: {bbox[0]} <br />
              <b>Southwest lat</b>: {bbox[1]} <br />
              <b>Northeast lng</b>: {bbox[2]} <br />
              <b>Northeast lat</b>: {bbox[3]}
            </Popup>
          </Marker>
        );
      }
  return (
    <div class="container">
    <div style={{height: '400px', width: '500px'}} class="map">
    <MapContainer 
    center={[49.1951, 16.6068]} 
    zoom={defaultZoom} 
    scrollWheelZoom={false}>
    <TileLayer
      attribution='&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
      url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
    />
<MapContainer/>

我的问题是,如何使用 bbox 来检查我的某些标记是否在地图内?当我尝试申请时:

if (bbox.contains(marker.getPosition())===true) 

or this:

if ((bbox[1] < marker.lat< bbox[3])&& (bbox[2] <marker.long <bbox[4]))

我遇到错误:bbox 未定义

我不知道如何从函数 LocationMarker() 返回 bbox。 我将不胜感激任何帮助。谢谢。


那么您需要遵循稍微不同的方法:

Declare bbox父组件上的变量(App)并存储实例。您稍后将需要它才能使用 contains 方法。你可以通过bbox and setBbox作为 LocationMarker comp 上的道具。这样做您将在两个组件之间进行通信。

还要移动LocationMarker在应用程序之外进行比较。

这里是LcoationMarker成分:

function LocationMarker({ bbox, setBbox }) {
  const [position, setPosition] = useState(null);

  const map = useMap();

  useEffect(() => {
    map.locate().on("locationfound", function (e) {
      setPosition(e.latlng);
      map.flyTo(e.latlng, map.getZoom());
      const radius = e.accuracy;
      const circle = L.circle(e.latlng, radius);
      circle.addTo(map);
      setBbox(e.bounds);
    });
  }, [map,setBbox]);

  const boundingBox = bbox ? bbox.toBBoxString().split(",") : null;

  if (!position || !bbox) return null;
  return (
    <Marker position={position} icon={icon}>
      <Popup>
        You are here. <br />
        Map bbox: <br />
        <b>Southwest lng</b>: {boundingBox[0]} <br />
        <b>Southwest lat</b>: {boundingBox[1]} <br />
        <b>Northeast lng</b>: {boundingBox[2]} <br />
        <b>Northeast lat</b>: {boundingBox[3]}
      </Popup>
    </Marker>
  );
}

这是应用程序组件。您可以通过按钮在本示例中使用 bbox 实例。使用之前请务必检查 bbox 是否已定义。

function App() {
  const [bbox, setBbox] = useState(null);

  const handleClick = () => {
    if (bbox) alert(bbox.contains([49.1951, 16.6068]));
  };

  return (
    <>
      <MapContainer ...>
     ...
        <LocationMarker bbox={bbox} setBbox={setBbox} />
      </MapContainer>
      <button onClick={handleClick}>bbox contains</button>
    </>
  );
}

这里有一个demo https://codesandbox.io/s/how-to-get-borders-for-the-react-leaflet-v3x-map-and-check-markers-inside-the-map-7e8x2所有的部分都在一起

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取反应传单地图的边框并检查地图内的标记? 的相关文章

  • 使用与打字稿反应来玩笑测试复制到剪贴板方法

    我试图确保当用户单击按钮时将正确的值复制到用户剪贴板 这是我的复制方法 我在输入上使用 ref 来访问正确的值 protected copyToClipboard console log clicked const text this co
  • 如何在javascript中访问文件? [复制]

    这个问题在这里已经有答案了 是否可以在 JavaScript 中访问扩展名为 txt 或 file 的文件 我想在我的函数中调用这个文件 如果您谈论的是在 Web 浏览器中运行的 javascript 那么答案是否定的 您无法访问客户端计算
  • JSON数据通过JS/AJAX转化为PHP

    Goal 我正在使用 coinmarketcap com API link https api coinmarketcap com v1 ticker convert EUR 预先我将他们的数据转换成 PHP 样本 现在我想使用AJAX J
  • 错误:使用本地文件时,summernote 不是一个函数

    我遇到了一个非常奇怪的问题 当我使用本地的 Summernote 文件加载文本编辑器时 发生了 summernote 不是函数 的情况 但是 如果我使用 cdn 文件加载编辑器 一切都会顺利 这是我的 HTML 标头代码
  • 按空格键后执行JS代码

    这是我的 JavaScript 代码 var changeIdValue function id value document getElementById id style height value document getElement
  • 如何在 asp:TextBox 的 keyup 事件上调用 javascript 函数

    如何在asp net的TextBox控件的keyup事件上调用javascript函数 我正在尝试类似的事情 但它不起作用
  • Vue.js:折叠/展开父级中的所有元素

    我需要为我的 Vue 组件 一些可折叠面板 添加 展开 折叠全部 功能 如果用户单击折叠按钮 然后单击某个面板并将其展开 然后单击折叠按钮不会做任何事因为观看的参数不会改变 那么如何正确实现此功能 按钮必须始终折叠和展开组件 我准备了简单的
  • 这种日期时间格式有简单的转换吗?

    我正在使用 jQuery 从 JSON feed 中检索数据 并且作为 feed 的一部分 我获得了 datetime 属性 例如 2009 07 01 07 30 09 我想将此信息放入 javascript Date 对象中以方便使用
  • JavaScript 检查 null 与 undefined 以及 == 和 === 之间的区别

    如何检查变量是否null or undefined和有什么区别null and undefined 有什么区别 and 很难在 Google 上搜索 如何检查变量是否null or undefined 是变量null if a null o
  • 输入名称上的 React hook 表单 useFieldArray 打字稿错误

    我在动态表单的打字稿中编写了以下内容 type FormData name string session name string const control register handleSubmit useForm
  • 在函数字符串上使用 eval

    我在做 eval function console log Hello World 但这给出了错误 Uncaught SyntaxError Unexpected token 为什么这是错误的 The eval操作员期望Program作为输
  • 恢复console.log()

    由于某种原因 附带的原型框架 或其他 JavaScript 代码 Magento http en wikipedia org wiki Magento正在替换标准控制台功能 所以我无法调试任何内容 在 JavaScript 控制台中写下co
  • React-Three/Fiber 创建 3D 文本

    我正在尝试使用 Threejs React Three Fiber 创建 3D 文本 我使用字体加载器加载字体 如下所示 const font new FontLoader parse Microsoft Tai Le Regular js
  • 没有jquery的动画,左右滑动

    我试图在显示 div 时将其向左滑动 在隐藏它时将其向右滑动 但我不想使用 jQuery 有没有一种方法可以在不使用javascript库的情况下制作简单的动画并支持IE7和IE8 这是我的显示 隐藏js function showHide
  • 在添加 ApiController 属性之前,ASP.NET Core 3.1 无法处理 Axios 请求

    我有以下问题 每当我向 Api 端点发送内容时 ASP NET Core 3 1 就无法处理该请求 但是 当我添加ApiController属性它工作得很好 我的代码是正确的 但只有当我添加此属性时才有效 怎么会这样呢 作为参考 这是我的代
  • chrome 扩展脚本在某些页面上加载两次甚至更多

    这是我的background js 文件 chrome tabs onUpdated addListener function tabId info tab var sites new Array site2 site1 var url t
  • 找到每个元素的所有父元素

    我正在尝试创建一个面包屑而不使用 url 路由提供者 并且不使用 jQuery 我有一棵这样的树 Humans Trees Animals Cats Lions Dogs Terrier Bulldog Cocker Cars 我希望当我点
  • 流星与承诺

    我一直在尝试养成使用 Promise 的习惯 但在尝试在 Meteor 上下文中的服务器端代码中使用它们时遇到了问题 这就是问题 if Meteor isServer Meteor startup function code to run
  • Webpack 未将 css 复制到 dist 中

    我有以下 css 文件 以及以下 webpack 配置 var path require path module exports entry app src index js output path path resolve dirname
  • 如何在二维数组中找到字符串?

    我有一个看起来像这样的数组 var array a b c d e f 我希望能够在数组中搜索字符串 d 并返回对应的值 c try function find str array for var i in array if array i

随机推荐

  • 为什么我在 Google 地图 Android API 上收到签名无效的信息?

    我的应用程序在 5 1 版本的设备上可以正常进行位置更新 从那时起 我做了两件事 生成签名的 apk 尝试将其部署到 6 0 设备 我不知道发生了什么 但现在 google api 即使在我原来的设备上也无法工作 这是错误日志的一部分 我认
  • 自定义 UISlider

    如何自定义UISlider 更改样式 背景 你可以通过this http www raywenderlich com 4344 user interface customization in ios 5自定义控件的教程 要自定义 UISli
  • 触发一次后关闭事件监听器

    我有一个脚本可以触发一个提供免费下载的弹出框 当用户的鼠标离开页面时它会触发 显然不适用于移动设备 我已经有一个可行的解决方案 在我的脚本中 我设置了一个 cookie 来停用脚本 30 分钟 并且该部分有效 如果我刷新页面 弹出窗口不会再
  • GraphQL:成功突变后如何发出警告?

    让我们想象一下我有一个createPost插入新帖子的突变 在典型的应用程序中 该突变可以 成功 返回一个Post 失败 抛出错误 我使用阿波罗错误 https github com thebigredgeek apollo errors来
  • 如何在 AWS Lambda 中缓存多个 AWS Parameter Store 值?

    我想限制在 AWS Lambda 中调用 AWS Parameter Store 的次数 使用全局变量 我在第一次调用 Parameter Store 时缓存 Parameter Store 值 main py import os impo
  • Highcharts x 轴日期时间的最大间隔?

    我有一张每日图表 涵盖 00 00 到 23 59 但对于实时数据 假设当前是上午 9 点 默认情况下它会将图表从 00 00 拉伸到 09 00 这对我来说看起来不太好 我想要的是当天 23 59 处的 x 轴最大值 因此它将把 09 0
  • 检查文件是否正在使用 VBS

    我想制作一个小的 VBS 脚本来告诉用户文件是否正在使用 我有一个文件 如果该文件正在使用 VBS 应该给我一条消息 表明该文件正在使用 如果文件没有被任何进程使用 VBS 应该给我消息说文件没有被使用 我试过this http suppo
  • Swift - 如何关闭所有视图控制器以返回根目录

    我希望我的应用程序可以在每次用户需要时转到第一个视图控制器 所以我想创建一个函数来关闭所有视图控制器 无论它是被推入导航控制器还是以模态方式呈现或打开任何方法 我尝试了各种方法 但我未能肯定地关闭所有视图控制器 有简单的方法吗 尝试这个 s
  • 使用 Swift 3 的 FB 登录不返回任何值,并且在成功登录后不让用户返回应用程序

    我在用着iOS 10 Swift 3集成FB Login 我已遵循以下所有步骤Facebook文档 现在的问题是 成功登录后 它不会返回任何值 也不会让用户返回应用程序 注意 同样适用于Swift 2 您好 我向 facebook 开发人员
  • 针对 API 目标的计划 EventBridge 规则

    是否可以创建一个 EventBridge 规则 该规则可以安排在一天中的特定时间运行并调用 API 作为自定义目标 如果目标是 AWS 或合作伙伴服务 则似乎可以为目标设置计划 但如果它们是自定义配置的端点 则不能为目标设置计划 我想做的就
  • 服务引用错误:无法生成服务引用的代码

    我有一个 Windows 服务解决方案 并尝试在 VS2010 中添加对 Hermes 开源 ebms 消息服务器 Web 服务的服务引用 我可以使用 Web 服务的 URL 找到它 但是当我尝试填充服务引用时 我在 Visual Stud
  • SQL Server 中 BIT 字段比 int 字段快吗?

    我有一些字段的表 其值将为 1 0 随着时间的推移 该表将变得非常大 使用位数据类型好还是使用不同类型来提高性能更好 当然 所有字段都应该建立索引 我无法为您提供任何有关性能的统计数据 但是 您应该始终使用最能代表您的数据的类型 如果您想要
  • Angular 2 - 路由 - CanActivate 与 Observable 配合使用

    我有一个验证卫士 用于路由 实现可以激活 canActivate return this loginService isLoggedIn 我的问题是 CanActivate result 取决于 http get result 登录服务返回
  • 使用 R 的 Plumber - 创建 GET 端点来托管 CSV 格式的数据而不是 JSON

    我认为这是 R 管道工库的一个很好的快速演示 但主要是我正在努力以 csv 格式提供数据 我正在使用 R 的管道工包来托管我的一些体育数据的 API 端点 目前 我有一些数据可以获取我正在尝试提供的 MLB 棒球队的获胜总数 使用水管工 我
  • Python matplotlib 错误栏问题

    给定这些 numpy 数组 x 0 1 2 3 4 5 6 7 8 9 y 0 0 02083473 0 08819923 0 9454764 0 80604627 0 82189822 0 73613942 0 64519742 0 56
  • 应用程序未安装错误

    我为我的 Nexus 7 创建了一个未签名的 apk 当我尝试安装它时 设备会弹出 应用程序未安装 在 Eclipse 模拟器中一切正常 我尝试将目标更改为 4 2 4 3 4 4 同样 所有工作都在模拟器中进行 但不在设备上进行 设备运行
  • 通过循环依赖从 Jersey 获取 JSON

    我正在编写一个使用 Jersey 和 JAXB 的服务 我的类使用 XMLRootElement XMLElement 等进行注释 我在两个类之间存在循环依赖关系 因此我使用 XMLTransient 注释了循环依赖属性 因此 当我调用我的
  • 如何在登录时通过 JWT 令牌从 Azure Active Directory 传递自定义扩展属性?

    我在 Azure Active Directory 中有自定义扩展属性 通过 Azure AD Connect 映射 Azure AD 上的扩展属性采用以下形式extension
  • 使用 H2 控制台访问 mem 或 fs 数据库表

    我正在尝试访问 Play 中应用程序的表格 框架 但我无法使用控制台找到它 例如 我有两个实体模型 Address and Campus 我可以正常创建对象并保存 但我想查看 fs 或 mem DB 中的更改 但 H2 控制台不显示表Add
  • 如何获取反应传单地图的边框并检查地图内的标记?

    我的代码在这里 import React useState useEffect useRef from react import restaurantsInfo from RestaurantsList json import App cs