使用传单计算高度

ner*_*ine 6 leaflet

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

zan*_*alt 5

我在使用带有传单的 Shiny 应用程序上遇到了类似的问题,并找到了使用Google Elevation APIgoogleway 包google_elevation()功能的解决方法

后者(R 部分)可能不符合您的兴趣,但 Google Elevation API 实现应该适合您。


Set*_*ske 5

编辑:一个不错的选择

为任何可能想要它的人添加这个:自从写了这个答案,我写了插件传单地形,使这变得非常快速和容易。

原答案:

不知道是否有人已经回答了,但我花了一个星期的时间来解决这个问题并找到了一个很好的解决方案。首先,您需要获取传单插件leaflet-tileLayer-colorPicker:

https://github.com/frogcat/leaflet-tilelayer-colorpicker

给定纬度和经度,此插件使您能够获取地图上某个像素的颜色。然后,您需要一个数据集。为此设计的一个是 mapbox Terrain-RGB 图块:

https://docs.mapbox.com/help/troubleshooting/access-elevation-data/

这些图块具有以 RGB 格式编码的高程数据。mapbox 网站上的描述对于像我这样的初学者来说还不够分步,所以你可以这样做:

添加 Terrain-RGB tilelayer

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
Run Code Online (Sandbox Code Playgroud)

创建一个接受 latlng 并将 RGB 作为数组输出的函数

function getElevation(location){
var color = colorPicker.getColor(location)
// location is an array [lat, lng]
Run Code Online (Sandbox Code Playgroud)

将数组的 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;
}
Run Code Online (Sandbox Code Playgroud)

最后一位只是给出一个四舍五入到第一个小数的好数字,输出为像“182米”这样的字符串,但你可以随心所欲地写。