Как хранить и повторно использовать буклет LatLngs в базе данных

1

В настоящее время я сохраняю координаты для многоугольника в этом формате в базе данных:

[52.32527, 12.99683],[52.32191, 13.76587],[52.45936, 13.79333],[52.68637, 13.39233],[52.69636, 13.03528]

Позже я получаю массив полигонов из базы данных, поэтому у меня есть что-то вроде $polygon_array[$key]['coordinates'] maps $polygon_array[$key]['coordinates'] где latlngs - это строка.

С PHP добавление полигона для работы карты:

<script>
 <?php
  $coords = $polygon_array[$key]['coordinates'];
  echo "L.polygon([$coords]).addTo(map);";
 ?>
</script>

Но добавление на карту без PHP не работает и не вызывает ошибку:

<script>
 var polygon_array = JSON.parse( '<?php echo json_encode($polygon_array); ?>' ); // transfer PHP Array to Javascript

 jQuery.each(polygon_array, function (index, value) {
  coords = polygon_array[index]['coordinates'];
  L.polygon([coords]).addTo(map);
 });
</script>

Я думаю, проблема заключается в том, что Javascript обрабатывает координаты как строку.

Мои вопросы: как я могу использовать записи из базы данных для действительного параметра latlngs? Не существует ли простой способ использовать формат выше?

Теги:
leaflet

1 ответ

1
Лучший ответ

Вероятно, вы правы, считая, что ваша переменная coords по-прежнему является строкой.

Вероятно, вы должны просто преобразовать его снова в массив координат latLng:

var coordsArray = JSON.parse("[" + coords + "]");
L.polygon(coordsArray).addTo(map);
  • 0
    Это действительно работает! Но я не знаю, почему я должен цитировать скобки !?
  • 1
    Вы знаете, что JSON.parse принимает строку в качестве аргумента и что строки представлены в кавычках в JS и PHP. Здесь это похоже на выполнение JSON.parse( "[" + "[lat1, lng1], [lat2, lng2], ..." + "]"); потому что coords все еще строка. Вы бы сделали то же самое в PHP с json_decode . Просто кажется, что ваша переменная $coords просто хранит содержимое вашей записи базы данных в виде простого текста. Именно поэтому echo "L.polygon([$coords]).addTo(map);"; работает, так как $coords - это текстовое echo , оно им $coords .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню