zoukankan      html  css  js  c++  java
  • Postgis经常使用函数

    1,基本操作函数

    AddGeometryColumn(<schema_name>, <table_name>,<column_name>, <srid>, <type>, <dimension>)
    给一个已存在属性数据表添加一个几何字段(geomtrycolumn)。schema_name 指表的模式的名字,srid 必须是一个整数指相应于 SPATIAL_REF_SYS 表,type必须是一个大写的字符串,用来描写叙述几何类型,比如:'POLYGON' 或者 'MULTILINESTRING'。

    DropGeometryColumn(<schema_name>, <table_name>,<column_name>)
    从一个空间数据表中删除一个几何字段。

    ST_SetSRID(geometry, integer)
    给一个几何对象(geometry)设置一个整型的SRID,对于在一个范围内的查询很实用。 

    2. 几何空间数据关系函数

    ST_Distance(geometry, geometry) 
    返回两个几何对象的距离(笛卡儿距离),不使用索引。 

    ST_DWithid(geometry, geometry, float) 
    假设一个几何对象(geometry)在还有一个几何对象描写叙述的距离(float)内,返回TRUE。

    假设有索引,会用到索引。 

    ST_Equals(geometry, geometry)
    假设两个空间对象相等。则返回TRUE。用这个函数比用“=”更好,比如:
    equals('LINESTRING(0 0, 10 10)','LINESTRING(0 0, 5 5, 10 10)') 返回 TRUE。

    ST_Disjoint(geometry, geometry)
    假设两个对象不相连。则返回TRUE。不要使用GeometryCollection作为參数。



    ST_Intersects(geometry, geometry)
    推断两个几何空间数据是否相交,假设相交返回true,不要使用GeometryCollection作为參数。
    Intersects(g1, g2 ) --> Not (Disjoint(g1, g2 ))
    不使用索引能够用_ST_Intersects.

    ST_Touches(geometry, geometry)
    假设两个几何空间对象存在接触,则返回TRUE。不要使用GeometryCollection作为參数。


    a.Touches(b) -> (I(a) intersection I(b) = {empty set} ) and (a intersectionb) not empty
    不使用索引能够用_ST_Touches.

    ST_Crosses(geometry, geometry)
    假设两个几何空间对象存在交叉。则返回TRUE。不要使用GeometryCollection作为參数。
    不使用索引能够用_ST_Crosses.

    ST_Within(geometry A, geometry B)
    假设几何空间对象A存在空间对象B中,则返回TRUE,不要使用GeometryCollection作为參数。
    不使用索引能够用_ST_Within

    ST_Overlaps(geometry, geometry)
    假设两个几何空间数据存在交迭,则返回 TRUE,不要使用GeometryCollection作为參数。
    不使用索引能够用_ST_Overlaps.

    ST_Contains(geometry A, geometry B)
    假设几何空间对象A包括空间对象B,则返回 TRUE,不要使用GeometryCollection作为參数。
    这个函数类似于ST_Within(geometry B, geometryA)
    不使用索引能够用_ST_Contains.

    ST_Covers(geometry A, geometry B)
    假设几何空间对象B中的全部点都在空间对象A中,则返回 TRUE。
    不要使用GeometryCollection作为參数。
    不使用索引能够用_ST_Covers.

    ST_CoveredBy(geometry A, geometry B)
    假设几何空间对象A中的全部点都在空间对象B中,则返回 TRUE。

    3,Geometry Processing Functions

    几何空间数据处理函数

    ST_Centroid(geometry)
    返回质心点,就是依据几何空间数据,活动该几何空间数据的中心点,返回一个空间点数据.

    ST_Area(geometry)
    假设几何空间数据为多边形,或者多多边形,则返回空间数据的外围(返回类型double precision) ;

    ST_Length(geometry)
    这个曲线在其相关的空间參考长度(返回类型double precision) ;

    ST_PointOnSurface(geometry)
    一定在几何空间线数据上的点。返回一个数据点

    ST_Buffer(geometry, double, [integer])
    buffer操作一个非常实用函数。
    这个函数的第一个參数是要操作的空间几何数据。第二个參数长度(距离),第三个參数为一个整型,
    这个函数返回一个空间数据类型。以当前第一个參数空间几何数据为參考点,返回小于等于距离的空间

    几何数据点。最后由这些点组成一个多边形空间数据。最后一个參数表示
    在组成一个1/4圆的有几个点分隔。

    也就是说假设最好一个參数为8那么这个最后组成的多边形就是32边

    的多边形,假设不指定这个參数,系统默认的是8
    注意:第二个參数,距离它的单位为空间数据单位(度),在运算时须要进行单位换算,最后转换成度

    。单位的换算关系例如以下:
    1英里= 63360 米
    1米=1/1852 海里
    1海里= 1/60度
    假设要进行详细的运算,须要进行一下单位换算,比方要求一个500米的范围,那么应该是

    500*1/1852*1/60(度)

    ST_Envelope(geometry)
    这个函数能够返回mbr(空间最小外包矩形)。传入參数能够是point line polygon。


    ST_extent(geometry set)
    这个函数能够对一个空间数据集进行操作,返回一个最小包括矩形(mbr).
    如:SELECT EXTENT(GEOM) FROMGEOMTABLE GROUP BY CATEGORY


    ST_Difference(geometry A, geometry B)
    返回一个几何空间数据A不同于空间数据B的几何空间数据类型。不要使用GeometryCollection作为參数。


    也就是说,假设A为一个line,B也为一个line,那么他们返回的类型就是B把A切割的多线。
    如:
    select ST_AsEWKT(ST_Difference(geomfromText('LINESTRING(1 1,2 3,3 4,31)'),geomfromText('LINESTRING(2 0,2 2,5 2,3 1)')))
    返回的MULTILINESTRING((1 1,2 3,3 4,32),(3 2,3 1))
    假设是A和B都是一个POLYGON多边形,那么返回的就是多多边形。假设相交,那么返回的就是B把A切割。而且不再B中的多多边形。
    select ST_AsEWKT(ST_Difference(geomfromText('POLYGON((1 1,2 3,3 4,3 1,11))'),geomfromText('POLYGON((2 0,2 2,5 2,1 3,2 0))')))

    ST_Union(geometry, geometry)
    返回一个合并的几何空间数据,将两个几何空间数据合并为一个几何空间数据。或者GeometryCollection,不要使用GeometryCollection作为參数。

    ST_LineMerge(geometry)

    合并为线


    4 ,Geometry Accessors

    ST_AsText(geometry)
    将几何空间数据。转换成easy理解的空间数据文本格式。
    比如:
    (0,0 0,1 1,1 1,0 0,0)
    转换后应该是这种结果 POLYGON(0 0,0 1,1 1,1 0,0 0)

    ST_SRID(geometry)
    返回当前几何空间数据的SRID值

    ST_IsClosed(geometry)
    推断几何空间数据是否是闭合,就是推断起始点和终点坐标是同样的,假设是同样的返回true,否则返回false.

    ST_IsRing(geometry)
    这个函数參数的对象是line。推断起始点和终点坐标是否同样,
    假设闭合(这个曲线除了起始点和终点同样外,没有其它相交点)怎返回true,否则false,

    ST_NumPoints(geometry)
    返回几何空间数据lineString上的第一条线上点的个数。


    GeometryType(geometry)
    推断几何空间数据的类型。
    比如
    select GeometryType(geomfromText('MULTILINESTRING((1 1,2 3,3 4,3 1,2 1,1 1),(12,2 3,4 5))'))
    返回的类型为 MULTILINESTRING。

    关于每一个polygon过大,致使程序处理超级慢的问题解决:

          用geometry ST_Scale(geometry geomA, float XFactor, float YFactor);函数,对原始geometry分割,插入到新的数据表中。这样就变成了对小polygon的处理

  • 相关阅读:
    poj 1466 Girls and Boys (最大独立集)
    hdu 3667 Transportation (拆边 ,最小费用流)
    poj 3487 The Stable Marriage Problem (稳定婚姻 GaleShapley算法 )
    ZOJ Problem Set 1239 (最小点覆盖 )
    poj 2060 Taxi Cab Scheme (最小路径覆盖)
    poj 2226 Muddy Fields (最小点覆盖)
    hdu 1281 棋盘游戏 (二分图)
    hdu 3666 THE MATRIX PROBLEM (差分约束)
    poj 1325 Machine Schedule (最小点覆盖)
    ORACLE导入导出
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7159722.html
Copyright © 2011-2022 走看看