javascript - 将 openstreetmap 中的坐标设置为状态
问题描述
我正在尝试从特定城市获取坐标并将它们设置为一个状态以用作地图提供者。
我很确定这很愚蠢,但我在这方面花费的时间比我想承认的要多。
它有点工作,我可以设置状态,我可以控制台记录坐标,但是,它是第一个空值,空值。然后是 lat,null,最后是 lat long。像这样。
null null
101.6942371 null
101.6942371 3.1516964
我想将最后两个坐标设置为状态,我认为它应该可以正常工作,但是,我想将此状态用作经纬度,如下所示:
latitude: lat,
longitude: long,
当我这样做时,我得到“错误:longitude
必须提供”。我相信这是因为它试图将 null、null 设置为坐标。
代码如下:
import React, { useState, useEffect } from "react";
import MapGL, { GeolocateControl } from "react-map-gl";
import "mapbox-gl/dist/mapbox-gl.css";
import { OpenStreetMapProvider } from "leaflet-geosearch";
const Map = (props) => {
const [long, setLong] = useState(null);
const [lat, setLat] = useState(null);
const styles = {
width: "100%",
height: "85%",
position: "absolute",
};
useEffect(() => {
const provider = new OpenStreetMapProvider();
const fetchData = async () => {
const results = await provider.search({ query: props.currentCity });
setLong(results[0].x);
setLat(results[0].y);
};
console.log(long, lat)
fetchData();
}, [long, lat]);
const TOKEN =
"xxx";
const [viewport, setViewPort] = useState({
width: "75%",
height: 400,
latitude: lat,
longitude: long,
zoom: 12,
});
const _onViewportChange = (viewport) => {
setViewPort({ ...viewport, transitionDuration: 3000 });
};
return (
<div style={{ margin: "0 auto" }}>
<MapGL
{...viewport}
style={styles}
mapboxApiAccessToken={TOKEN}
mapStyle="mapbox://styles/mapbox/streets-v9"
onViewportChange={_onViewportChange}
></MapGL>
</div>
);
};
export default Map;
我只会将组件用作 .
谢谢
解决方案
解决了。
放弃并混合使用 mapboxgl 和 openstreetmapprovider。
https://docs.mapbox.com/help/tutorials/use-mapbox-gl-js-with-react/
太傻了,我之前没有这样做。
推荐阅读
- bash - 将 AWS CLI 结果存储到 bash 变量
- sql - 如何将此日期“10-JUL-88”插入 SQL Developer?
- angular - 在 mat-tab 标签上附加工具提示
- access-token - 使用 Azure AD 保护 Spring Boot 端点
- ruby-on-rails - 样式化涉及 ruby on rails 和 bootstrap 的表单
- java - 如何在 Java 中使用 xPath 正确解析此 XML 文件?
- java - 使用 Oracle XML Publisher API 创建 PDF 文档
- c++ - 设计:向两个不同的类公开通用功能
- magento2 - 我无法在 azure 门户上访问我的虚拟机文件
- java - 使用 fxdriver 自动化 javafx 应用程序