โอนย้ายข้อมูลจาก ArcSDE ไปยัง PostGIS หรือไม่


19

มันบอกว่าผมถามคำถามนี้อีกครั้ง แต่อาจจะเป็นคำพูดที่แตกต่างกว่าวิธีการโหลดเป็นกลุ่ม shapefiles หลาย PostGIS

ฉันใหม่กับ postgis และ sql แต่ฉันต้องการใช้ postgis เป็นทาส (ในขณะนี้) กับ ArcSDE ดังนั้นสิ่งที่ฉันเป็นช่วยในการปลุกฉันจะไปเกี่ยวกับการอัปโหลดชุดข้อมูล ArcSDE ลงใน PostGIS ทุกคืน

ฉันสามารถสร้างสคริปต์ไพ ธ อนเพื่อส่งออกข้อมูล ArcSDE ไปยัง SHP ทุกคืน แต่ฉันก็ไม่แน่ใจว่าจะทำการอัปโหลดไฟล์ SHP ที่ส่งออกไปยัง PostGIS เป็นอย่างไรเขียนทับสิ่งที่มีอยู่แล้วใน postgis ทั้งหมดเป็นงานอัตโนมัติ )

แผนใหญ่ของฉันคือการแทนที่ ArcSDE / ArcGIS ทันเวลาด้วย PostGIS, QGIS และ GeoServer หรือ MapServer


1
ArcSDE ไม่จัดการ RDBMS ที่เก็บข้อมูลหรือไม่ ข้อมูลของคุณในตอนนี้คืออะไร?
ฌอน

1
คุณใช้ ArcSDE เวอร์ชั่นใด - ArcSDE 10 สามารถเขียนถึง Postgres resources.arcgis.com/content/arcsde/10.0/…
Mapperz

หากคุณอ่านคำถามของ Med อย่างระมัดระวังฉันคิดว่าเขา / เธอพยายามจำลองข้อมูลลงใน PostGIS เพื่อการทดสอบและการเผยแพร่ทางเว็บจนกว่าเขาจะสามารถเปลี่ยนจาก ArcSDE ได้สำเร็จ ดังนั้นประเด็นคือไม่ต้องซิงโครไนซ์ ArSDE กับ PostGIS ดั้งเดิมในระยะยาว แต่สำหรับระยะสั้นเท่านั้น
RyanKDalton-OffTheGridMaps

บางทีการซิงโครไนซ์อาจเลือกชื่อคำถามไม่ดี แน่นอนว่าฉันต้องการให้นี่เป็นวิธีระยะสั้นในการเคลื่อนย้ายและบำรุงรักษาชุดข้อมูลจาก SDE ไปยัง PostGIS SDE ของฉันมีชุดข้อมูลประมาณ 600 ชุดและฉันไม่ต้องการสร้างความประหลาดใจให้ข้อมูลด้วยตนเอง ยา (mr)
geosmiles

คำตอบ:


19

แทนที่จะทำ DB -> ไฟล์ -> การแปลง DB โดยที่ Esri Shapefiles เป็นองค์ประกอบที่ใช้ไฟล์คนกลางมันอาจคุ้มค่าที่จะตรวจสอบการถ่ายโอน DB โดยตรง -> DB ที่คุ้มค่ากว่า มีเครื่องมือสองสามอย่างที่สามารถทำสิ่งนี้ได้ แต่ฉันแค่มุ่งเน้นไปที่เครื่องมือGDAL / OGRโอเพนซอร์ส

สมมติว่าคุณได้ใช้ Windows Server คุณสามารถติดตั้ง GDAL / OGR ใช้OSGeo4W ด้วยโหมดการติดตั้งขั้นสูงคุณมีความสามารถในการเลือกการกำหนดค่าแพคเกจที่กำหนดเองเช่นไดรเวอร์SDE (ดูรายการแพคเกจนี้เพื่อให้แน่ใจว่ามีการจับคู่ที่เหมาะสมสำหรับรุ่น SDE ของคุณ - รองรับเฉพาะ SDE รุ่น 9.0 ถึง 9.2) แพ็คเกจเหล่านี้เป็นเพียงส่วนหัวและส่วนห่อหุ้มและต้องการให้คุณติดตั้งไลบรารี SDE ซึ่งคุณควรมีใน CD / DVD ROM และให้แน่ใจว่าตัวแปร PATH นั้นถูกตั้งค่าอย่างเหมาะสมสำหรับ GDAL / OGR เพื่อค้นหา การติดตั้งที่สำเร็จจะแสดง "SDE" ที่ใดที่หนึ่งด้วยคำสั่งต่อไปนี้ในเชลล์ OSGeo4W: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ตัวเลือก)
  • คัดลอกและปรับเปลี่ยนสคริปต์ Python ที่มีอยู่ซึ่งเชื่อมต่อกับ SDE และคุณสามารถแก้ไขได้เพื่อถ่ายโอนข้อมูลไปยังแหล่งข้อมูลอื่น

ข้อแม้ที่สำคัญสำหรับวิธีนี้คือมันมีความซับซ้อนในการตั้งค่า


+1 สำหรับการตอบกลับที่ชัดเจนและเป็นประโยชน์ แม้จะมีความซับซ้อนมันเป็นเส้นทางโดยตรง
DEWright

ในทางทฤษฎีฉันชอบความคิดในการถ่ายโอนฐานข้อมูลโดยตรง แต่ฉันกำลังมองหาบางสิ่งที่ 'พื้นฐานพื้นฐาน' อย่างไรก็ตามเราเป็น SDE 9.3.1 ที่ mo ดังนั้นคำตอบข้างต้นไม่ใช่ go'a อย่างที่ฉันบอกว่าฉันใหม่กับ PostGIS และ SQL แต่ฉันคิดว่ามีสคริปต์ 'ออกมี' ที่คุณสามารถทำการอัปโหลดจำนวนมากโดยอัตโนมัติ!
geosmiles

1
อีกตัวเลือก "db-> DB" สำหรับทุกรุ่น SDE (และหลายร้อยรูปแบบอื่น ๆ / ดีบีเอส) เป็นFME FME นั้นไม่ปลอด (มีการทดลองใช้ฟรีที่คุณสามารถทดสอบได้) ซึ่งหมายความว่าพวกเขาสามารถให้การสนับสนุนเพื่อช่วยเหลือโซลูชันการซิงโครไนซ์ของคุณ แต่เห็นได้ชัดว่าต้องใช้งบประมาณ เลือกที่ดีที่สุดฟรีคือการตัดบทที่ดี BAT กับshp2pgsql, psqlฯลฯ
ไมค์ T

2
หนึ่งในเหตุผลที่ฉันเขียนไดรเวอร์ ArcObjects GDAL คือการทำสิ่งนี้ เนื่องจากพวกเขามีใบอนุญาต ESRI ผู้ต้องการรักษา FeatureClasses ที่ซับซ้อนและทิ้งลงใน PostGIS ทุกคืน ไดรเวอร์ arcsde ผ่านเลเยอร์ arcsde api แต่ไดรเวอร์ arcobjects ทำงานได้ดีผ่าน arcobjects เราใช้มันมานานปีแล้วและใช้งานได้ดีมาก
Ragi Yaser Burhum

คุณจะได้รับไดรเวอร์ "SDE" เพื่อให้คุณสามารถใช้สคริปต์ Python ที่มีอยู่นั้นได้ที่ไหน ฉันหาไม่ได้ ...
ePascoal

6

PostGIS มีโหลดเดอร์ชื่อshp2pgsqlที่คุณสามารถใช้เพื่อโหลด shapefiles ลงในฐานข้อมูล PostGIS หนึ่งในตัวเลือก ("-d") จะลดลงจากตารางฐานข้อมูลที่มีอยู่ก่อนที่จะโหลดข้อมูล มันควรจะค่อนข้างง่ายในการสร้างแบตช์ไฟล์หรือสคริปต์ที่สามารถวนลูปผ่านไฟล์รูปร่างทั้งหมดและโหลดให้คุณ

หากคุณต้องการได้รับมากกว่านี้คุณสามารถติดตั้ง GDAL และใช้เครื่องมือ OGR (ซึ่งมีตัวเชื่อมต่อ ArcSDE) และข้ามการส่งออกรูปร่างไฟล์ ข้อมูลเกี่ยวกับช่องเสียบ ArcSDE สามารถพบได้ที่นี่


ในแง่พื้นฐานบิลลี่วิธี / สิ่งที่ฉันจะเขียนสคริปต์ (ที่จะเพิ่มเป็นงานที่กำหนดตารางเวลาหน้าต่าง) เพื่อวางตาราง exsiting ให้พูดว่าเรียกว่า Listed_Buildings แล้วอัปโหลดรุ่นที่ใหม่กว่าของมันถือเป็น shp ใน D: \ sde_export
geosmiles

1
วิธี shapefile แย่ลงเมื่อชื่อเขตข้อมูลมากกว่า 11 ตัวอักษรเนื่องจาก 11 ตัวอักษรอื่น ๆ จะถูกลบ !!
SIslam

1

ฉันรู้ว่าฉันมาปาร์ตี้ช้า แต่มีตัวเลือกอื่นสำหรับสิ่งนี้ที่หลีกเลี่ยงการมี 2 ฐานข้อมูล

คุณสามารถมี ArcSDE ที่ด้านบนของ Postgresql + Postgis นี่จะเป็นเจ้านายของคุณและมีเพียงฐานข้อมูลเท่านั้น

ArcSDE สามารถกำหนดค่าให้ใช้รูปทรงเรขาคณิตของ postgis และไม่ใช่ st_geometries (เป็นกรรมสิทธิ์ของ ESRI)

ซึ่งหมายความว่าคุณสามารถใช้เครื่องมือ postgis ใด ๆ เพื่อใช้ตารางอวกาศเชิงพื้นที่โหลด / แก้ไข ArcSDE โดยตรงเนื่องจากเป็นตารางดั้งเดิม postgis

ตัวอย่างเช่นคุณสามารถใช้ qgis เพื่อเชื่อมต่อกับฐานข้อมูล postgis โดยตรงและอ่านข้อมูลเดียวกับ arcgis ผ่าน arcsde


1

อีกวิธีคือการใช้ ETL เชิงพื้นที่เช่น Geokettle (โอเพ่นซอร์ส)

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

ฉันใช้ Geokettle เพื่อย้ายข้อมูลระหว่าง sql server และ PostGIS ตลอดเวลา อย่างไรก็ตามในขณะที่มันทำงานได้ดีกับ PostGIS มีความท้าทายเมื่อทำงานกับชนิดข้อมูลเชิงพื้นที่ของ SQL Server (ดูคำแนะนำด้านล่าง) นอกจากนี้สมมติว่าคุณกำลังจัดเก็บรูปทรง SDE เป็นชนิดข้อมูลดั้งเดิมของ SQL Server คุณสามารถทำได้ด้วยคำสำคัญเรขาคณิตเมื่อโหลดข้อมูลผ่าน ArcCatalog

เคล็ดลับที่ 1: เมื่อเลือกข้อมูลจากเซิร์ฟเวอร์ sql จะใช้. STATText () กับฟิลด์เรขาคณิตหรือ Geokettle จะทำให้หายใจไม่ออกในประเภทข้อมูลเซิร์ฟเวอร์ sql

คำแนะนำ 2: เมื่อทำการแทรกข้อมูลลงในเซิร์ฟเวอร์ sql คุณจะต้องแทรกรูปทรงเรขาคณิตเป็นข้อความลงในช่องข้อความ จากนั้นใช้ขั้นตอน sql เพื่อเพิ่มคอลัมน์เรขาคณิตใหม่ (ถ้าจำเป็น) และเติมจากเรขาคณิตข้อความ ด้วยวิธีนี้คุณใช้ SQL Server เพื่อสร้างรูปทรงเรขาคณิตจากการแสดงข้อความมาตรฐาน OGC ของรูปทรงเรขาคณิต

คำแนะนำ 3: อย่าลืมลงทะเบียนตารางอวกาศของคุณกับ SDE


หากต้องการใช้ SDE.ST_AsText () คุณจะต้องมี SDE.ST_GEOMETRY_SHAPELIB_PKG ใช่ไหม
ePascoal

0

พิจารณาตั้งค่าการจำลองแบบฐานข้อมูลบน 9.3 db ต้นฉบับ
มันไม่ทำงานเช่นเดียวกับ 10 ใหม่ แต่ ...
ทำซ้ำไปยัง sde อื่นใน postgresql โดยใช้ชนิดข้อมูล postgis pg_geometry

นี่คือความช่วยเหลือบางอย่างของ ESRI
หมายเหตุ: การดำเนินการนี้จะต้องใช้สิทธิ์การใช้งานซ้ำซ้อนหากทั้ง dbs ไม่ได้อยู่ในเครื่องเดียวกัน


การขอใบอนุญาตซ้ำซ้อนดูเหมือนว่าจะเอาชนะจุดที่น่าอัศจรรย์ไปสู่โอเพนซอร์ส!
geosmiles

หาก db ต้นฉบับของคุณอยู่ใน postgresql คุณสามารถทำได้ทั้งหมดใน db เดียวกัน (อินสแตนซ์หลาย sde) หรือติดตั้ง postgresql บนเครื่องเดียวกับ sde ของคุณ ถ้าไม่ใช่คุณอาจคิดว่าเป็นการพัฒนาและซื้อ EDN (อีก sde) สำหรับช่วงระยะเวลา 2.5 พันปี
แบรดเนสซัม

0

คุณสามารถเขียน ArcObjects ไปที่:

A) ทิ้งฐานข้อมูล arcsde ของคุณ; B) รหัสธรรมดา c # เพื่อสร้าง sql shp2pgsql; C) รหัสธรรมดา c # เพื่อถ่ายโอนข้อมูลตารางเก่า; D) ธรรมดา c # เพื่อเรียกใช้ shp2pgsql ทั้งหมดลงใน postgresql ของคุณ

คุณสามารถใช้ไดรเวอร์ npgsql เพื่อให้บรรลุสิ่งนี้ดำเนินการฟังก์ชันและคำสั่ง sql ลงในฐานข้อมูล postgis ของคุณโดยตรง


0

เรขาคณิต ArcSDE ของคุณคืออะไร ( หน่วยเก็บข้อมูล Geodatabase ในฐานข้อมูลเชิงสัมพันธ์ ) ในสถานการณ์ดังกล่าวคุณอาจพิจารณาใช้ประเภท ST_Geometry จากนั้นใช้เครื่องมือจำลองแบบ PostGre / PostGIS ( PostGIS Replication @ FOSS4G ) แบบแผนนี้อาจมีข้อได้เปรียบในการใช้คุณสมบัติ ArcSDE / ArcGIS / geodatabase สำหรับรุ่น (ฐานข้อมูลรุ่น) และเครื่องมือโอเพ่นซอร์สสำหรับการแพร่กระจาย (ฐานข้อมูลการกระจายแบบจำลอง)

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