PostGIS常用函数介绍

1.将multipolygon重构为polygon,并转为geojson格式

SELECT gid, st_asgeojson((ST_DUMP(geom)).geom::geometry(Polygon)) AS geom FROM res_deference

查询结果如下图所示:

查询结果.png

但是,如果给SQLQuery传入类似 select name::varchar as n from table 包含双冒号的SQL, hibernate会认为是参数, 其中::应该转义才能避过,即SQL语句应该如下:

/**
     * 根据条件查询deference
     * @param propertyName,propertyValue
     * @return
     */
    @Query(value="select gid, area, perimeter, ld63272105, ld632721_1, yjfl, srys, chys, bhmj, shape_leng,"
            + " shape_area, year, flag, st_asgeojson((ST_DUMP(geom)).geom :: geometry(Polygon)) AS geom from res_deference WHERE year LIKE CONCAT('%',?1,'%')",nativeQuery = true)
    public List findDeferenceByCondition(String propertyValue);

2.其他相关函数介绍

(1)几何类型转换函数

wkt转geometry:st_geomfromtext(wkt)
select st_geomfromtext('Point(122 33)')
geometry转wkt:st_astext(geometry)
select st_astext(st_geomfromtext('Point(122 33)'))
geometry转geojson:st_asgeojson(geometry)
select st_asgeojson(st_geomfromtext('Point(122 33)'))
geojson转geometry:st_geomfromgeojson(geojson)
select st_geomfromgeojson(st_asgeojson(st_geomfromtext('Point(122 33)')))
geometry转geohash:st_geohash(geometry)
select st_geohash(st_geomfromtext('Point(116 39)'))
geohash转geometry:st_geomfromgeohash
select st_geomfromgeohash('wwfmzesx7yvjugxr3nzv')

(2)判断两个geometry之间的关系

St_within(geom A,geom B)返回A是否处于B中
St_disjoint(geom A,geom B)返回A是否不在B中
St_intersects(geom A,geom B)返回A是否和B有接触
St_union(geom A,geom B)返回A+B两个几何的合并
St_intersection(geom A,geom B)返回A和B的交集
St_difference(geom A,geom B)返回A与B不相交的部分几何

You may also like...