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