如何格式化 PostgreSQL 查询结果以使用 PHP 从关联数组中提取 GeoJSON 对象?

How to format PostgreSQL Query result to extract GeoJSON object from associative array with PHP?

所以,我正在尝试使用 Leaflet 和 PostGIS 构建一个简单的地图应用程序。我的 PostgreSQL 数据库中存储了一个点的 shapefile。我能够在 PGAdmin 中查询图层并生成有效结果,并且我有一个简单的 php 脚本来连接和执行查询。我卡住的地方是如何将查询结果格式化为地图客户端的 GeoJSON。

运行 pg_fetch_all 返回结果的结果是一个关联数组,里面有我的 GeoJSON 对象,就像这样

Array ( [0] => Array ( [row_to_json] => {"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[8.697130556,50.123908333,108.5]},"properties":{"id":3,"photo":"/Users/Nizz0k/Desktop/Peng/IMG_3475.jpeg","type":"Quote"}}

我的 PHP 技能不是很好,所以我不确定如何从数组中提取对象。我看过几个教程,展示了人们在 php 中重新创建 GeoJSON,但这似乎是多余的,因为它已经被数据库格式化并被格式化。

$result = pg_query($query) or die('Query failed: ' . pg_last_error());
$geodata = pg_fetch_all($result);
print_r($geodata);

以上是我目前的代码。

如果数据是多个,您可以使用 array_map 从数组中获取地理数据

$geodata = pg_fetch_all($result);
$geodata = array_map(function($item) {
   return json_decode($item['row_to_json'],true);
},is_null($geodata) ? [] : $geodata);

print_r($geodata);

然后您将从数据库中获取 GeoJSON 对象的关联数组。

如果你只想得到 json,你可以删除 json_decode

return $item['row_to_json'];