javascript - MapBox 反向地理编码
问题描述
我对地图框和网络开发非常陌生。我有一个 Lat 和 long ,我想将其转换为地址名称并将其存储在 JavaScript 变量中,以便我可以使用地址名称。我努力寻找应该添加什么头文件才能使反向编码起作用,以及应该添加什么 JavaScript 来实现我的目标。非常感谢您的时间。
JS
mapboxgl.accessToken = 'pk.eyJ1IjoiZXNxdWlsYXgiLCJhIjoiY2tqd2ZyMJ9.7z7Eyrj3iexJ9uDVYIT0yw';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v11', // stylesheet location
center: [115.83333, -32.01667], // starting position [lng, lat]
zoom: 11// starting zoom
});
var marker = new mapboxgl.Marker({color:"#ff3300",dragable:true,scale:0.8}).setLngLat([115.83333, -32.01667]).addTo(map)
解决方案
这通过添加地理编码器插件并将其设置为反向地理编码来工作。由于您传递的坐标可能会被翻转,或者超出范围,您需要在将它们传递给地理编码器之前对其进行完整性检查,否则它将崩溃。
请在下面查看我的实现:
var coordinates = document.getElementById('coordinates'); // gets element from geocoder plugin
var coordinatesGeocoder = function(query) {
// input validation. Decimal coordinates will be matched by this regex
var matches = query.match(
/^[ ]*(?:Lat: )?(-?\d+\.?\d*)[, ]+(?:Lng: )?(-?\d+\.?\d*)[ ]*$/i
);
if (!matches) {
return null;
}
function coordinateFeature(lng, lat) {
return {
center: [lng, lat],
geometry: {
type: 'Point',
coordinates: [lng, lat]
},
place_name: 'Lat: ' + lat + ' Lng: ' + lng,
place_type: ['coordinate'],
properties: {},
type: 'Feature'
};
}
var coord1 = Number(matches[1]);
var coord2 = Number(matches[2]);
var geocodes = [];
if (coord1 < -90 || coord1 > 90) {
// must be lng, lat
geocodes.push(coordinateFeature(coord1, coord2));
}
if (coord2 < -90 || coord2 > 90) {
// must be lat, lng
geocodes.push(coordinateFeature(coord2, coord1));
}
if (geocodes.length === 0) {
// else could be either lng, lat or lat, lng
geocodes.push(coordinateFeature(coord1, coord2));
geocodes.push(coordinateFeature(coord2, coord1));
}
return geocodes;
};
var Geocoder = new MapboxGeocoder({
accessToken: mapboxgl.accessToken,
localGeocoder: coordinatesGeocoder,
zoom: 10,
placeholder: 'Adresse oder Koordinaten z.B. (10.50, 48.00)',
mapboxgl: mapboxgl
})
map.addControl(Geocoder);
推荐阅读
- python - 如何将 2 个列表组合成一个字典,其中键可以有多个值?
- python - 在 HTML 中查找文本搜索元素的标记
- sql - 我的case when 声明有什么问题?
- ios - 在 ObservableObject 中导入变量
- javascript - 页面加载后如何插入或更新 js-timestamp 组件?
- git - 支持完全手动更新或合并的源代码控制服务器或客户端
- gcloud - 通过环境变量设置 GCloud SDK 属性
- html - iPhone Safari iOS 13上的html缩放中的可点击区域标签
- java - 降雨问题,这次只有 3 个月
- vue.js - 为什么我的 v-data-table 中没有显示图像