PostGIS之路——杂项功能函数
1、ST_Accum
构造几何图形数组。该函数支持3d、圆、曲面、多面体、三角网、TIN数据。
geometry[]ST_Accum(geometry set geomfield);
示例SQL:
SELECT (ST_Accum(the_geom)) As all_em, ST_AsText((ST_Accum(the_geom))[1]) As grabone,
(ST_Accum(the_geom))[2:4] as grab_rest FROM (SELECT ST_MakePoint(a*CAST(random()*10 As integer),
a*CAST(random()*10 As integer), a*CAST(random()*10 As integer)) As the_geom
FROM generate_series(1,4) a) As foo;
2、Box2D
返回一个Box2D表示一个二位几何图形的最大范围。该函数支持圆、曲面、多面体、三角网、TIN数据。
box2dBox2D(geometry geomA);
示例SQL:
SELECT Box2D(ST_GeomFromText('LINESTRING(1 2, 3 4, 5 6)'));
SELECT Box2D(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'));
3、Box3D
返回一个Box3D表示一个三维几何图形的最大范围。该函数支持3d、圆、曲面、多面体、三角网、TIN数据
box3dBox3D(geometry geomA);
示例SQL:
SELECT Box3D(ST_GeomFromEWKT('LINESTRING(1 2 3, 3 4 5, 5 6 5)'));
SELECT Box3D(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 1,220227 150406 1)'));
4、ST_Estimated_Extent
返回所给的空间表达估计范围。这个估计值来自几何图形数据列的统计。如果没有注明,默认当前模式可用。注意:如果是空表或没有几何类型字段,将返回空。1.5.4以前版本抛出异常刚好相反。小于PostgreSQL8.0时,应该用 update_geometry_stats()替换。
box2dST_Estimated_Extent(text schema_name, text table_name, text geocolumn_name);
box2dST_Estimated_Extent(text table_name, text geocolumn_name);
示例SQL:
SELECT ST_Estimated_Extent('tproads_project', 'geom');
5、ST_Expand
返回几何图形边框范围向各个方向上扩展一定距离的边框范围。类似于缓冲区向所有方向扩展,只是返回矩形范围。使用单位与系统单位SRID一致。该函数据在距离查询中经常使用。
geometryST_Expand(geometry g1, float units_to_expand);返回 POLYGON类型几何对象,
box2dST_Expand(box2d g1, float units_to_expand);
box3dST_Expand(box3d g1, float units_to_expand);
注意事项:1.5.0版本距离类型用double precision 替换 float4 。二维使用多于三维。PostGIS版本小于1.2中,用ST_DWithin。
示例SQL:
SELECT CAST(ST_Expand(ST_GeomFromText('LINESTRING(2312980 110676,2312923 110701,2312892 110714)', 2163),10) As box2d);
SELECT ST_AsEWKT(ST_Expand(ST_GeomFromEWKT('SRID=2163;POINT(2312980 110676)'),10));
6、ST_Extent
一个返回多个几何对象边界范围的聚合函数。这意味着它可以操作列表数据。相同的方法如SUM()和SVG()。单位使用系统参考系单位。这个函数类似于 Oracle Spatial/Locator的SDO_AGGR_MBR。
box2dST_Extent(geometry set geomfield);
注意:这个函数只返回X和Y,如果是三维时使用三维函数ST_3DExtent。2.0.0版本支持圆、曲面、三角网、TIN。
示例:
SELECT ST_Extent(geom) as bextent FROM tproads_project;
7、ST_3DExtent
返回三维几何对象的三维边界。
box3dST_3DExtent(geometry set geomfield);
SELECT ST_3DExtent(foo.the_geom) As b3extent
FROM (SELECT ST_MakePoint(x,y,z) As the_geom
FROM generate_series(1,3) As x
CROSS JOIN generate_series(1,2) As y
CROSS JOIN generate_series(0,2) As Z) As foo;
8、Find_SRID
这个函数返回SRID号通过查询几何字段列表中找到SRID的。
integer Find_SRID(varchar a_schema_name, varchar a_table_name, varchar a_geomfield_name);
示例SQL:
SELECT Find_SRID('public', 'tproads_project', 'geom');
9、ST_Mem_Size
返回几何对象需要的空间的数量(字节)。
integer ST_Mem_Size(geometry geomA);
示例SQL:
SELECT ST_Mem_Size(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'));
10、ST_Point_Inside_Circle
返回一个点是否在中心点坐标为_X,_Y,半径radius的圆内。t为在圆内。在圆上为f。
booleanST_Point_Inside_Circle(geometry a_point, float center_x, float center_y, float radius);
示例SQL:
SELECT ST_Point_Inside_Circle(ST_Point(1,2), 0.5, 2, 3);