سؤال

أحاول وضع ملف SHP في قاعدة بيانات PostGIS الخاصة بي ، والبيانات مجرد قبالة قليلاً. أعتقد أن هذا لأنني أستخدم SRID الخطأ. محتويات ملف PRJ هي كما يلي:

GEOGCS["GCS_North_American_1983",
DATUM["D_North_American_1983",
SPHEROID["GRS_1980",6378137.0,298.257222101]],
PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]]

ما هو srid يرتبط هذا؟ وبشكل عام ، كيف يمكنني البحث عن SRID استنادًا إلى المعلومات الموجودة في ملف PRJ؟ هل هناك طاولة بحث في مكان ما يسرد جميع معادلات SRID و "GEOGCs"؟

للرجوع إليها ، إليك صورة لبعض البيانات المستوردة باستخدامها srid=4269 (حاولت أيضًا 4326 وحصلت على نفس النتائج الدقيقة):

Image http://img245.imageshack.us/img245/2545/4326sand.png

اللون الأصفر هو استيراد بياناتي من SHP ، والخلفية من OpenLayers (من مسؤول Geodjango). هل هذا يعني أنني أستخدم SRID الخطأ ، أم أن هذا هو هامش الخطأ المتوقع؟

ملف SHP من هنا

هل كانت مفيدة؟

المحلول

لتوضيح مجاز مرسلإجابة ، يطلق على SRID في بعض الأحيان رمز "EPSG". رمز SRID/EPSG هو defacto قصيرة لتمثيل النص المعروف للإسقاطات.

يمكنك إجراء بحث سريع على جدول SRID لمعرفة ما إذا كان يمكنك العثور على تطابق دقيق أو مشابه:
SELECT srid, srtext, proj4text FROM spatial_ref_sys WHERE srtext ILIKE '%BLAH%'

تم العثور على أعلاه في http://www.bostongis.com/؟content_name=postgis_tut01.

يمكنك أيضا البحث على spatialReference.org لهذه الأنواع من الأشياء. تعد أداة البحث بدائية ، لذا قد تضطر إلى استخدام بحث Google وتحديد الموقع ، ولكن أي نتائج ستظهر لك محتويات ESRI PRJ ، وإدراج Postgis SQL ، ومجموعة من العروض الأخرى.

أعتقد أن PRJ الخاص بك في: http://spatialreference.org/ref/sr-org/15/

نصائح أخرى

PRJ2EPSG هو موقع ويب صغير يهدف إلى هذه المشكلة بالضبط ؛ الصق في محتويات PRJ ويبذل قصارى جهده للعثور على EPSG مطابقة. لديهم أيضا API خدمة الويب. إنه ليس علمًا دقيقًا. يبدو أنهم يستخدمون Lucene وقاعدة بيانات EPSG لإجراء عمليات البحث النصية عن المباريات.

يبدو أن البيانات هي NAD83 ، التي لديها SRID قدرها 4269. قاعدة بيانات postgis لديك spatial_ref_sys الجدول وهو جدول البحث SRID.

إذا كانت البيانات تبدو كما هي مع SRID من 4269 (NAD83) و 4326 (WGS84) ، فهناك شيء خاطئ.

اذهب وتنزيل المرافق GDAL ، OGRINFO (التي من شأنها أن تبصق معلومات الإسقاط) و OGR2OGR المرافق لا تقدر بثمن.

أعطى جيمس بالفعل رابطًا إلى spatialReference.org. يساعد ذلك في العثور على معلومات مرجعية مكانية ... أفترض أنك قمت بتحميل spatial_ref_sys.sql عندما انت أعد مثيل postgis الخاص بك.

ولكي أكون صادقًا ، لا أعتقد أن المشكلة موجودة في جانب ما بعد الأشياء.

عادةً ما أحتفظ ببيبياتي في SRIDs مختلفة في DBS postgis. ومع ذلك ، أحتاج دائمًا لتسريع الإخراج SRS. أنت تعرض البلاط OpenStreetMap مسبقًا ، وأراهن أنه تم رسمه باستخدام SRID 900913 (إسقاط Mercator المعدل لخريطة Google أن الجميع يستخدمون الآن يجعل).

توصيتي لك هي:

1- قم بتعيين الإسقاط الصحيح في رمز OpenLayers الذي يطابق أي البلاط الذي تقرأ منه.

2.- احتفظ بالبيانات في قاعدة البيانات في أي SRID تريدها (طالما أنها صحيحة بالطبع).

3.- تأكد من أن الخادم الذي تستخدمه لإنشاء الصور من بياناتك (ArcGIS Server أو Mapserver أو GeoServer أو أي شيء آخر) هو إعادة صياغة لنفس SRS.

كل شيء سوف يتطابق.

هتافات

استخدم وحدة OSR Python من GDAL لتحديد الكود:

from osgeo import osr

srsWkt = '''GEOGCS["GCS_North_American_1983",
DATUM["D_North_American_1983",
SPHEROID["GRS_1980",6378137.0,298.257222101]],
PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]]'''

# Load in the projection WKT
sr = osr.SpatialReference(srsWkt)

# Try to determine the EPSG/SRID code
res = sr.AutoIdentifyEPSG()
if res == 0: # success
    print('SRID=' + sr.GetAuthorityCode(None))
    # SRID=4269
else:
    print('Could not determine SRID')

تأكد من إلقاء نظرة على: http://www.epsg-registry.org/

استخدم خيار الاستعلام بواسطة Filter وأدخل: North American Datum 1983.

هذا العائد -> EPSG: 6269.

أتمنى أن يكون هذا مناسبا لك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top