Mapbox GL JS 找到离点击点最近的地址
Mapbox GL JS find closest address to clicked point
我正在尝试制作一个网络应用程序,用户可以在其中单击一个点,然后我可以获得离该点最近的地址。文档中的 This example 看起来非常接近我想要做的,除了 queryRenderedFeatures
调用似乎没有 return 任何功能的物理地址。从点击点获取物理地址的最佳方法是什么?
这是我的代码:
map.on("click", (e) => {
const features = map.queryRenderedFeatures(e.point);
const displayProperties = [
"type",
"properties",
"id",
"layer",
"source",
"sourceLayer",
"state",
];
const displayFeatures = features.map((feat) => {
const displayFeat = {};
displayProperties.forEach((prop) => {
displayFeat[prop] = feat[prop];
});
return displayFeat;
});
console.log(displayFeatures);
});
查找离某个点最近的地址的术语是“反向地理编码”。您可以为此使用 Mapbox's API,但还有很多其他的。
这里不用queryRenderedFeatures
您无法从 queryRenderedFeatures
函数中获取街道地址。但是可以得到点击点的坐标:
map.on("click", (e) => {
mapClickFn(e.lngLat);
});
根据这些坐标,您需要获取街道地址。这称为“反向地理编码”,可以使用 Mapbox API:
function mapClickFn(coordinates) {
const url =
"https://api.mapbox.com/geocoding/v5/mapbox.places/" +
coordinates.lng +
"," +
coordinates.lat +
".json?access_token=" +
YOUR_ACCESS_TOKEN +
"&types=address";
$.get(url, function (data) {
if (data.features.length > 0) {
const address = data.features[0].place_name;
console.log(address);
} else {
console.log("No address found");
}
});
}
我正在尝试制作一个网络应用程序,用户可以在其中单击一个点,然后我可以获得离该点最近的地址。文档中的 This example 看起来非常接近我想要做的,除了 queryRenderedFeatures
调用似乎没有 return 任何功能的物理地址。从点击点获取物理地址的最佳方法是什么?
这是我的代码:
map.on("click", (e) => {
const features = map.queryRenderedFeatures(e.point);
const displayProperties = [
"type",
"properties",
"id",
"layer",
"source",
"sourceLayer",
"state",
];
const displayFeatures = features.map((feat) => {
const displayFeat = {};
displayProperties.forEach((prop) => {
displayFeat[prop] = feat[prop];
});
return displayFeat;
});
console.log(displayFeatures);
});
查找离某个点最近的地址的术语是“反向地理编码”。您可以为此使用 Mapbox's API,但还有很多其他的。
这里不用queryRenderedFeatures
您无法从 queryRenderedFeatures
函数中获取街道地址。但是可以得到点击点的坐标:
map.on("click", (e) => {
mapClickFn(e.lngLat);
});
根据这些坐标,您需要获取街道地址。这称为“反向地理编码”,可以使用 Mapbox API:
function mapClickFn(coordinates) {
const url =
"https://api.mapbox.com/geocoding/v5/mapbox.places/" +
coordinates.lng +
"," +
coordinates.lat +
".json?access_token=" +
YOUR_ACCESS_TOKEN +
"&types=address";
$.get(url, function (data) {
if (data.features.length > 0) {
const address = data.features[0].place_name;
console.log(address);
} else {
console.log("No address found");
}
});
}