Большинство других ответов были опубликованы, когда ArcGIS 10.0 была последней версией программного обеспечения. В ArcGIS 10.1 появилось много новых функций ArcPy. Этот ответ использует преимущества этой новой функциональности. Он не подходит для 10.0, но предлагает повышенную производительность и функциональность для 10.1 и более поздних версий.
import arcpy
input_feature_class = 'C:\your_feature_class.shp'
wkid = 4326 # wkid code for wgs84
spatial_reference = arcpy.SpatialReference(wkid)
fields_to_work_with = ['SHAPE@']
with arcpy.da.SearchCursor(input_feature_class,
fields_to_work_with) as s_cur:
for row in s_cur:
point_in_wgs84 = row[0].projectAs(spatial_reference)
print point_in_wgs84.firstPoint.X, point_in_wgs84.firstPoint.Y
Этот фрагмент кода использует wkid для создания объекта пространственной привязки, а не для ввода строкового представления, использует более современные курсоры доступа к данным и проецирует отдельные геометрические объекты с помощью метода projectAs () .
Чтобы развить предложение Джеймса, вот минимальный пример кода с использованием Python / arcpy:
источник
Называете ли вы это проекцией или нет, я вполне уверен, что по определению, когда вы переводите значения координат из одной системы пространственной привязки в другую, вы повторно / не проектируете.
Я не очень знаком с ArcPy, но в arcgisscripting в 9.3 вам придется спроектировать весь класс объектов.
В зависимости от того, насколько сложен алгоритм проекции / преобразования, вы всегда можете свернуть свою собственную проекцию для координат в базовой математике Python. Это позволит вам координировать проекцию значения на уровне объекта.
Если вы были открыты для использования привязок Python OGR, вы можете проецировать на уровне объектов в нечто вроде «поискового курсора».
источник
В ArcPy 10.0 нет возможности проецировать отдельные геометрии. Однако вы можете создать набор объектов (или класс объектов в памяти) и спроецировать его вместо полноценного класса объектов в рабочем пространстве на диске или где-нибудь в базе данных.
источник
Основная причина, по которой я не хочу создавать класс пространственных объектов, заключается в том, что arcpy.CreateFeatureclass_management может работать медленно. Вы также можете использовать arcpy.da.NumPyArrayTofeatureClass, который более или менее мгновенен для классов объектов in_memory:
источник
источник