我想计算一个标记的高度,但我在Leaflet中找不到任何解决方案。我找到了可以在地图上绘制高程轮廓的高程插件,但我并不需要它。你知道如何计算海拔高度吗?谢谢。
答案 0 :(得分:3)
我在使用传单的Shiny应用上遇到了类似的问题,并使用Google Elevation API的googleway package和engine = create_engine('postgresql://user:password@hostname:port/database_name')
函数找到了解决方法
后者(R部分)可能不符合您的利益,但Google Elevation API实施应该适合您。
答案 1 :(得分:3)
不确定是否有人回答过,但是我为此花了一个星期的时间,找到了一个不错的解决方案。首先,您需要获取传单插件leaflet-tileLayer-colorPicker:
https://github.com/frogcat/leaflet-tilelayer-colorpicker
使用此插件,您可以在给定纬度和经度的情况下获取地图上某个像素的颜色。然后,您需要一个数据集。为此而设计的一个是地图框Terrain-RGB拼贴:
https://docs.mapbox.com/help/troubleshooting/access-elevation-data/
这些图块具有以RGB格式编码的高程数据。对于像我这样的初学者来说,mapbox站点上的描述还不够循序渐进,因此,您可以按照以下步骤进行操作:
添加Terrain-RGB图块
var colorPicker = L.tileLayer.colorPicker('https://api.mapbox.com/v4/mapbox.terrain-rgb/{z}/{x}/{y}.pngraw?access_token={accessToken}', {
attribution: 'Map data © <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
maxZoom: 18,
id: 'mapbox.outdoors',
accessToken: 'your mapbox accesstoken'
}).addTo(yourMap)
.setOpacity(0); // optional
创建一个接受latlng并将RGB输出为数组的函数
function getElevation(location){
var color = colorPicker.getColor(location)
// location is an array [lat, lng]
分拆数组的RGB值,并将其放入mapbox的高程方程
let R = color[0];
let G = color[1];
let B = color[2];
let height = -10000 + ((R * 256 * 256 + G * 256 + B) * 0.1)
let heightRounded = Math.round( height * 10) / 10 + ' meters';
return heightRounded;
}
最后一位只是给出一个很好的数字,将其四舍五入到小数点后一位,并输出为“ 182米”之类的字符串,但是您可以根据自己的喜好编写它。