PostgreSQL GeoJSON<;-php->;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内),我运行以下查询:
($vars
、$source_table
和$bounds
由PHP从POST
变量中提供)。
fetchAll(PDO::FETCH_ASSOC)
查询<[2-11]和json_encode($result[0]["row_to_json"])
时,返回给javascrip对象是一个对象,可以对该对象进行运算以提供预期的(具有FeatureCollection
的对象,而该对象又包含一串,其中一个是)。
到目前为止,一切顺利。快速获取数据,并在一秒左右的时间内返回。
问题是,在查询阶段,与几何图形相关的内容数组是用双引号引起来的:单个Feature
的JSON的相关片段如下所示
这是我将PostgreSQL查询结果复制到文件时得到的结果:这是在任何错误处理输出之前得到的。
请注意只影响几何{type, coordinates}
属性(非JSON意义上)的(双转义)双引号{type, coordinates}
:"几何"位看起来像
而不是
如果PostgreSQL生成的JSON被放入GeoJSONLint的解析器/检查器,它就会死在尖叫堆中(它应该这样--它绝对不是‘规范’)--当然,它永远不会呈现:正如你所想的那样,它会吐出‘无效类型’。
目前我只是用一种杂乱无章的方法(我的正常操作方式)对它进行了排序--当$.getJSON
返回对象时,我
- 将其转换为字符串,然后
.replace(/"{/g, '{')
和.replace(