我在使用带有传单的 Shiny 应用程序上遇到了类似的问题,并找到了使用Google Elevation API和googleway 包google_elevation()功能的解决方法
后者(R 部分)可能不符合您的兴趣,但 Google Elevation API 实现应该适合您。
为任何可能想要它的人添加这个:自从写了这个答案,我写了插件传单地形,使这变得非常快速和容易。
不知道是否有人已经回答了,但我花了一个星期的时间来解决这个问题并找到了一个很好的解决方案。首先,您需要获取传单插件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 © <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米”这样的字符串,但你可以随心所欲地写。
| 归档时间: |
|
| 查看次数: |
886 次 |
| 最近记录: |