У меня есть 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?
Ваша проблема в том, что
$feature->geometry = $row[0];
возвращает строка а не словарь (или «упорядоченная карта», или «массив» на языке PHP). Строки — это единственный способ, которым PostgreSQL может передавать JSON в ваш PHP-код.
Вы получите гораздо лучшие результаты, если будете делать что-то вроде:
$feature->geometry = json_decode($row[0]);
Ошибка была в лишних кавычках.
Убрал его, заменив строку
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;