zoukankan      html  css  js  c++  java
  • PostgreSQL及PostGIS使用

    基础知识

    参考文档:http://www.postgis.net/docs/

    PostGIS支持的GIS对象是OpenGIS Consortium(OGC)定义的“简单特征”的超集。OpenGIS规范定义了两种表达空间对象的标准方法:the Well-Known Text (WKT) form and the Well-Known Binary (WKB) form。WKT和WKB都包括有关对象类型和形成对象的坐标的信息。
    WKT实例:
    POINT(0 0)
    LINESTRING(0 0,1 1,1 2)
    POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))
    MULTIPOINT((0 0),(1 2))
    MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))
    MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))
    GEOMETRYCOLLECTION(POINT(2 3),LINESTRING(2 3,3 4))
    OpenGIS规范还要求空间对象的内部存储格式包括空间参考系统标识符(SRID)。创建空间对象以插入数据库时​​,需要SRID。下面的接口可以转换:

    bytea WKB = ST_AsBinary(geometry);
    text WKT = ST_AsText(geometry);
    geometry = ST_GeomFromWKB(bytea WKB, SRID);
    geometry = ST_GeometryFromText(text WKT, SRID);
    

    例如,向geotable表插入数据:

    INSERT INTO geotable ( the_geom, the_name )
      VALUES ( ST_GeomFromText('POINT(-126.4 45.32)', 312), 'A Place');

    SRID/geometry和geography

    空间参考标识符 (SRID) :是与特定坐标系、容差和分辨率关联的唯一标识符。
    SRID 的填充方式及其所示含义取决于存储数据所用的数据库。目前有多种公认的标准 SRID,例如欧洲石油测绘组 (EPSG) 定义的 SRID。某些数据库和空间类型(如 PostgreSQL 中的 PostGIS 几何或 SQL Server 中的地理类型)使用预定义的 EPSG 代码子集,只可使用具有这些 SRID 的空间参考。其他情况下(如 Oracle、PostgreSQL、IBM DB2 和 Informix 中的 ST_Geometry 类型)可使用具有 Esri 定义的 SRID 的空间参考。
    用得最多的是EPSG:4326球坐标,EPSG:3785的墨卡托投影坐标。
    geometry:平面坐标系,支持平面对象也支持空间对象。
    geography:地理坐标系,仅支持空间对象。
    两种坐标系
    1、一种球坐标(地理坐标);地理坐标系(Geographic Coordinate System),是使用三维球面来定义地球表面位置,以实现通过经纬度对地球表面点位引用的坐标系。一个地理坐标系包括角度测量单位、本初子午线和参考椭球体三部分。在球面系统中,水平线是等纬度线或纬线。垂直线是等经度线或经线。
    2、另一种平面坐标(投影坐标):投影坐标系 (Projection coordinatesystem)平面坐标系统地图单位通常为米 ,也称非地球投影坐标系统(notearth),或者是平面坐标。
    无论使用哪种空间坐标系,测量返回的单位(ST_Distance,ST_Length,ST_Perimeter,ST_Area)和ST_DWithin的输入均以米为单位。
    SQL语句,当未指定srid时,创建具有2D点地理的表默认为4326。
    不指定srid:
    CREATE TABLE ptgeogwgs(gid serial PRIMARY KEY, geog geography(POINT) );
    指定srid:
    CREATE TABLE ptgeognad2(gid serial PRIMARY KEY, geog geography(POINT,4269) );
    geography(a,b)类型支持两个可选修饰符:一个类型修饰符,用于限制列中允许的形状和尺寸类型; SRID修饰符,用于将坐标引用标识符限制为特定数字。
    类型修饰符的允许值为:POINT,LINESTRING,POLYGON,MULTIPOINT,MULTILINESTRING,MULTIPOLYGON。修饰符还通过后缀支持维度限制:Z,M和ZM。因此,例如,“LINESTRINGM”的修饰符只允许包含三维的线串,并将第三维视为度量。同样,'POINTZM'会期望四维数据。

    创建表 带GEOGRAPHY column:

    CREATE TABLE global_points (
        id SERIAL PRIMARY KEY,
        name VARCHAR(64),
        location GEOGRAPHY(POINT,4326)
      );
    

    查看带GEOGRAPHY column的表:

    SELECT * FROM geography_columns;
    

    插入语句:

    INSERT INTO global_points (name, location) VALUES ('Town', 'SRID=4326;POINT(-110 30)');
    INSERT INTO global_points (name, location) VALUES ('Forest', 'SRID=4326;POINT(-109 29)');
    INSERT INTO global_points (name, location) VALUES ('London', 'SRID=4326;POINT(0 49)');
    

    创建索引:

    CREATE INDEX global_points_gix ON global_points USING GIST ( location );
    

     查询:

    -- Distance calculation using GEOGRAPHY (122.2km)
      SELECT ST_Distance('LINESTRING(-122.33 47.606, 0.0 51.5)'::geography, 'POINT(-21.96 64.15)'::geography);
    -- Distance calculation using GEOMETRY (13.3 "degrees")
      SELECT ST_Distance('LINESTRING(-122.33 47.606, 0.0 51.5)'::geometry, 'POINT(-21.96 64.15)'::geometry);
    

    PostgreSQL及PostGIS安装和使用可以参考:https://blog.csdn.net/ljg124034929/article/details/70142119

    PostgreSQL9.6+PostGIS2.3学习笔记(一)导入shp文件:https://blog.csdn.net/u013420816/article/details/53572085

  • 相关阅读:
    城域波分组网的若干关键因素考虑
    浅析影响MSTP设备以太网宽带的因素
    通过网络访问adb
    ubuntu和ok6410开发板之间架设nfs
    mysql connector c++与 visual studio 2012 联合使用
    移植mysql到arm平台
    Python Numpy数组保存
    [转] 如何查看mysql的存储引擎类型
    通过session判断判断用户的操作权限
    PHP图形图像的典型应用 简单图像的应用(水印)
  • 原文地址:https://www.cnblogs.com/monkjavaer/p/10158998.html
Copyright © 2011-2022 走看看