将数据从ArcSDE迁移到PostGIS?


19

有人建议我再问一次这个问题,但措辞可能与如何将多个shapefile批量加载到PostGIS中不同

我是Postgis和sql的新手,但我想将Postgis用作ArcSDE的从属设备(暂时)。因此,我所需要的是对每晚如何将ArcSDE数据批量上传到PostGIS的帮助。

我可以生成一个Python脚本以每晚将ArcSDE数据导出到SHP,但是我不确定如何将导出的SHP文件批量上传到PostGIS,将postgis中已经存在的文件作为自动化任务覆盖(批处理文件,我猜是)。

我的宏伟计划是及时用PostGIS,QGIS和GeoServer或MapServer替换ArcSDE / ArcGIS。


1
ArcSDE不管理RDBMS数据存储吗?您现在的数据是什么?
肖恩

1
您正在使用哪个版本的ArcSDE?-ArcSDE 10可以写入Postgres。resources.arcgis.com/content/arcsde/10.0/...
Mapperz

如果您仔细阅读Med的问题,我认为他/她实际上是在尝试将数据复制到PostGIS上以进行测试和Web发布,直到他成功地退出ArcSDE。因此,重点不是要长期将ArSDE与本机PostGIS同步,而只是短期内。
RyanKDalton-OffTheGridMaps 2011年

也许同步是问题标题的错误选择。实际上,我希望这是将数据集从SDE迁移到PostGIS的短期方法。我的SDE上有大约600个数据集,我不想手动迁移数据。中(先生)。
geosmiles 2011年

Answers:


19

Esri Shapefiles是基于中间人文件的组件,而不是进行DB->文件-> DB转换,这值得研究更直接的DB-> DB传输。有一些工具可以做到这一点,但我只专注于开源GDAL / OGR工具。

假设您有Windows Server,则可以使用OSGeo4W轻松安装GDAL / OGR 。在“高级安装”模式下,您可以选择自定义程序包配置,例如SDE驱动程序(请参阅此程序包列表,以确保与您的SDE版本相匹配-仅支持9.0至9.2 SDE版本)。这些软件包仅是头文件和包装器,并且要求您安装SDE库(应在CD / DVD ROM上安装),并确保已为GDAL / OGR找到合适的PATH变量才能找到它。成功安装将在OSGeo4W Shell中使用以下命令在某处显示“ SDE”:ogr2ogr --formats

配置GDAL / OGR之后,您可以使用一些工具:

  • 命令行工具ogr2ogr从OSGeo4W外壳,这将需要一个命令是这样的:ogr2ogr -f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb password=somepassword port=5432" \ SDE:server,instance,database,username,password,layer,[version](你还可以探索各种-append-overwrite-update期权)
  • 复制和修改现有的连接到SDE的Python脚本,您可以对其进行修改以将数据传输到另一个数据源。

该方法的主要警告是设置起来很复杂。


+1是一个非常清晰有用的回应。即使很复杂,它也是一条直接路径。
DEWright 2011年

从理论上讲,我喜欢直接进行数据库传输的想法,但是我正在寻找“基本的东西”。但是我们现在是SDE 9.3.1,因此上面的答案不是问题。正如我所说的,我是PostGIS和SQL的新手,但我会认为有一个脚本“在那里”,您可以在其中自动执行批量上传!
geosmiles 2011年

1
所有版本的SDE(以及数百种其他格式/ DB)的另一个“ DB-> DB”选项是FME。FME是非免费的(您可以试用免费试用版),这意味着它们可以提供支持以帮助您解决同步问题。但这显然需要预算。最好的自由选择是裁缝有好剧本BAT shp2pgsqlpsql等等
麦克ŧ

2
我编写ArcObjects GDAL驱动程序的原因之一就是要做到这一点。由于他们拥有ESRI许可证,因此他们希望维护其复杂的FeatureClass,并每晚将其转储到PostGIS。arcsde驱动程序通过arcsde api层,但是arcobjects驱动程序则通过arcobject。我们已经使用了一年,效果很好。
2011年

在哪里获得“ SDE”驱动程序,以便可以使用该现有的Python脚本?我找不到...
ePascoal

6

PostGIS有一个名为shp2pgsql的加载器,可用于将shapefile加载到PostGIS数据库中。它的选项之一(“ -d”)在加载数据之前删除现有的数据库表。创建可以循环访问所有shapefile并为您加载它们的批处理文件或脚本应该非常简单。

如果您想了解更多,可以安装GDAL,并使用OGR工具(具有ArcSDE连接器),并跳过shapefile导出。可在此处找到有关ArcSDE连接器的信息。


用Billy基本术语来说,我将如何/如何编写脚本(作为Windows计划任务添加)以删除现有表,可以说其名为Listed_Buildings,然后将其的较新版本上传为D中的shp。 sde_export。
geosmiles 2011年

1
当字段名大于11个字符时,shapefile方法更糟,因为其他11个字符将被删除!
SIslam

1

我知道我参加聚会很晚,但是还有另一种选择,可以避免拥有2个数据库。

您可以在Postgresql + Postgis之上安装ArcSDE。这将是您的主数据库,只有DB。

可以将ArcSDE配置为使用postgis几何,而不使用st_geometries(ESRI专有)。

这意味着您可以使用任何Postgis工具直接使用ArcSDE加载/编辑的空间表,因为它们实际上是postgis本机表。

例如,您可以使用qgis直接连接到postgis数据库,并通过arcsde读取与arcgis相同的数据。


1

另一种方法是使用像Geokettle(开源)这样的空间ETL。

http://www.spatialytics.org/projects/geokettle/

我一直使用Geokettle在sql服务器和PostGIS之间移动数据。但是,虽然它可以与PostGIS很好地配合使用,但是在使用SQL Server的空间数据类型时会遇到挑战(请参见下面的提示)。此外,这还假定您将SDE几何存储为SQL Server本机空间数据类型。通过ArcCatalog加载数据时,可以使用Geometry关键字执行此操作。

提示1:从sql服务器选择数据时,将.STAsText()应用于geometry字段,否则Geokettle会阻塞sql server数据类型。

提示2:将数据插入INTO sql服务器时,您需要将几何图形作为文本插入文本字段。然后使用sql步骤添加新的几何列(如果需要),并从文本几何中填充它。这样,您就可以使用SQL Server从几何的OGC标准文本表示形式构建几何。

提示3:请确保在SDE中注册新的空间表。


要使用SDE.ST_AsText(),您将需要SDE.ST_GEOMETRY_SHAPELIB_PKG,对吗?
ePascoal

0

考虑在原始9.3 db上设置数据库复制。
它不能像新的10那样工作,但是...
使用postgis数据类型pg_geometry将其复制到postgresql中的另一个sde。

这是一些esri帮助。
注意:如果两个数据库不在同一台计算机上,则这将需要重复的许可证


获得重复的许可证似乎正在克服向开放源代码过渡的观点!
geosmiles 2011年

如果原始数据库位于postgresql中,则可以在同一数据库(多SDE实例)中全部完成。或者在与您的sde相同的机器上安装postgresql。如果不是,您可能会考虑开发它,并在大约2.5k年内购买EDN(另一种sde)。
布莱德·尼索姆

0

您可以将ArcObjects编写为:

A)转储您的arcsde数据库;B)纯C#代码生成shp2pgsql sqls;C)纯C#代码转储旧表;D)普通的c#将所有shp2pgsql执行到您的postgresql中;

您可以使用npgsql驱动程序来实现这一点,直接在postgis数据库中执行函数和sql语句;


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.