יותר

כיצד להעביר טבלאות מרחביות מ- MSSQL ל- PostGIS


ברצוני להעביר את הנתונים המרחבים שלי מ- MS SQL Server ל- PostGIS.

במקור הנתונים נשמרו עם SDE תחת MS SQL. ואז נדדתי בעזרת כלי ArcGIS. כך נוצרה עמודת נתונים מרחבית עם נתוני WKB.

ניסיתי לעבור עם ogr2ogr. כל הנתונים עוברים נכון למעט הגיאומטריה. אני לא יודע למה.

עדכון:

  • SDE 10.0
  • MS SQL Server 2008 R2
  • ArcGIS 10.2
  • PostgreSQL 9.3 (עם PostGIS)

ניסיתי להמיר את השדות באמצעות ogr2ogr:

ogr2ogr --config PGCLIENTCODING ISO-8859-2 -f "PostgreSQL PG:" host = localhost user = postgres dbname = test password = user "-sql" SELECT *, Geometry :: STGeomFromWKB ([Shape] .STAsBinary (), 23700 ) .STAsText () AS [geom] FROM [test]. [Dbo]. [BARLANG_PONT] "-nln barlang_pont ODBC: intra -a_srs" EPSG: 23700 "

באמצעות קוד זה השדה המרחבי תורגם לטקסט WKT (varchar) ל- PostGIS. מרחב ברירת המחדל הואwkt_geom (גיאומטריה)טור. אני יכול להשתמש ב--lco GEOMETRY_NAME = geomקוד לשם שינוי המרחב המוגדר כברירת מחדל אך לשתי העמודות יש סוגים שונים.


השלבים הבאים פועלים כמעט בכל מקרה בהליך זה. יכול להיות שזה רעיון טוב לתקן את הגיאומטריה אם אתה מוצא שתהליך זה אינו מניב את התוצאות הרצויות לך. יש מצב של שמות שדות קטומים אם הם יהיו גדולים מאורך מסוים. באופן כללי זו לא בעיה קשה כמו ההעברה בפועל.

  • פתח את ArcGIS.
  • פתח את טבלת MS SQL שלך באמצעות ArcGIS.
  • שמור את הטבלה הזו לטופס צורה.
  • סגור את ArcGIS.
  • פתח את QGIS
  • פתח את קובץ הצורה השמור
  • ייצא את קובץ הצורה ל- PostGIS

אם אתה מבצע העברה חד פעמית, אתה יכול לעשות זאת ב- QGIS.

  1. הוסף את טבלת MSSQL כשכבה.

  2. פתח את מנהל ה- DB שלך (הייתי צריך להוסיף את חיבור PostGIS שלי דרך ה- Layer-> Add Layer-> Add PostGIS Layer ... כדי שהחיבור יופיע במנהל DB)

  3. נווט אל מסד הנתונים של Postgres שאליו ברצונך לייבא את הנתונים.

  4. לחץ על כפתור ייבוא ​​שכבה:

  5. ציין את אפשרויות הייבוא ​​שלך ולחץבסדר.

  6. אם הכל ילך כשורה, תקבל הודעת הצלחה:

  7. בשלב זה הוא נמצא בבסיס הנתונים אך לא ב- QGIS. אתה יכול להוסיף אותו ממנהל DB.

עם זה (או עם OGR2OGR / GDAL הישיר) אתה לא מקבל את שמות העמודות הקטומים שיהיו לך על ידי ההמרה לטופס הצורה: