首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >leaflet.draw获取geoJSON的高度值

leaflet.draw获取geoJSON的高度值
EN

Stack Overflow用户
提问于 2020-05-13 10:11:44
回答 1查看 628关注 0票数 0

我使用leaflet.js和leaflet.draw让用户绘制一张漫游地图。当用户为越野车绘制一条线时,它只保存了lat和long值,我在其他网站上看到(看起来它使用的是相同的图书),它们也在保存高度值。我也该怎么做呢?用户完成绘制线后的代码:

代码语言:javascript
复制
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的代码:

代码语言:javascript
复制
var hg = L.control.heightgraph();
    hg.addTo(mymap);
    hg.addData(FeatureCollections);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-13 12:01:50

draw:created事件中调用海拔api,以获取该层每个点的高度。

代码语言:javascript
复制
map.on('draw:created', function (event) {
    var layer = event.layer;
    var props = feature.properties = feature.properties || {};
    props.attributeType = 0; 
    getAltitude(layer);
...
});

从api中获取数据:

代码语言:javascript
复制
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');
    })
  }
}

获取数据后,更新高度图:

代码语言:javascript
复制
map.on('dataloaded',(e)=>{
        var geojson = drawnItems.toGeoJSON();
        geojson.properties = {"Creator": "OpenRouteService.org","records": 36, "summary": "suitability"}; 
        hg.addData([geojson]); 
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61771895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档