У меня есть карта Leaflet, и я хочу редактировать многоугольник. Я успешно это делаю, но когда я заканчиваю редактирование, координаты сохраняются следующим образом:

,,LatLng(44.94633, 26.00773),LatLng(44.93588, 25.94318),LatLng(44.94245, 25.90645),LatLng(44.91814, 25.87074),LatLng(44.91328, 25.9346),LatLng(44.90015, 25.97031),LatLng(44.90112, 26.11519)"

Я только хочу иметь координаты без имени функции. Как я могу это сделать? Благодарность!

map.on("dragend", function(e){
  poligon = polygon.getLatLngs();
  poligon1 = poligon.toString();
  $('#geo').val(poligon1);
  console.log(poligon1);
});

enter image description here

2
Robinson Chera 29 Авг 2017 в 11:54

4 ответа

Лучший ответ

Решил это, написав одну строку:

 poligon = polygon.getLatLngs();
      //this is what I added
      poligon2=poligon.join(',').match(/([\d\.]+)/g).join(',')
0
Robinson Chera 29 Авг 2017 в 09:38

Я просто добавлю ответ.

Это должно работать в общем: дать ему строку, он попытается найти все числа и вернуть их в массив.

<script>
var mystring = "LatLng(44.94633, 26.00773),LatLng(44.93588, 25.94318),LatLng(44.94245, 25.90645),LatLng(44.91814, 25.87074),LatLng(44.91328, 25.9346),LatLng(44.90015, 25.97031),LatLng(44.90112, 26.11519)";

function isNumeric(input) {
 return (input - 0) == input && input.length > 0;
}

// reads a string, finds numbers (float), returns the numbers in an array
function numbersInString(string) {
 var s = 0, temp=0, result = [];
 for(var i=0; i<string.length; i++) {
   s = string.substr(i,1);   // search 1 character, see if it's a number (digit)
   if(isNumeric(s)) {
     // parseFloat wil read as many characters as it can, and drop the rest
     temp = parseFloat(string.substr(i));
     // okay, now skip the length of the float
     i = i + temp.toString().length ;
     result.push(temp);  
   }
 }
 return result;
}

window.onload = function() {
   var numbers = numbersInString(mystring);
   document.getElementById('log').innerHTML += numbers.join(',');
}
</script>
<div id="log"></div>
0
Emmanuel Delay 29 Авг 2017 в 10:30

Не используйте toString(), вы получите array из objects

var arr=[];
console.log(polygon.getLatLngs());
for(var i=0;i<arr.length;i++){
    arr=polygon.getLatLngs();
    console.log(arr[i].lat);
    console.log(arr[i].lng);
    console.log("("+arr[i].lat +","+arr[i].lng+")");
}
1
user2025187 29 Авг 2017 в 09:44

Вы можете переопределить метод toString для прототипа LatLng в вашем проекте init

L.LatLng.prototype.toString = function() {
  return '(' + this.lat + ',' + this.lng + ')'; 
}

Затем вы увидите результат, подобный этому, Array.toString () рекурсивно вызывает toString () для каждого элемента в коллекции.

(44,94633, 26,00773), (44,94633, 26,00773)

0
Eugene Voynov 29 Авг 2017 в 09:51