geojson from mysql: преобразовать запрос postgresql с помощью функции агрегации json_agg (для веб-картографирования)

Один вопрос, касающийся функций агрегации MySQL и GeoJSON:

Я хотел бы преобразовать запрос из PostgreSQL в запрос MySQL 5.7 в соответствии с подсказкой в ​​конце следующей статьи

MySQL 8.0 Labs: функции агрегации JSON

Или это решение для MySQL с эквивалентным методом в postgresql:
Построить вложенный граф объектов из отношения hasmany SQL

Я уже нашел основные функции для MySQL 8.0

Запрос для преобразования с подсказкой, объясненной в конце статьи:

SELECT JSON_OBJECT(
'type', 'FeatureCollection',
'crs',  JSON_OBJECT(
'type',      'name',
'properties', JSON_OBJECT(
'name', 'EPSG:4326')),
'features', **JSON_OBJECTAGG**(
JSON_OBJECT(
'type',       'Feature',
'id',         site.id_site,
'geometry',    ST_AsGeoJSON(the_geom),
'properties', JSON_OBJECT(
'name', 'name',
'espece', espece_name,
'pseudo', pseudo
)
)
)
) AS objet_geosjon FROM site, catch, fish, espece, hunting_party WHERE site.id_site = catch.id_site AND catch.id_fish = fish.id_fish AND fish.id_espece = fish.id_espece AND catch.id_hunting_party = hunting_party.id_hunting_party;

Структура, необходимая в геойсоне:
{«type»: «FeatureCollection», «crs»: {«type»: «name», «properties»: {«name»: «EPSG: 4326»}}, «features»: [{«type»: » Элемент «,» идентификатор «: 1,» геометрия «: {» тип «:» Точка «,» координаты «: [- 4.59004219507089,48.559968224588]},» свойства «: {» имя «:» имя «,» espece » : «dorade royale», «pseudo»: «Fred»}}, {«type»: «Feature», «id»: 2, «geometry»: {«type»: «Point», «Координаты»: [- 4.5891116804469,48.559135011761]}, «properties»: {«name»: «name», «espece»: «dorade royale», «pseudo»: «Fred»}}, {«type»: «Feature», «id» : 4, «geometry»: {«type»: «Point», «координировать»: [- 4.58834537428597,48.5601855821988]}, «properties»: {«name»: «name», «espece»: «congre», » pseudo «:» Fred «}}, {» type «:» Feature «,» id «: 3,» geometry «: {» type «:» Point «,» координировать «: [- 4.58642960888365,48.5594972798939]},» properties «: {» name «:» name «,» espece «:» dorade royale «,» pseudo «:» Joe «}}, {» type «:» Feature «,» id «: 5,» geometry «: {«тип»: «точка», «координаты»: [- 4.58708644273588,48.5570338054289]}, «собственно связи «: {» name «:» name «,» espece «:» единственная коммуна «,» псевдо «:» Джо «}}, {» type «:» Feature «,» id «: 6,» geometry «: {«тип»: «точка», «координаты»: [- 4.5890022081382,48.5594610531973]}, «свойства»: {«имя»: «имя», «espece»: «congre», «псевдо»: «Фред»} }]}

Спасибо.

Я нашел путь в php:

<?php include("connection_db_mysql.php");if($dbconn){/*Build SQL SELECT statement and return the geometry as a GeoJSON element*/ $sql =
SELECT espece_name as espece, pseudo,  ST_ASGEOJSON(the_geom) AS geojson FROM site,  catch, fish, espece, hunting_party WHERE site.id_site = catch.id_site AND catch.id_fish = fish.id_fish AND fish.id_espece = espece.id_espece AND catch.id_hunting_party = hunting_party.id_hunting_party;';

# Try query or error
$rs = $dbconn->query($sql);
if (!$rs) {
echo 'An SQL error occured.\n';
exit;
}$prop = array('name' =>  'EPSG:4326' );
//$crs = array('type' => 'name' , 'properties' => json_encode($prop, JSON_HEX_QUOT));
//$crs = array('type' => 'name' , 'properties' =>  htmlspecialchars(json_encode($prop), ENT_QUOTES, 'UTF-8'));
# Build GeoJSON feature collection array
$geojson = array(
'type'      => 'FeatureCollection',
'crs'    => 'to_replace',
// 'crs' => htmlspecialchars(json_encode($crs), ENT_QUOTES, 'UTF-8'),
'features'  => array()
);
////'{"type" : "name", "properties" : {"name" : "EPSG:4326"}}'

//array_push($crs['properties'], $prop);
//array_push($objet_geojson['crs'], $crs);
$i=1;
# Loop through rows to build feature arrays
while ($row = $rs->fetch(PDO::FETCH_ASSOC)) {
$properties = $row;
# Remove geojson and geometry fields from properties
unset($properties['geojson']);
unset($properties['the_geom']);
$feature = array(
'type' => 'Feature',
'id' => $i,
'geometry' => json_decode($row['geojson'], true),
'properties' => $properties
);
$i++;
# Add feature arrays to feature collection array
array_push($geojson['features'], $feature);
}
$objet_geojson=str_replace('"to_replace"','{"type" : "name", "properties" : {"name" : "EPSG:4326"}}', json_encode($geojson))}

?>

Конечно, это больно;)

1

Решение

Задача ещё не решена.

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

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

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