javascript - 将 leaflet-control-geocoder 与 react-leaflet 一起使用

标签 javascript reactjs leaflet geocoding react-leaflet

我想使用 react-leaflet 并在其上添加一个地理编码器字段。我发现 leaflet-control-geocoder 看起来不错,但没有 react 包装器可以将它与 react-leaflet 一起使用。任何人都这样做过并且可以共享一个沙箱吗?或者它可能存在于 GitHub 上,但我没有使用正确的关键字?

感谢您的帮助, 最好的问候

最佳答案

对于 react-leaflet v.3.x

创建您自己的包装器:

安装leaflet-control-geocoder 并导入它的依赖项:

import "leaflet-control-geocoder/dist/Control.Geocoder.css";
import "leaflet-control-geocoder/dist/Control.Geocoder.js";

使用 demo 中的代码构建你的 React 包装器。

function LeafletControlGeocoder() {
  const map = useMap();

  useEffect(() => {
    var geocoder = L.Control.Geocoder.nominatim();
    if (typeof URLSearchParams !== "undefined" && location.search) {
      // parse /?geocoder=nominatim from URL
      var params = new URLSearchParams(location.search);
      var geocoderString = params.get("geocoder");
      if (geocoderString && L.Control.Geocoder[geocoderString]) {
        geocoder = L.Control.Geocoder[geocoderString]();
      } else if (geocoderString) {
        console.warn("Unsupported geocoder", geocoderString);
      }
    }

    L.Control.geocoder({
      query: "",
      placeholder: "Search here...",
      defaultMarkGeocode: false,
      geocoder
    })
      .on("markgeocode", function (e) {
        var latlng = e.geocode.center;
        L.marker(latlng, { icon })
          .addTo(map)
          .bindPopup(e.geocode.name)
          .openPopup();
        map.fitBounds(e.geocode.bbox);
      })
      .addTo(map);
  }, []);

  return null;
}

将其作为 MapContainer 子级导入

  <MapContainer center={position} zoom={13} style={{ height: "100vh" }}>
     ...
      <LeafletControlGeocoder />
  </MapContainer>

Demo

关于javascript - 将 leaflet-control-geocoder 与 react-leaflet 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65576243/

相关文章:

javascript - 使用不同的参数调用函数两次

javascript - 网站 - 根据鼠标位置更改图像(2 个区域)

css - 在数据库中存储 ReactJS 组件、图像和 css 代码并检索它以动态构建 UI

javascript - 在 Node JS 中更改函数的上下文

javascript - 使用 JQuery 通过 javascript 读取 XML

javascript - 使其可编辑后如何在内部输入中写入?

javascript - React 表单提交 - 字段始终为空

javascript - 获取数字模数范围以使返回值位于最小范围值和最大范围值之间的正确方法是什么?

r - 如何在 Shiny 中显示传单的(高级)自定义弹出窗口?

svg - 将 SVG 转换为 GeoJSON