أكثر

كيف يمكنني الانتقال من نتائج WKT لحساب منطقة UTM (رسم الخرائط) إلى كائن مرجعي مكاني؟

كيف يمكنني الانتقال من نتائج WKT لحساب منطقة UTM (رسم الخرائط) إلى كائن مرجعي مكاني؟


حساب منطقة UTM (رسم الخرائط) يعين منطقة UTM لكل معلم ضمن فئة المعلم كقيمة حقل. القيمة التي تم إرجاعها هي "سلسلة إسناد مكاني UTM" ، وهي سلسلة طويلة تبدو كالتالي:

PROJCS ["GCS North American 1983 UTM Zone 10S (محسوبة)"، GEOGCS ["GCS_North_American_1983"، DATUM ["D_North_American_1983"، SPHEROID ["GRS_1980"، 6378137.0،298.257222101]]، " "Degree"، 0.0174532925199433]]، PROJECTION ["Transverse_Mercator"]، PARAMETER ["False_Easting"، 500000.0]، PARAMETER ["False_Northing"، 0.0]، PARAMETER ["Central_Meridian"، - 123.0]، PARAMETER ["0.9] ]، PARAMETER ["Latitude_Of_Origin"، 0.0]، UNIT ["Meter"، 1.0]]

أرغب في استخدام هذه المعلومات لإنشاء كائن مرجعي مكاني في الإسقاط المشار إليه في سلسلة الإسناد المكاني UTM. ومع ذلك ، لست متأكدًا من كيفية القيام بذلك. يبدو أن تحليل قيمة بين الأقواس بعد أن تقربني PROJCS. ومع ذلك ، نظرًا للتنسيق المختلف للسلسلة (المسافات مقابل الشرطات السفلية ، وما إلى ذلك) ، فأنا لست متأكدًا من مدى موثوقية تمكني من جعلها تعمل على أي حال. هل هناك طريقة أفضل للحصول على كائن مرجعي مكاني تقع فيه كل ميزة؟

ربما تكون هناك طريقة أفضل للحصول على منطقة UTM لكل ميزة ، لكني أرغب في أن يكون الرمز قائمًا بذاته ولا يتطلب فئة ميزة منطقة UTM لتعمل.


بالرجوع إلى تعليق @ mkennedy أعلاه ، إليك نص صغير لتحليل وإنشاء مرجع مكاني إذا كان المرجع هو NAD83.

استيراد arcpy inputString = r'PROJCS ["GCS North American 1983 UTM Zone 10S (محسوبة)" ، GEOGCS [ETCETCETC] 'editString = inputString.replace (""، "_"). upper () إذا كان "NORTH_AMERICAN_1983" في سلسلة التحرير و "UTM_ZONE" في editString: utmIndex = editString.find ("UTM_ZONE_") utmZone = editString [(utmIndex + 9) :( utmIndex + 11)] إذا كانت utmZone [-1:]. isalpha: utmZone = "2690" + utmZone [ : 1] else: utmZone = "269" + utmZone sr = arcpy.SpatialReference (int (utmZone)) print sr.name

NAD_1983_UTM_Zone_10N


لقد توصلت إلى حل ربما لا يكون الأجمل ولكنه يعمل. يوجد أدناه رمز يقوم بتحليل المعلومات المطلوبة من حقل فئة المعلم بعد تشغيل أداة Calculate UTM Zone ، ثم استخدامها لإنشاء كائن الإسناد المكاني.

>>> cursor = arcpy.da.SearchCursor ("test"، "utm_zone") >>> لـ utmStr ، في المؤشر: الكلمات = utmStr.split ("") للكلمة في الكلمات: if len (word)! = 3 : تابع المنطقة = كلمة [: 2] .lstrip ("0") إن لم يكن zone.isdigit (): تابع الشبكة = كلمة [-1] إذا كانت الشبكة في "XWVUTSRQPN": hem = "N" else: hem = "S "srName =" WGS 1984 UTM المنطقة {0} {1} ". شكل (منطقة، تنحنح) ريال = arcpy.SpatialReference (srName) طباعة كسر sr.name WGS_1984_UTM_Zone_7N WGS_1984_UTM_Zone_8N WGS_1984_UTM_Zone_9N WGS_1984_UTM_Zone_10N WGS_1984_UTM_Zone_11N WGS_1984_UTM_Zone_12N WGS_1984_UTM_Zone_13N WGS_1984_UTM_Zone_14N >>>

إذا كان هناك حل أكثر إيجازًا ، أود رؤيته.


يحتوي كائن Arcpy SpatialReference على الامتدادloadFromStringالطريقة التي تسمح بتحديث كائن الإسناد المكاني من WKT.

>>> استيراد arcpy >>> sr = arcpy.SpatialReference () >>> utmWkt = 'PROJCS ["GCS North American 1983 UTM Zone 10S (محسوبة)"، 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]]، PROJECTION ["Transverse_Mercator"]، PARAMETER ["False_Easting"، 500000.0] " ، 0.0]، PARAMETER ["Central_Meridian"، - 123.0]، PARAMETER ["Scale_Factor"، 0.9996]، PARAMETER ["Latitude_Of_Origin"، 0.0]، UNIT ["Meter"، 1.0]] '>>> sr.loadFromString (utmWkt ) >>> sr.name u'GCS North American 1983 UTM Zone 10S (محسوبة) '

شاهد الفيديو: مبادئ الخرائط. درس 6. شرائح مسقط مركيتور