Di chuyển dữ liệu cơ sở dữ liệu địa lý vào PostGIS mà không có ứng dụng Esri?


39

Bạn có thể cho tôi biết làm thế nào tôi có thể tải dữ liệu cơ sở dữ liệu địa lý vào PostGIS mà không phải cài đặt ứng dụng Esri không?

Giải pháp tôi tìm thấy trên mạng đã nói về việc sử dụng ArcGIS để chuyển đổi GDB sang SHP và sau đó nhập SHP sang PostGIS.


Cảm ơn bạn rất nhiều vì câu trả lời của bạn. FME có thể là một giải pháp hợp lệ, nhưng chúng tôi coi đó là một giải pháp rất tốn kém. Chúng tôi nghĩ rằng thời gian dùng thử 14 ngày là không đủ cho việc di chuyển. Có ai có kinh nghiệm với các công cụ khác, như tập lệnh GDAL hoặc GeoK Ấm không? Trân trọng.
SonOfabox

FME Desktop là giải pháp tốt nhất cho dữ liệu di chuyển

Câu trả lời:


37

Tôi làm điều đó tất cả thời gian cho khách hàng của tôi.

Kết xuất dữ liệu của bạn vào FileGDB hoặc Shapefiles sau đó thực hiện lệnh sau:

Đối với Shapefiles ESRI:

ogr2ogr -f "PostgreSQL" PG: "dbname = mydbname user = postgres" myshapefile.shp

Đối với FileGDB:

ogr2ogr -f "PostgreSQL" PG: "dbname = mydbname user = postgres" myFileGDB.gdb

Đối với FileGDB, bạn cần đảm bảo rằng trình điều khiển FileGDB đã được cài đặt. Bạn làm điều đó với:

ogrinfo - định dạng

sẽ hiển thị FileGDB ở đâu đó để cho bạn biết nó đã được cài đặt.


Bạn có thể cung cấp thêm chi tiết về việc cài đặt trình điều khiển FileGDB cho OGR không?
RyanDalton

7
Cách dễ nhất cho Windows là trac.osgeo.org/osgeo4w Hãy tìm gói filegdb (Tôi sắp cập nhật nó với các bản sửa lỗi vào tuần tới). Nếu bạn đang sử dụng Linux hoặc Mac, bạn có thể sửa đổi tập lệnh sau mà tôi sử dụng để xây dựng nó một cách nhanh chóng (xem install_filegdb) gist.github.com/2955440
Ragi Yaser Burhum

@RyanDalton và cho tôi biết mọi chuyện diễn ra như thế nào :)
Ragi Yaser Burhum

1
Điều gì xảy ra với siêu dữ liệu với quá trình này? Ví dụ: siêu dữ liệu FGDC không chỉ chứa hệ tọa độ, v.v.
Oliver Burdekin

ogr2ogr sẽ không viết nó theo mặc định , nhưng bằng cách nhìn vào mã, tôi thấy rằng có một lệnh "GetLayerDefDef" đặc biệt mà bạn có thể thực thi trong dấu nhắc SQL để đọc thông tin này. ogr2ogr -f "PostgreSQL" PG:"dbname=mydbname user=postgres" SanDiegoData.gdb -sql "GetLayerDefinition Parcels"sẽ chuyển siêu dữ liệu ESRI XML sang một trường trong db đó
Ragi Yaser Burhum

7

Tôi đã không thử điều này để không thể xác minh nó hoạt động, nhưng API Cơ sở dữ liệu địa lý tệp có thể cho phép bạn xuất dữ liệu từ tệp Cơ sở dữ liệu địa lý sang SHP (và từ đó là PostGIS). Các tài liệu nói:

With the API you can... Read and write data

Cảm ơn Stephen, rất hữu ích khi biết rằng có một API nhưng có lẽ chúng ta sẽ thử rằng nếu thực sự không có bất kỳ công cụ nào mà mọi người đã viết mà thực hiện điều này một cách tự động.
Gerson Galang

6
Nếu bạn có API tệp GEodatabase, bạn cũng có thể chuyển đổi trực tiếp bằng GDAL: trac.osgeo.org/gdal/wiki/FileGDB
johanvdw

2
Một số lưu ý: API do ESRI phát triển và các công cụ dựa trên nó, sẽ chỉ hoạt động với Tệp GDB (.gdb) được tạo hoặc chuyển đổi để sử dụng trong ArcGIS 10 hoặc mới hơn. Hỗ trợ cho các phiên bản GDB cá nhân (.mdb) trước đó đến từ những nỗ lực lập trình trước đó và có thể hoạt động tùy thuộc vào dữ liệu và công cụ.
V Stuart Foote

@johanvdw Tôi đã thử trac.osgeo.org/gdal/wiki/FileGDB một vài ngày trước khi đăng câu hỏi của tôi ở trên vì các hướng dẫn trên liên kết đó cũng không hiệu quả với tôi. Tôi đã thử gdal 1.8.1 mới nhất trên Ubuntu 10.04 nhưng dường như không cài đặt plugin File GeoDB vào gdal. Tôi đã thử "--with-fgdb = / usr / local / FileGDB_API" và "--with-fgdb = / usr / local" vì tài liệu của họ không rõ ràng trong việc chỉ định những gì tôi nên sử dụng trong tham số "with-fgdb" nhưng không có gì làm việc
Gerson Galang

GCG: hình thành cùng một trang: (thay thế / usr / local / FileGDB_API bằng bất cứ nơi nào bạn trích xuất FileGDB_API_ <phiên bản> .tar.gz)
johanvdw

5

API cơ sở dữ liệu địa lý tệp Esri chỉ hoạt động với cơ sở dữ liệu địa lý tệp được tạo bằng 10.x - các phiên bản cũ hơn sẽ không hoạt động với GDAL, QGIS hoặc bất cứ điều gì khác phụ thuộc vào API cơ sở dữ liệu địa lý tệp mở . Cơ sở dữ liệu địa lý cá nhân cũ phụ thuộc vào MS Access và có sẵn các trình đọc và mã.

Nếu bạn có cơ sở dữ liệu địa lý tệp 10.x, bạn có thể đọc lớp từ FileGDB và tải vào PostGIS bằng một lệnh ogr2ogr duy nhất ( xem tài liệu ):

ogr2ogr -overwrite -skipfailures -f "PostgreSQL" PG:"host=myhost user=myuser dbname=mydb password=mypass" "C:\somefolder\BigFileGDB.gdb" "MyFeatureClass"

Để thực hiện điều này, tôi cũng phải tải xuống phiên bản VS2010 express và xây dựng GDAL, plugin ogr của riêng tôi và 1.3 của API cơ sở dữ liệu địa lý tệp mở.

Những gì tôi đã không thể làm là di chuyển một cơ sở dữ liệu địa lý tệp 9.x cũ hơn mà không sử dụng phần mềm esri (không có sẵn cho tôi atm) - Tôi không thể vượt qua ...

HRESULT = -2147220965, errorText = "Bản phát hành này của GeoDatabase không hợp lệ hoặc đã lỗi thời."

... khi cố gắng mở "gdb" 9.x bằng API mở chỉ hỗ trợ 10.x "gdb".


Các phiên bản mới nhất (giữa năm 2014) của ogr2ogr với OpenFileGDB ít nhất có thể đọc phiên bản cũ hơn của Cơ sở dữ liệu địa lý tệp ESRI.
c.gutierrez

2

Trong khi tôi chưa thử nó, tôi đã xem qua hướng dẫn này (đó là shapefile -> PostGIS) sử dụng phần mềm GeoETL mã nguồn mở có tên là " Bộ tích hợp dữ liệu không gian ". Tôi không chắc liệu nó có hỗ trợ Esri GDB hay không, nhưng có thể đáng để nghiên cứu thêm để xem liệu bạn có thể sử dụng sản phẩm này để thực hiện chuyển đổi tương tự từ GDB sang PostGIS mà không cần sử dụng các sản phẩm ESRI hay không.

Các gói ETL khác mà tôi đã nghe nói là FME từ Safe Sofware ($, rất phổ biến) và GeoKantara (mã nguồn mở), cũng như nhiều tài liệu tham khảo khác trên trang wikipedia Spatial ETL .

EDIT : Khi đào sâu thêm một chút, có vẻ như SDI không hỗ trợ trực tiếp việc đọc EsriGDB , nhưng có thể đọc các định dạng tệp OGR có sẵn .


2

Công việc của FWIW đang diễn ra để tạo ra một trình tải GDB cho trình tải sau. Điều này phụ thuộc vào thân GDAL mới nhất có ràng buộc GDB. Haven't đã có cơ hội biên dịch và thử bản thân mình nhưng hy vọng trước khi PostGIS 2.0 ra mắt.

kiểm tra - http://trac.osgeo.org/postgis/browser/spike/pramsey/postgis2fgdb

Bạn có thể có thể cung cấp cho Paul một tin tức trên nhóm tin tức PostGIS để tìm hiểu xem anh ấy đang ở đâu với điều này. http://www.postgis.org/mailman/listinfo/postgis-users

Đối với định dạng GeoDatabase cá nhân, GDAL có thể đọc được điều đó và đó là những gì tôi thường sử dụng để xuất dữ liệu ra khỏi geodb cá nhân.


0

Trả lời câu hỏi của riêng tôi ở đây mà tôi đã đăng ở đây một lúc trước ...

Một tùy chọn khác mà tôi tìm thấy trực tuyến (ngoài các đề xuất ở trên) là sử dụng pgdbf ( https://github.com/kstrauser/pgdbf ) để loại bỏ tập lệnh SQL mà sau đó bạn có thể sử dụng để nhập vào các postgres theo cách thủ công.

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.