宣传单编号

时间:2018-07-17 09:58:35

标签: javascript leaflet

我正在尝试将layer.GetLatLngs转换为仅包含数字的数组,

[[17.68397, 1.98629],[17.6777, 1.96555],[17.66679, 1.9648],[17.6611, 1.99233]]

问题在于输出是否正确

LatLng(17.50438, 1.04772),LatLng(17.48686, 1.05775)

将数字转换为数组的最佳方法是什么?

//代码段

map.on('draw:created', function (e) {

var type = e.layerType,
    layer = e.layer;
if (type === 'polygon') {
    layer.on('click', function() {
        window.alert(polys);    
    });
}

drawnItems.addLayer(layer);
polys = layer.getLatLngs();
});

2 个答案:

答案 0 :(得分:3)

getLatlngs返回一个LatLng对象的数组。要获取坐标对列表,可以使用Array.map变换每个对象。例如,

layer.getLatLngs().map(function(point) {
    return [point.lat, point.lng];
});

还有一个演示

var latlngs = [
    [45.51, -122.68],
    [37.77, -122.43],
    [34.04, -118.2]
];
var layer = L.polyline(latlngs);
var resp = layer.getLatLngs().map(function(point) {
    return [point.lat, point.lng];
});

console.log(resp)
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.3.1/leaflet.js"></script>

或者如果您的意图是获取层的表示,请改用toGeoJSON来获取底层的几何图形:

layer.toGeoJSON().geometry.coordinates

这是另一个带有多边形的演示

var latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]];
var layer = L.polygon(latlngs);
console.log(layer.toGeoJSON().geometry.coordinates)
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.3.1/leaflet.js"></script>

答案 1 :(得分:0)

我希望以下代码可以工作。请检查并让我知道。快乐编码:)

let string = "LatLng(17.50438, 1.04772),LatLng(17.48686, 1.05775)",
    splittedArray = string.split("LatLng"),
    outputArray = [];
 
splittedArray.forEach(o => {
  if(o){
   let extractedLTLNG =  o.match(/\(([^)]+)\)/)[1].split(",");
   let tempArray = [extractedLTLNG[0], extractedLTLNG[1]];
     outputArray.push(tempArray);
  }else{
   return;
  }
})

console.log(outputArray);