美文网首页
2021-11-09 PostGIS学习三 加载空间数据

2021-11-09 PostGIS学习三 加载空间数据

作者: MrSwilder | 来源:发表于2021-11-10 11:43 被阅读0次

    一、加载空间数据

    PostGIS受到各种库和应用程序的支持,为加载数据提供了许多选项。

    我们将首先从数据库备份文件加载我们的工作数据,然后回顾使用常用工具加载不同GIS数据格式的一些标准方法。

    1.1 加载备份文件

    1.在PgAdmin浏览器中,右键单击nyc数据库图标,然后选择Restore…选项。


    image
    2.浏览到数据目录的位置,并选择nyc_data.backup 文件 image
    3.单击Restore options选项卡,向下滚动到Do not save部分,并将Owner切换为Yes。 image
    4.单击Restore按钮。 数据库恢复应该运行到完成,没有错误。 image
    5.加载完成后,右键单击nyc数据库,并选择Refresh选项来更新关于数据库中存在哪些表的客户端信息。 image

    1.2 用ogr2ogr加载

    ogr2ogr是一个命令行实用程序,用于在GIS数据格式(包括公共文件格式和公共空间数据库)之间转换数据。
    Windows:

    • ogr2ogr的构建版本可以从GIS Internals.下载。
    • ogr2ogr是作为QGIS安装的一部分,可以通过QGIS4W Shell菜单访问
    • 可以从MS4W下载ogr2ogr的构建版本。
      MacOS:
    • 如果您安装了Postgres。 然后你会在/Applications/Postgres.app/Contents/Versions/*/bin目录中找到ogr2ogr 。
    • 或者,你可以从KyngChaos下载一个独立的GDAL版本并安装它。
    • 最后,如果你已经安装了HomeBrew,你可以安装gdal包来访问ogr2ogr
      Linux:
    • 如果您通过包安装Linux,那么ogr2ogr应该已经作为gdal或libgdal包的一部分安装在您的PATH中。
      postgis讲习班数据目录包括一个
      2000/子目录,其中包含2000年人口普查的形状文件,这些文件已被2010年人口普查的数据淘汰。 我们可以使用这些文件来练习数据加载,以避免与已经使用备份文件加载的数据产生名称冲突。
    export PGPASSWORD=mydatabasepassword
    
    ogr2ogr \
      -nln nyc_census_blocks_2000 \
      -nlt PROMOTE_TO_MULTI \
      -lco GEOMETRY_NAME=geom \
      -lco FID=gid \
      -lco PRECISION=NO \
      Pg:'dbname=nyc host=localhost user=pramsey port=5432' \
      nyc_census_blocks_2000.shp
    

    ogr2ogr有大量的选项,我们在这里只使用其中的一小部分。 下面是对该命令的逐行解释。

    export PGPASSWORD=mydatabasepassword
    

    我们不是在连接字符串中传递密码,而是将它放在环境中,这样当命令运行时,它就不会在进程列表中显示。

    ogr2ogr \
    

    可执行文件的名字! 您可能需要确保可执行文件的位置在您的PATH中,或者使用可执行文件的完整路径,这取决于您的设置。

    -nln nyc_census_blocks_2000 \
    

    nln选项代表“新层名称”,并设置将在目标数据库中创建的表名称。

    -nlt PROMOTE_TO_MULTI \
    

    nlt选项代表“新图层类型”。 特别是对于形状文件的输入,新的图层类型通常是“multi-part geometry”,所以需要提前告诉系统使用“MultiPolygon”而不是“Polygon”作为几何类型。

    -lco GEOMETRY_NAME=geom \
    -lco FID=gid \
    -lco PRECISION=NO \
    

    lco选项代表“图层创建选项”。 不同的驱动程序有不同的创建选项,我们在这里为PostgreSQL驱动程序使用了三个选项。

    • GEOMETRY_NAME 设置几何列的列名。 我们更喜欢“geom”而不是默认值,这样我们的表就可以匹配workshop的标准列名。
    • FID 设置主键列名。 同样,我们更喜欢“gid”,这是workshop使用的标准。
    • PRECISION 控制数据库中数字字段的表示方式。当加载一个形状文件时,默认是使用数据库“numeric”类型,这比简单的数字类型(如“integer”和“double precision”)更精确,但有时更难处理。我们使用“NO”来关闭“numeric”类型。
    Pg:'dbname=nyc host=localhost user=pramsey port=5432' \
    

    在ogr2ogr中,参数的顺序大致是:可执行文件、选项、目标位置、源位置。所以这是目标位置,PostgreSQL数据库的连接字符串。“Pg:”部分是驱动程序名,然后连接字符串包含在引号中(因为它可能有嵌入的空格)。

    nyc_census_blocks_2000.shp
    

    本例中的源数据集是我们正在读取的形状文件。在一个调用中读取多个层是可能的,方法是将连接字符串放在这里,然后在它后面添加一列层名,但在本例中,我们只有一个要加载的形状文件。

    1.3 shapefiles 那是什么?

    你可能会问自己——“这个形状的东西是什么?”一个" shapefile "通常指的是一个文件集合,文件带有.shp, .shx, .dbf和其他扩展名,这些扩展名都是基于一个通用前缀名(例如,nyc_census_blocks)。实际的shapefile与扩展名为.shp的文件特别相关。但是,如果没有所需的支持文件,.shp文件本身是不完整的。
    必须包含的的文件:

    • .shp—形状格式;要素几何本身

    • .shx—形状索引格式;要素几何的位置索引

    • .dbf—属性格式;在dBase III中,每个形状的列表属性
      可选的文件:

    • .prj—投影格式;坐标系统和投影信息,一个使用wkt文本格式描述投影的纯文本文件

    shp2pgsql实用程序将形状数据从二进制数据转换为一系列SQL命令,然后在数据库中运行以加载数据,从而使形状数据在PostGIS中可用。

    1.4 用shp2pgsql加载

    shp2pgsql将Shapefile转换为SQL。它是一个转换实用程序,是PostGIS代码库的一部分,随PostGIS软件包一起发货。如果您在计算机上本地安装PostgreSQL,您可能会发现shp2pgsql已经随它一起安装,并且可以在安装的可执行目录中找到它。
    与ogr2ogr不同,shp2pgsql并不直接连接到目标数据库,它只是发出与输入形状文件等效的SQL。将SQL传递给数据库由用户决定,可以通过“管道”,也可以通过将SQL保存到文件并加载它。
    下面是一个示例调用,加载与之前相同的数据:

    export PGPASSWORD=mydatabasepassword
    
    shp2pgsql \
      -D \
      -I \
      -s 26918 \
      nyc_census_blocks_2000.shp \
      nyc_census_blocks_2000 \
      | psql dbname=nyc user=postgres host=localhost
    

    下面是对该命令的逐行解释。

    shp2pgsql \
    

    可执行程序!它读取源数据文件,并发出SQL,该SQL可以被定向到文件或通过管道传输到psql,以直接加载到数据库中。

    -D \
    

    D标志告诉程序生成“dump格式”,这比默认的“insert格式”加载速度快得多。

    -I \
    

    I标志告诉程序在加载完成后在表上创建一个空间索引。

    -s 26918 \
    

    s标志告诉程序数据的“空间引用标识符(SRID)”是什么。本次测试的源数据都在“UTM 18”中,其SRID为26918(见下文)。

    nyc_census_blocks_2000.shp \
    

    要读取的源形状文件。

    nyc_census_blocks_2000 \
    

    在创建目标表时要使用的表名。

    | psql dbname=nyc user=postgres host=localhost
    

    实用程序正在生成一个SQL流。“|”操作符接受该流并将其作为psql数据库终端程序的输入。psql的参数只是目标数据库的连接字符串。

    1.5 SRID 26918?这又是什么?

    大多数导入过程是不言自明的,但即使是有经验的GIS专业人员也可能会遇到SRID
    “SRID”代表“空间参考标识符”。它定义了数据的地理坐标系统和投影的所有参数。SRID很方便,因为它将关于地图投影(可能相当复杂)的所有信息打包到一个数字中。
    你可以通过在线数据库查看我们研讨会地图投影的定义,

    或者直接在PostGIS内部查询spatial_ref_sys表。

    SELECT srtext FROM spatial_ref_sys WHERE srid = 26918;
    

    PostGIS spatial_ref_sys 表是ogc标准表,它定义了数据库已知的所有空间参考系统。PostGIS附带的数据列出了超过3000个已知的空间参考系统,以及在它们之间转换/重新投射所需的细节。
    在这两种情况下,您都可以看到26918空间引用系统的文本表示(为了清晰起见,此处进行了精心打印):

    PROJCS["NAD83 / UTM zone 18N",
      GEOGCS["NAD83",
        DATUM["North_American_Datum_1983",
          SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],
          AUTHORITY["EPSG","6269"]],
        PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],
        AUTHORITY["EPSG","4269"]],
      UNIT["metre",1,AUTHORITY["EPSG","9001"]],
      PROJECTION["Transverse_Mercator"],
      PARAMETER["latitude_of_origin",0],
      PARAMETER["central_meridian",-75],
      PARAMETER["scale_factor",0.9996],
      PARAMETER["false_easting",500000],
      PARAMETER["false_northing",0],
      AUTHORITY["EPSG","26918"],
      AXIS["Easting",EAST],
      AXIS["Northing",NORTH]]
    

    如果你打开nyc_neighborhoods.prj 文件,您将看到相同的投影定义。
    你从当地机构(如纽约市)收到的数据通常会出现在由“国家飞机”或“UTM”标记的本地投影中。我们的投影是“通用横切墨卡托(UTM) 18区北”或EPSG:26918。

    相关文章

      网友评论

          本文标题:2021-11-09 PostGIS学习三 加载空间数据

          本文链接:https://www.haomeiwen.com/subject/iimvzltx.html