使用Leaflet计算高度

时间:2017-03-10 12:45:13

标签: leaflet

我想计算一个标记的高度,但我在Leaflet中找不到任何解决方案。我找到了可以在地图上绘制高程轮廓的高程插件,但我并不需要它。你知道如何计算海拔高度吗?谢谢。

2 个答案:

答案 0 :(得分:3)

我在使用传单的Shiny应用上遇到了类似的问题,并使用Google Elevation APIgoogleway packageengine = 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 &copy; <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米”之类的字符串,但是您可以根据自己的喜好编写它。