Один вопрос, касающийся функций агрегации 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))}
?>
Конечно, это больно;)
Задача ещё не решена.
Других решений пока нет …