PostgreSQL GeoJSON lt;- php -gt; JavaScript(PostgreSQL GeoJSONlt;-php-gt;JavaScript)
问题描述
我正在痛苦地重建几乎一年前建造的东西(不要问旧版本到哪里去了--太尴尬了)。
核心功能在运行PHP脚本的Java脚本中使用$.getJSON
(ajax
-ish)调用,该脚本运行构建JSON对象并返回该对象的PostgreSQL查询。(暂停呼吸)。
问题在于轮到它发光时,PostgreSQL会吐出什么。
我知道PostgreSQL 9.4+中的build_json_object()
和build_json_array()
功能,但必须在其上运行此操作的其中一个数据库尚未从9.2升级,我在下个月左右没有时间这样做。
目前,我使用row_to_json()
(在几何体上使用ST_AsGeoJSON()
)来构建我的GeoJSON集合,该集合通过回调返回到客户端。
按照this very nice post的提示(并保持在该帖子的查询结构的非常小的epsilon内),我运行以下查询:
select row_to_json(fc)
from (SELECT 'FeatureCollection' As type,
array_to_json(array_agg(f)) As features
from (SELECT 'Feature' as type,
row_to_json((select l from (select $vars) as l)) as properties,
ST_AsGeoJSON(ST_Transform(lg.g1,4326)) as geometry
from $source_table as lg
where g1 && ST_Transform(ST_SetSRID(ST_MakeEnvelope($bounds),4326),4283)
) as f ) as fc;
($vars
、$source_table
和$bounds
由PHP从POST
变量中提供)。
fetchAll(PDO::FETCH_ASSOC)
查询<[2-11]和json_encode($result[0]["row_to_json"])
时,返回给javascrip对象是一个对象,可以对该对象进行运算以提供预期的(具有FeatureCollection
的对象,而该对象又包含一串,其中一个是)。
到目前为止,一切顺利。快速获取数据,并在一秒左右的时间内返回。
问题是,在查询阶段,与几何图形相关的内容数组是用双引号引起来的:单个Feature
的JSON的相关片段如下所示
{"type":"Feature","geometry":"{\"type\":\"Polygon\",
\"coordinates\":"[[[146.885447408,-36.143199088],
[146.884964384,-36.143136232],
... etc
]]"
}",
"properties":{"address_pfi":"126546461",
"address":"blah blah",
...etc }
}
这是我将PostgreSQL查询结果复制到文件时得到的结果:这是在任何错误处理输出之前得到的。
请注意只影响几何{type, coordinates}
属性(非JSON意义上)的(双转义)双引号{type, coordinates}
:"几何"位看起来像
"geometry":"{stuff}"
而不是
"geometry":{stuff}
如果PostgreSQL生成的JSON被放入GeoJSONLint的解析器/检查器,它就会死在尖叫堆中(它应该这样--它绝对不是‘规范’)--当然,它永远不会呈现:正如你所想的那样,它会吐出‘无效类型’。
目前我只是用一种杂乱无章的方法(我的正常操作方式)对它进行了排序--当$.getJSON
返回对象时,我
- 将其转换为字符串,然后
.replace(/"{/g, '{')
和.replace(
本文标题为:PostgreSQL GeoJSON<;-php->;JavaScript
基础教程推荐
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- 超薄框架REST服务两次获得输出 2022-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- 在多维数组中查找最大值 2021-01-01