当前位置:首页 > 问答 > 正文

怎么把ArcGIS网站上的数据直接弄进数据库里,步骤和注意点分享

需要明确一点,这里说的“ArcGIS网站”通常指的是ArcGIS Online或者ArcGIS Enterprise门户网站,这些网站是Esri公司提供的平台,用户可以在上面发布、查找和使用地理空间数据,将上面的数据“弄进数据库”通常是指将数据从这些在线服务下载为本地文件,然后导入到你自己管理的空间数据库中,比如PostGIS(与PostgreSQL配合)、SQL Server with Geometry/Locator等。

整个过程可以分为两大步:第一步是从网站获取数据,第二步是将数据导入数据库。

第一步:从ArcGIS网站获取数据

  1. 找到你需要的数据:在ArcGIS Online的官方网站或你所在机构的ArcGIS Enterprise门户上,通过搜索功能找到你需要的数据图层或地图服务,很多公共数据是公开可下载的。

  2. 检查数据是否允许下载:这是非常关键的一步,不是所有在网站上看到的数据都允许下载,你需要查看数据条目的详情页面。

    • 注意点:寻找“数据所有权和使用许可”信息,有些数据仅供在线查看(例如作为“要素服务”或“地图服务”仅可浏览),其下载按钮是灰色不可用的,只有明确标注允许下载(例如提供“导出数据”功能)的数据,你才能合法地获取,尊重数据版权和许可协议非常重要,尤其是在商业项目中。
  3. 选择导出/下载数据:对于允许下载的数据,通常会有“Export Data”(导出数据)或类似的按钮,点击后,系统会提供一些选项。

    • 注意点:选择导出的数据格式,最通用、兼容性最好的格式是ShapefileCSV(如果数据是纯属性表,不含几何图形),对于现代工作流,File Geodatabase也是一个很好的选择,它能更好地保留字段属性和域值,根据你的后续操作,选择合适的格式,Shapefile是导入各种数据库的稳妥选择。
  4. 设定导出范围和数据内容

    • 注意点:你可能可以选择是导出“整个数据集”还是只导出“当前视图范围内的数据”,如果你需要全部数据,请确保选择导出整个数据集,有些服务允许你只选择部分字段(列)进行导出,如果不需要所有字段,可以在这里进行筛选以减小文件体积。
  5. 完成下载:点击导出后,系统会准备数据文件,然后提供一个下载链接,将生成的ZIP压缩包(Shapefile和File Geodatabase通常以压缩包形式提供)下载到你的本地电脑。

第二步:将下载的数据导入数据库

现在你有了本地的数据文件(如Shapefile的ZIP包),接下来就是把它塞进数据库里,这里以常用的开源空间数据库PostGIS(作为PostgreSQL的扩展)为例,因为流程具有代表性,其他数据库如SQL Server原理类似,工具可能不同。

  1. 准备工作:确保数据库支持空间数据

    • 注意点:你的目标数据库必须已经启用了空间扩展,对于PostgreSQL,必须安装并创建了PostGIS扩展,一个普通的、没有空间功能的数据库是无法存储地图上的点、线、面等几何信息的,你可以用“CREATE EXTENSION postgis;”这样的SQL命令来启用它。
  2. 使用工具进行导入:推荐使用GDAL/OGR工具

    • 这是最强大和通用的方法,OGR是GDAL库的一部分,专门用于处理矢量数据,它有一个命令行工具叫ogr2ogr,可以直接将多种格式的空间数据(包括Shapefile)导入到支持的空间数据库中。
    • 基本命令示例ogr2ogr -f "PostgreSQL" PG:"dbname=你的数据库名 user=用户名 host=主机地址 password=密码" 下载的shapefile.shp -nln 你想要在数据库里创建的新表名 -lco GEOMETRY_NAME=geom --config PG_USE_COPY YES
    • 解释和注意点
      • -f "PostgreSQL":指定输出格式为PostgreSQL数据库。
      • PG:"dbname=...":这是连接数据库的字符串,需要你填入真实的信息。
      • 下载的shapefile.shp:指定你要导入的Shapefile文件路径。
      • -nln 新表名:这是非常重要的参数,它指定了在数据库中新建的表叫什么名字,如果不指定,它会用Shapefile的文件名作为表名。
      • -lco GEOMETRY_NAME=geom:这个参数指定在数据库表中,用于存储几何信息的列名叫做“geom”,有些系统默认是“wkb_geometry”,明确指定可以避免混乱。
      • --config PG_USE_COPY YES:这个配置选项可以加速大量数据的导入过程。
    • 更简单的方法:使用图形界面工具:如果你不习惯命令行,可以使用像QGIS这样的免费开源软件,在QGIS中,你可以将Shapefile拖拽到地图上,然后右键点击图层,选择“导出”->“要素存储为...”,在对话框中选择PostgreSQL作为格式,并填写连接信息,QGIS底层也是调用GDAL/OGR,但提供了友好的界面。
  3. 导入过程中的关键注意点

    • 坐标系问题:空间数据都有坐标系(例如常见的WGS84,Web Mercator等),ArcGIS Online上的数据通常使用WGS84或Web Mercator,在导入时,ogr2ogr通常会自动处理,将原始坐标系信息写入数据库,但你应该在导入后,在数据库中检查一下空间参考系统(SRID)是否正确,你可以在QGIS中查看图层属性,或者用SQL查询(如PostGIS的ST_SRID(geom))来确认。
    • 字段类型映射:OGR工具会自动将Shapefile的字段类型(如字符串、整数、浮点数)映射到数据库的相应类型,大多数情况下没问题,但偶尔可能需要手动调整,Shapefile的字符串字段有长度限制,如果数据库中的字段设置得过短,可能导致长文本被截断,导入后检查一下数据完整性。
    • 数据量大的处理:如果数据量非常大(几GB甚至更大),直接导入可能会耗时很长甚至失败,可以考虑使用ogr2ogr-gt参数来开启多线程处理,或者先将大数据集分割成小块分批导入。
    • 权限问题:确保你用于连接数据库的账号有创建新表和插入数据的权限。

总结一下核心流程和要点

流程就是“找数据 -> 确认可下载 -> 下载到本地 -> 使用专业工具(如ogr2ogr或QGIS)导入空间数据库”,整个过程中,最重要的注意点集中在三个方面:一是数据的版权和许可,务必遵守;二是目标数据库必须支持空间数据;三是处理好坐标系统,确保地图位置准确,虽然听起来步骤不少,但一旦熟悉了工具,这个过程会变得非常高效和可靠。

怎么把ArcGIS网站上的数据直接弄进数据库里,步骤和注意点分享