โอนย้ายข้อมูลฐานข้อมูลภูมิศาสตร์ไปยัง PostGIS โดยไม่ใช้แอป Esri หรือไม่


39

คุณสามารถบอกฉันได้ว่าฉันสามารถโหลดข้อมูลฐานข้อมูลภูมิศาสตร์ลงใน PostGIS ได้อย่างไรโดยไม่ต้องติดตั้งแอป Esri

วิธีแก้ปัญหาที่ฉันพบออนไลน์พูดคุยเกี่ยวกับการใช้ ArcGIS เพื่อแปลง GDB เป็น SHP แล้วนำเข้า SHP ไปยัง PostGIS


ขอบคุณมากสำหรับคำตอบของคุณ. FME อาจเป็นทางออกที่ถูกต้อง แต่เราคิดว่ามันเป็นทางออกที่แพงมาก เราคิดว่าระยะเวลาทดลองใช้ 14 วันไม่เพียงพอสำหรับการย้ายข้อมูล ใครบ้างมีประสบการณ์กับเครื่องมืออื่น ๆ เช่นสคริปต์ของ GDAL หรือ GeoKettle? ความนับถือ.
SonOfabox

FME Desktop เป็นทางออกที่ดีที่สุดสำหรับการย้ายข้อมูล

คำตอบ:


37

ฉันทำมันตลอดเวลาสำหรับลูกค้าของฉัน

ดัมพ์ข้อมูลของคุณไปที่ FileGDB หรือ Shapefiles จากนั้นเรียกใช้คำสั่งต่อไปนี้:

สำหรับ ESRI Shapefiles:

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

สำหรับ FileGDB:

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

สำหรับ FileGDB คุณต้องตรวจสอบให้แน่ใจว่าติดตั้งไดรเวอร์ FileGDB แล้ว คุณทำกับ:

ogrinfo - รูปแบบ

ซึ่งควรแสดง FileGDB บางแห่งเพื่อบอกให้คุณทราบ


คุณสามารถให้รายละเอียดเพิ่มเติมเกี่ยวกับการติดตั้งไดรเวอร์ FileGDB สำหรับ OGR ได้หรือไม่?
RyanDalton

7
วิธีที่ง่ายที่สุดสำหรับ Windows คือtrac.osgeo.org/osgeo4wมองหาแพ็คเกจ filegdb (ฉันกำลังจะอัปเดตพร้อมแก้ไขข้อบกพร่องในสัปดาห์หน้า) หากคุณอยู่บน Linux หรือ Mac คุณสามารถแก้ไขสคริปต์ต่อไปนี้ที่ฉันใช้เพื่อสร้างได้ทันที (ดู install_filegdb) gist.github.com/2955440
Ragi Yaser Burhum

@RyanDalton และแจ้งให้เราทราบว่ามันไป :)
Ragi Yaser Burhum

1
เกิดอะไรขึ้นกับข้อมูลเมตาของกระบวนการนี้ ยกตัวอย่างเช่น FGDC เมตาดาต้าซึ่งถือมากกว่าเพียงแค่ระบบการประสานงาน ฯลฯ
โอลิเวอร์ Burdekin

ogr2ogr จะไม่เขียนโดยค่าเริ่มต้นแต่โดยดูที่รหัสฉันเห็นว่ามีคำสั่ง "GetLayerDefinition" พิเศษที่คุณสามารถดำเนินการใน SQL พรอมต์เพื่ออ่านข้อมูลนี้ ogr2ogr -f "PostgreSQL" PG:"dbname=mydbname user=postgres" SanDiegoData.gdb -sql "GetLayerDefinition Parcels"จะถ่ายโอนข้อมูลเมตาของ ESRI XML ไปยังเขตข้อมูลในฐานข้อมูลนั้น
Ragi Yaser Burhum

7

ฉันไม่ได้ลองสิ่งนี้ดังนั้นจึงไม่สามารถยืนยันได้ แต่File Geodatabase APIอาจอนุญาตให้คุณส่งออกข้อมูลจากไฟล์ Geodatabase ไปยัง SHP (และจากนั้น PostGIS) เอกสารบอกว่า:

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

ขอบคุณสตีเฟ่นมีประโยชน์ที่จะรู้ว่ามี API แต่เราอาจลองใช้หากไม่มีเครื่องมือใด ๆ ที่ผู้คนเขียนซึ่งทำสิ่งนี้โดยอัตโนมัติ
Gerson Galang

6
หากคุณมี File GEodatabase API คุณสามารถแปลงโดยตรงโดยใช้ GDAL เช่นกัน: trac.osgeo.org/gdal/wiki/FileGDB
johanvdw

2
ข้อควรระวังบางประการ: ESRI ที่พัฒนาขึ้น API และเครื่องมือที่ใช้พื้นฐานจะทำงานกับไฟล์ GDB (.gdb) ที่สร้างหรือแปลงให้ใช้ใน ArcGIS 10 หรือใหม่กว่าเท่านั้น การสนับสนุนสำหรับรุ่น GDB ส่วนบุคคล (.mdb) รุ่นก่อนหน้านั้นมาจากความพยายามในการเขียนโปรแกรมก่อนหน้านี้และอาจทำงานได้ขึ้นอยู่กับข้อมูลและเครื่องมือ
V Stuart Foote

@johanvdw ฉันลอง trac.osgeo.org/gdal/wiki/FileGDB สองสามวันก่อนที่จะโพสต์คำถามของฉันไว้ด้านบนเนื่องจากคำแนะนำในลิงก์นั้นใช้ไม่ได้สำหรับฉันเช่นกัน ฉันได้ลองใช้ gdal 1.8.1 ล่าสุดบน Ubuntu 10.04 ของฉันแล้ว แต่ดูเหมือนว่าไม่ได้ติดตั้งปลั๊กอิน File GeoDB ลงใน gdal ฉันลอง "- ด้วย fgdb = / usr / local / FileGDB_API" และ "- กับ -fgdb = / usr / local" เนื่องจากเอกสารของพวกเขาไม่ชัดเจนในการระบุสิ่งที่ฉันควรใช้ในพารามิเตอร์ "with-fgdb" แต่ไม่มีอะไรทำงาน
Gerson Galang

GCG: แบบฟอร์มนั้นในหน้าเดียวกัน: (แทนที่ / usr / local / FileGDB_API ด้วยทุกที่ที่คุณแตก FileGDB_API_ <version>
.tar.gz

5

Esri ไฟล์ของ Geodatabase API เท่านั้นทำงานร่วมกับไฟล์ geodatabases สร้างขึ้นโดยใช้ 10.x - รุ่นเก่าจะไม่ทำงานกับ GDAL, QGIS หรือสิ่งอื่นที่ขึ้นอยู่กับการเปิดไฟล์ของ Geodatabase API ฐานข้อมูลส่วนบุคคลทางภูมิศาสตร์เก่าขึ้นอยู่กับ MS Access และมีโปรแกรมอ่านและรหัส

หากคุณมีฐานข้อมูลไฟล์ 10.x คุณสามารถอ่านเลเยอร์จาก FileGDB และโหลดลงใน PostGIS ด้วยคำสั่ง ogr2ogr เดียว ( ดูเอกสารประกอบ ):

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

เพื่อที่จะทำสิ่งนี้ฉันต้องดาวน์โหลด VS2010 express edition และสร้าง GDAL ของตัวเอง, ปลั๊กอิน ogr และ 1.3 ของไฟล์ Geodatabase API ที่เปิดอยู่

สิ่งที่ฉันไม่สามารถทำได้คือโอนย้ายฐานข้อมูล Geodatabase 9.x ที่เก่ากว่าโดยไม่ใช้ซอฟต์แวร์ esri (ไม่มีให้ฉันเลย atm) - ฉันไม่สามารถผ่านไปได้ ...

HRESULT = -2147220965, errorText = "GeoDatabase รุ่นนี้อาจไม่ถูกต้องหรือล้าสมัย"

... เมื่อพยายามเปิด 9.x "gdb" ด้วย API แบบเปิดที่รองรับ 10.x "gdb" เท่านั้น


เวอร์ชันล่าสุด (กลางปี ​​2014) ของ ogr2ogr พร้อม OpenFileGDB สามารถอ่านฐานข้อมูลไฟล์ทางภูมิศาสตร์ของไฟล์ ESRI เวอร์ชันที่เก่ากว่า
c.gutierrez

2

ในขณะที่ฉันยังไม่ได้ลองด้วยตัวเองฉันเพิ่งเจอบทช่วยสอนนี้(ซึ่งก็คือ shapefile -> PostGIS) ซึ่งใช้ซอฟต์แวร์ geoETL แบบโอเพ่นซอร์สที่เรียกว่า " Spatial Data Integrator " ฉันไม่แน่ใจว่ารองรับ Esri GDB หรือไม่ แต่อาจคุ้มค่าที่จะตรวจสอบเพิ่มเติมเพื่อดูว่าคุณสามารถใช้ผลิตภัณฑ์นี้เพื่อทำการแปลงที่คล้ายกันจาก GDB เป็น PostGIS โดยไม่ใช้ผลิตภัณฑ์ ESRI หรือไม่

แพ็คเกจ ETL อื่น ๆ ที่ฉันเคยได้ยินคือFME จาก Safe Sofware ($, เป็นที่นิยมมาก) และGeoKettle (โอเพ่นซอร์ส) รวมถึงการอ้างอิงอื่น ๆ อีกมากมายในหน้าวิกิพีเดีย Spatial ETL

แก้ไข : เมื่อขุดอีกเล็กน้อยดูเหมือนว่าSDI ไม่สนับสนุนการอ่าน EsriGDB โดยตรงแต่สามารถอ่านรูปแบบไฟล์ OGR ที่มีอยู่ได้


2

งาน FWIW กำลังดำเนินการเพื่อสร้าง GDB ไปยังตัวโหลด postgis ขึ้นอยู่กับลำต้นของ GDAL ล่าสุดซึ่งมีการผูก GDB ยังไม่มีโอกาสรวบรวมและลองด้วยตัวเอง แต่หวังว่าก่อนที่ PostGIS 2.0 จะออกมา

ตรวจสอบ - http://trac.osgeo.org/postgis/browser/spike/pramsey/postgis2fgdb

คุณอาจให้ข่าวคราวกับพอลในกลุ่มข่าวของ PostGIS เพื่อทราบว่าเขาอยู่ที่ไหน http://www.postgis.org/mailman/listinfo/postgis-users

สำหรับรูปแบบ GeoDatabase ส่วนบุคคล GDAL สามารถอ่านได้ดีและนั่นคือสิ่งที่ฉันมักจะใช้เพื่อส่งออกข้อมูลจาก Geodb ส่วนบุคคล


0

ตอบคำถามของฉันเองที่นี่ที่ฉันโพสต์ที่นี่ในขณะที่กลับมา ...

ตัวเลือกอื่นที่ฉันพบทางออนไลน์ (นอกเหนือจากคำแนะนำข้างต้น) คือการใช้ pgdbf ( https://github.com/kstrauser/pgdbf ) ซึ่งทิ้งสคริปต์ SQL ที่คุณสามารถใช้เพื่อนำเข้าสู่ postgres ด้วยตนเอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.