Di chuyển dữ liệu từ ArcSDE sang PostGIS?


19

Có ý kiến ​​cho rằng tôi hỏi lại câu hỏi này, nhưng có lẽ diễn đạt khác với cách tải hàng loạt nhiều shapefile vào PostGIS .

Tôi mới sử dụng postgis và sql nhưng tôi muốn sử dụng postgis như một nô lệ (trong thời điểm hiện tại) cho ArcSDE. Do đó, những gì tôi đang theo dõi là một số trợ giúp trong việc tìm ra cách tôi có thể tải lên hàng loạt dữ liệu ArcSDE vào PostGIS mỗi đêm.

Tôi có thể tạo tập lệnh python để xuất dữ liệu ArcSDE vào SHP hàng đêm, nhưng sau đó tôi không chắc chắn làm cách nào để tải lên các tệp SHP đã xuất vào PostGIS, ghi đè lên tất cả những gì đã tồn tại trong postgis như một tác vụ tự động (tệp bó tôi đoán ).

Kế hoạch lớn của tôi là thay thế ArcSDE / ArcGIS kịp thời bằng PostGIS, QGIS và GeoServer hoặc MapServer.


1
ArcSDE không quản lý kho dữ liệu RDBMS? Dữ liệu của bạn bây giờ là gì?
Sean

1
Phiên bản ArcSDE nào bạn đang sử dụng? - ArcSDE 10 có thể viết thư cho Postgres. resource.arcgis.com/content/arcsde/10.0/
Mạnh

Nếu bạn đọc kỹ câu hỏi của Med, tôi nghĩ rằng anh ấy thực sự đang cố gắng sao chép dữ liệu lên PostGIS để thử nghiệm và xuất bản web cho đến khi anh ấy có thể chuyển thành công khỏi ArcSDE. Vì vậy, vấn đề không phải là đồng bộ hóa ArSDE với PostGIS bản địa trong thời gian dài, mà chỉ trong thời gian ngắn.
RyanDalton

Có lẽ đồng bộ hóa là một người nghèo chọn tiêu đề câu hỏi. Thật vậy, tôi muốn đây là một phương pháp ngắn hạn để di chuyển và duy trì bộ dữ liệu từ SDE sang PostGIS. SDE của tôi có khoảng 600 bộ dữ liệu trên đó và tôi không muốn làm mờ dữ liệu theo cách thủ công. Med (mr).
geosmiles

Câu trả lời:


19

Thay vì thực hiện DB -> tệp -> chuyển đổi DB, trong đó Esri Shapefiles là thành phần dựa trên tệp trung gian, có thể đáng để điều tra chuyển DB -> DB trực tiếp hơn. Có một vài công cụ có thể làm điều này, nhưng tôi chỉ tập trung vào các công cụ GDAL / OGR mã nguồn mở .

Giả sử bạn có Windows Server, bạn có thể dễ dàng cài đặt GDAL / OGR bằng OSGeo4W . Với chế độ Cài đặt nâng cao, bạn có thể chọn cấu hình gói tùy chỉnh, chẳng hạn như trình điều khiển SDE (xem danh sách các gói này để đảm bảo có phiên bản phù hợp cho phiên bản SDE của bạn - chỉ hỗ trợ các phiên bản SDE 9.0 đến 9.2). Các gói này chỉ là các tiêu đề và trình bao bọc, và yêu cầu bạn cài đặt các thư viện SDE, mà bạn nên có trên một đĩa CD / DVD ROM và đảm bảo các biến PATH được đặt một cách thích hợp cho GDAL / OGR để tìm thấy nó. Cài đặt thành công sẽ hiển thị "SDE" ở đâu đó với lệnh sau trong trình bao OSGeo4W:ogr2ogr --formats

Sau khi bạn định cấu hình GDAL / OGR, bạn có thể sử dụng một vài công cụ:

  • Các công cụ dòng lệnh ogr2ogr từ vỏ OSGeo4W, mà sẽ cần một cái gì đó lệnh như: ogr2ogr -f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb password=somepassword port=5432" \ SDE:server,instance,database,username,password,layer,[version](bạn cũng có thể khám phá khác nhau -append, -overwritehoặc -updatetùy chọn)
  • Sao chép và sửa đổi tập lệnh Python hiện có kết nối với SDE và bạn có thể sửa đổi tập lệnh đó để chuyển dữ liệu sang nguồn dữ liệu khác.

Nhắc nhở chính cho phương pháp này là nó rất phức tạp để thiết lập.


+1 cho một phản hồi rất rõ ràng và hữu ích. Ngay cả khi phức tạp, nó là một con đường trực tiếp.
DEWright

Về lý thuyết, tôi thích ý tưởng thực hiện chuyển DB trực tiếp nhưng tôi đang tìm kiếm thứ gì đó 'cơ bản'. Tuy nhiên, chúng tôi là SDE 9.3.1 tại mo, do đó, câu trả lời ở trên không phải là đi. Như tôi nói tôi mới sử dụng PostGIS và SQL nhưng tôi đã nghĩ rằng có một tập lệnh 'ngoài kia' nơi bạn có thể tự động tải lên hàng loạt!
geosmiles

1
Tùy chọn "DB-> DB" khác cho tất cả các phiên bản SDE (và hàng trăm định dạng / DB khác) là FME . FME không miễn phí (có bản dùng thử miễn phí mà bạn có thể dùng thử), có nghĩa là họ có thể cung cấp hỗ trợ để giúp giải pháp đồng bộ hóa của bạn. Nhưng điều này rõ ràng đòi hỏi một ngân sách. Các tùy chọn miễn phí tốt nhất là để may một kịch bản tốt BAT với shp2pgsql, psqlvv
Mike T

2
Một trong những lý do tôi đã viết trình điều khiển GDAL của ArcObjects là để làm chính xác điều này. Vì họ có giấy phép ESRI, họ muốn duy trì FeatureClass phức tạp của họ và chuyển chúng sang PostGIS mỗi đêm. Trình điều khiển arcsde đi qua lớp api arcsde, nhưng trình điều khiển arcobjects đi, tốt, thông qua arcobjects. Chúng tôi đã sử dụng nó trong một năm và nó đã hoạt động khá độc đáo.
Ragi Yaser Burhum

Nơi bạn có trình điều khiển "SDE" để bạn có thể sử dụng tập lệnh Python hiện có? Tôi không thể tìm thấy ...
ePas Than

6

PostGIS có một trình tải có tên shp2pgsql mà bạn có thể sử dụng để tải shapefiles vào cơ sở dữ liệu PostGIS. Một trong các tùy chọn của nó ("-d") bỏ bảng cơ sở dữ liệu hiện có trước khi tải dữ liệu. Sẽ khá đơn giản để tạo một tệp bó hoặc tập lệnh có thể lặp qua tất cả các shapefile và tải chúng cho bạn.

Nếu bạn muốn nhận được fancier về nó, bạn có thể cài đặt GDAL và sử dụng các công cụ OGR (có trình kết nối ArcSDE) và bỏ qua quá trình xuất shapefile. Thông tin về trình kết nối ArcSDE có thể được tìm thấy ở đây .


Theo các thuật ngữ cơ bản, tôi sẽ viết một kịch bản như thế nào (sẽ được thêm vào dưới dạng một tác vụ theo lịch trình của cửa sổ) để thả một bảng thoát, giả sử nó được gọi là Listed_Buildings và sau đó tải lên một phiên bản mới hơn của nó được giữ dưới dạng shp trong D: \ sde_export.
geosmiles

1
Cách tiếp cận shapefile tồi tệ hơn khi tên trường lớn hơn 11 ký tự vì 11 ký tự khác sẽ bị xóa !!
SIslam

1

Tôi biết tôi đến bữa tiệc muộn nhưng có một lựa chọn khác cho việc này là tránh có 2 cơ sở dữ liệu.

Bạn có thể có ArcSDE trên đầu trang Postgresql + Postgis. Đây sẽ là chủ của bạn và chỉ db.

ArcSDE có thể được cấu hình để sử dụng hình học postgis chứ không phải st_geometries (độc quyền ESRI).

Điều này có nghĩa là sau đó bạn có thể sử dụng bất kỳ công cụ postgis nào để sử dụng trực tiếp các bảng không gian được tải / chỉnh sửa ArcSDE, vì thực tế chúng là các bảng gốc postgis.

Chẳng hạn, bạn có thể sử dụng qgis để kết nối trực tiếp với cơ sở dữ liệu postgis và đọc cùng một dữ liệu như arcgis thông qua arcsde.


1

Một cách tiếp cận khác là sử dụng một ETL không gian như Geok Ấm (nguồn mở).

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

Tôi sử dụng Geok Ấm để di chuyển dữ liệu giữa máy chủ sql và PostGIS mọi lúc. Tuy nhiên, trong khi nó hoạt động tốt với PostGIS, có những thách thức khi làm việc với loại dữ liệu không gian của SQL Server (xem gợi ý bên dưới). Ngoài ra, điều này giả định rằng bạn đang lưu trữ hình học SDE dưới dạng kiểu dữ liệu không gian riêng của SQL Server. Bạn có thể làm điều này với từ khóa Geometry khi tải dữ liệu qua ArcCatalog.

Gợi ý 1: khi chọn dữ liệu TỪ máy chủ sql áp dụng .STAsText () cho trường hình học hoặc Geok Ấm sẽ bị nghẹt trên kiểu dữ liệu của máy chủ sql.

Gợi ý 2: Khi chèn dữ liệu máy chủ INTO sql, bạn sẽ cần chèn hình học dưới dạng văn bản vào trường văn bản. Sau đó sử dụng bước sql để thêm một cột hình học mới (nếu cần) và điền nó từ hình dạng văn bản. Bằng cách đó, bạn sử dụng SQL Server để xây dựng hình học từ biểu diễn văn bản tiêu chuẩn OGC của hình học.

Gợi ý 3: Hãy nhớ đăng ký bảng không gian mới của bạn với SDE.


để sử dụng SDE.ST_AsText () bạn sẽ cần phải có SDE.ST_GEOMETRY_SHAPELIB_PKG, phải không?
ePas Than

0

Xem xét việc thiết lập sao chép cơ sở dữ liệu trên 9,3 db ban đầu.
Nó không hoạt động tốt như 10 cái mới nhưng ...
sao chép nó sang một sde khác trong postgresql bằng cách sử dụng kiểu dữ liệu postgis pg_geometry.

Dưới đây là một số trợ giúp esri
LƯU Ý: Điều này sẽ yêu cầu giấy phép trùng lặp nếu cả hai dbs không nằm trên cùng một máy


Nhận được một giấy phép trùng lặp dường như đang đánh bại điểm kỳ diệu đối với nguồn mở!
geosmiles

Nếu db ban đầu của bạn là trong postgresql, bạn có thể làm tất cả trong cùng một db (các trường hợp đa sde). HOẶC cài đặt postgresql trên cùng một máy với sde của bạn. Nếu không, bạn có thể xem xét nó phát triển và mua EDN (sde khác) cho tạm thời ~ 2,5k năm.
Brad Nesom

0

Bạn có thể viết ArcObjects vào:

A) kết xuất cơ sở dữ liệu arcsde của bạn; B) Mã c # đơn giản để tạo ra các sqls shp2pgsql; C) Mã c # đơn giản để kết xuất các bảng cũ; D) Plain c # để thực thi tất cả shp2pgsql vào postgresql của bạn;

Bạn có thể sử dụng trình điều khiển npgsql để đạt được điều này, thực thi các hàm và câu lệnh sql trực tiếp vào cơ sở dữ liệu postgis của bạn;


0

Hình học ArcSDE của bạn ( lưu trữ Geodatabase trong cơ sở dữ liệu quan hệ ) là gì? Trong trường hợp như vậy, bạn có thể xem xét sử dụng loại ST_Geometry và sau đó sử dụng các công cụ sao chép PostGre / PostGIS (Bản sao PostGIS @ FOSS4G ). Lược đồ này có thể có lợi thế là sử dụng các tính năng ArcSDE / ArcGIS / geodatabase cho phiên bản (cơ sở dữ liệu phiên bản) và các công cụ nguồn mở cho khuếch tán (cơ sở dữ liệu khuếch tán sao chép).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.