我使用leaflet.js和leaflet.draw让用户绘制一张漫游地图。当用户为越野车绘制一条线时,它只保存了lat和long值,我在其他网站上看到(看起来它使用的是相同的图书),它们也在保存高度值。我也该怎么做呢?用户完成绘制线后的代码:
map.on('draw:created', function (event) {
var layer = event.layer,
feature = layer.feature = layer.feature || {};
feature.type = feature.type || "Feature";
var props = feature.properties = feature.properties || {};
drawnItems.addLayer(layer);
map.removeControl(drawControl);
$('#uploademap').attr('style', 'display:none;');
var str = JSON.stringify(drawnItems.toGeoJSON()).toString();
var hasil = $('#treck_leafletMap').val(str.substring(str.indexOf("coordinates") + 13, str.length - 4));
});此外,在同一网站上,他们有画布上的高度图,他们得到了总剪裁,下降和距离的路线。我现在使用鞋高度图leaflet.heightgraph,但我不希望它出现在地图上,我希望它在其他画布上,就像指定的网站做的那样。知道怎么做吗?
leaflet.heightgraph的代码:
var hg = L.control.heightgraph();
hg.addTo(mymap);
hg.addData(FeatureCollections);发布于 2020-05-13 12:01:50
在draw:created事件中调用海拔api,以获取该层每个点的高度。
map.on('draw:created', function (event) {
var layer = event.layer;
var props = feature.properties = feature.properties || {};
props.attributeType = 0;
getAltitude(layer);
...
});从api中获取数据:
function getAltitude(layer){
if(layer.getLatLngs){
var urls = [];
layer.getLatLngs().forEach((ll)=>{
urls.push('https://APIURL/?points='+ll.lat+','+ll.lng); //No free api!
})
Promise.all(urls.map(url =>
fetch(url).then(response => response.json())
)).then(json=> {
var latlngs = [];
layer.getLatLngs().forEach((ll, idx)=>{
ll.alt = json[idx].data[0];
latlngs.push(ll);
})
layer.setLatLngs(latlngs);
console.log(layer.getLatLngs())
map.fire('dataloaded');
})
}else{
var ll = layer.getLatLng();
fetch('https://APIURL/?points='+ll.lat+','+ll.lng).then(response => response.json()).then(josn => {
ll.alt = josn.data[0];
layer.setLatLng(ll);
console.log(layer.getLatLng())
map.fire('dataloaded');
})
}
}获取数据后,更新高度图:
map.on('dataloaded',(e)=>{
var geojson = drawnItems.toGeoJSON();
geojson.properties = {"Creator": "OpenRouteService.org","records": 36, "summary": "suitability"};
hg.addData([geojson]);
})https://stackoverflow.com/questions/61771895
复制相似问题