暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Postgis实现空间数据转GeoJSON (2)

PostGIS专栏 2020-03-19
998


摘要:本篇接上一篇,介绍基于Postgis3.0版本的ST_AsGeoJSON函数实现GeoJSON数据转换

1

GeoJSON介绍补充


上篇说到GeoJSON是一种以文本形式描述地理空间数据的数据结构简单理解为包含特定几何字段的json格式数据,其实在开发中就把他当做json格式操作,只要理解其结构就能灵活操作,可使用java各种json工具包进行读写,如Fastjson,Jackson等。


上篇给出GeoJSON要素集合的格式,可表示为一个图层,type类型为"FeatureCollection",其实GeoJSON也可以表示单个要素,type类型为"Feature",也就是要素集合里的一个要素,示例如下:



2

3.0版本实现


在实现思路上延续上一篇,按照GeoJSON结构一步一步构造。首先看一下3.0版ST_AsGeoJSON函数


  • 新版本函数声明如下:

text ST_AsGeoJSON(record feature, text geomcolumnname, integer maxdecimaldigits=9, boolean pretty_bool=false);
text ST_AsGeoJSON(geometry geom, integer maxdecimaldigits=9, integer options=8);
text ST_AsGeoJSON(geography geog, integer maxdecimaldigits=9, integer options=0);


关注第一行第一个参数,类型为record,表示可以接收一整行作为输入参数,也就是直接将非几何信息也封装进了GeoJSON格式,可以将一个feature直接转为GeoJSON对象,不用像2.5,2.4等版本那样先转几何信息,再转非几何信息,最后再组合;

【这里需要注意,3.0版本依然提供了geom作为输入参数的函数,所以对2.5,2.4等版本是可以兼容的,即使安装了3.0版本,以前写的代码也可以使用】


  • 测试例子

同上一篇,以河南省的前20条poi点数据为例:
select 
  st_asgeojson(hp.*)
from 
  henan_poi as hp
limit 
  20


  • 查询结果

将数据表每一行记录作为输入,直接转换为要素feature的GeoJSON格式,这也就简化了我们组装GeoJSON的步骤:


  • 以河南省学校poi为例

给出将查询结果转换为GeoJSON对象的完整代码,这里用到了postgresql的内置函数json_build_object,可以看到代码简化了很多,而且结构清晰:


  • 转换结果如下图所示:


3

总结


本篇使用Postgis3.0版本的ST_AsGeoJSON函数实现GeoJSON数据转换,该版本进行了升级,支持空间数据表中的行为作为输入参数,使用起来更加直观简洁。此外Postgis3.0也升级了其他相关的函数及性能,后续会做介绍,也推荐条件允许的话使用最新版本。

上一篇地址:Postgis实现空间数据转GeoJSON
文章转载自PostGIS专栏,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论