json — ST_asGeoJson для Multilinestring в php для листовки

У меня есть php-код, который выполняет запрос для преобразования поля geom Multilinestring из базы данных в данные geojson. Этот код прекрасно работает для многополигонных и точечных геомных данных, но при анализе многочастичного геомного поля есть некоторая ошибка.

   <?php
include('../config.php'); // the db config file
function createFeature () {
$feature = new stdClass();
$feature->type = 'Feature';
$feature->geometry = new stdClass();
$feature->geometry->type = 'Multilinestring';
$feature->properties = new stdClass();
return $feature;
}

function createCollection () {
$collection = new stdClass();
$collection->type = 'FeatureCollection';
$collection->features = array();
return $collection;
}$query = 'SELECT ST_AsGeoJson(geom) as geom,name FROM table_name';
if($result = pg_query($query)) {
$collection = createCollection();
while($row = pg_fetch_row($result))
{
$feature = createFeature();
$feature->geometry = $row[0];
$feature->properties->name=$row[1];
$collection->features[] = $feature;
}

echo (json_encode($collection,JSON_NUMERIC_CHECK));

}

Ответ, который я получаю при запуске кода:

 {"type":"FeatureCollection",
"features":
[
{
"type":"Feature",
"geometry":
"{\"type\":\"MultiLineString\",
\"coordinates\":[[[73.9750168196755,15.2410462374959],
[73.974612433675,15.2415698937723],
[73.9733813019535,15.2431183375569],
[73.9727337832775,15.2439091075613]]]
}",
"properties":{"name":"NH - 17"}
}
]
}

Если я попытаюсь удалить \ косую черту, используя функцию полоски

echo stripslashes(json_encode($collection,JSON_NUMERIC_CHECK));

Я все еще получаю ошибку

SyntaxError: Unexpected token t in JSON at position 72

Я предполагаю, что ошибка в основном из-за двойных кавычек перед значениями геометрии. Не знаю, как решить это.

Есть ли другой способ получить многоуровневые данные Geom как Geojson?

0

Решение

Ваша проблема в том, что

$feature->geometry = $row[0];

возвращает строка а не словарь (или «упорядоченная карта», или «массив» на языке PHP). Строки — это единственный способ, которым PostgreSQL может передавать JSON в ваш PHP-код.

Вы получите гораздо лучшие результаты, если будете делать что-то вроде:

$feature->geometry = json_decode($row[0]);
1

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

Ошибка была в лишних кавычках.

Убрал его, заменив строку

echo (json_encode($collection,JSON_NUMERIC_CHECK));

со следующим

$trial=stripslashes(json_encode($collection,JSON_NUMERIC_CHECK));
$trial= str_replace('"{"type"','{"type"',$trial);
$trial= str_replace('}","properties"','},"properties"',$trial);
echo $trial;
0

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