mysql — форматирование json в geojson через переполнение стека

Я пытаюсь получить некоторые данные, которые я вызвал, из базы данных mySQL для правильного отображения в формате GeoJSON. Вот некоторые из моего кода PHP:

$data = array(); //setting up an empty PHP array for the data to go into

if($result = mysqli_query($db,$query)) {
while ($row = mysqli_fetch_assoc($result))
{
$data[] = $row;
}
}

$jsonData =json_encode($data);
$original_data = json_decode($jsonData, true);
$coordinates = array();
foreach($original_data as $key => $value) {
$coordinates[] = array($value['latitude'], $value['longitude']);
}
$new_data = array(
'type' => 'FeatureCollection',
'features' => array(array(
'type' => 'Feature',
'properties' => array('time' => $value['time']),
'geometry' => array('type' => 'Point', 'coordinates' => $coordinates),
),
),
);

$final_data = json_encode($new_data, JSON_PRETTY_PRINT);
print_r($final_data);

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

Но мне нужно, чтобы они выглядели так, чтобы у каждого набора координат была своя пара ключ-значение «тип» и «свойства»:

введите описание изображения здесь

Я уже нашел некоторую помощь по этому вопросу Вот, но я просто не могу преодолеть это последнее препятствие форматирования …

1

Решение

Вместо того, чтобы строить координаты, вам нужно построить объекты:

$data = array(); //setting up an empty PHP array for the data to go into

if($result = mysqli_query($db,$query)) {
while ($row = mysqli_fetch_assoc($result))
{
$data[] = $row;
}
}

$jsonData =json_encode($data);
$original_data = json_decode($jsonData, true);
$features = array();
foreach($original_data as $key => $value) {
$features[] = array(
'type' => 'Feature',
'properties' => array('time' => $value['time']),
'geometry' => array(
'type' => 'Point',
'coordinates' => array(
$value['latitude'],
$value['longitude'],
1
),
),
);
}
$new_data = array(
'type' => 'FeatureCollection',
'features' => $features,
);

$final_data = json_encode($new_data, JSON_PRETTY_PRINT);
print_r($final_data);
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]