Получение координат в формате DD
-
- Интересующийся
- Сообщения: 33
- Зарегистрирован: 05 дек 2008, 11:50
- Репутация: 4
Получение координат в формате DD
Здравствуйте!
Простой вопрос, возможно, но не найду ответа. Треубется написать аддин для получения координат карты при клике мыши по карте. Решение есть: How To: Capture map coordinates with a mouse click using Python
Однако, так мы получаем координаты в виде XY (метры), но как получить их в виде DD (градусы) системы координат карты/фрейма данных?
Подскажите, пожалуйста!
Простой вопрос, возможно, но не найду ответа. Треубется написать аддин для получения координат карты при клике мыши по карте. Решение есть: How To: Capture map coordinates with a mouse click using Python
Однако, так мы получаем координаты в виде XY (метры), но как получить их в виде DD (градусы) системы координат карты/фрейма данных?
Подскажите, пожалуйста!
- nadiopt
- Гуру
- Сообщения: 4744
- Зарегистрирован: 29 янв 2009, 13:27
- Репутация: 495
- Ваше звание: хрюкало
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Получение координат в формате DD
перепроецировать фрейм в DD?
ин гроссен фамилен нихт клювен клац клац
-
- Интересующийся
- Сообщения: 33
- Зарегистрирован: 05 дек 2008, 11:50
- Репутация: 4
Re: Получение координат в формате DD
Несмотря на то, что в строке состояния координаты показываются градусами, в аддине X и Y все равно в метрах.
-
- Участник
- Сообщения: 85
- Зарегистрирован: 21 ноя 2010, 17:36
- Репутация: 31
Re: Получение координат в формате DD
Не важно, что показывается в строке состояния, важно, какая СК задана у фрейма.altruista писал(а):Несмотря на то, что в строке состояния координаты показываются градусами, в аддине X и Y все равно в метрах.
Если СК спроецированная, то вам нужно взять точку с координатами x,y и spatial_reference как у фрейма, а дальше перепроецировать её и считать новые координаты
Код: Выделить всё
def onMouseDownMap(self, x, y, button, shift):
df_sr = dataFrame.spatialReference
any_gcs = arcpy.SpatialReference(4326) # WGS84
cur_pnt = arcpy.PointGeometry(arcpy.Point(x,y), spatial_reference = df_sr)
deg_pnt = cur_pnt.projectAs(any_gcs).centroid # вернёт объект arcpy.Point, а не PointGeometry
deg_x = deg_pnt.X
deg_y = deg_pnt.Y
-
- Интересующийся
- Сообщения: 33
- Зарегистрирован: 05 дек 2008, 11:50
- Репутация: 4
Re: Получение координат в формате DD
5Nap,
попробовал Ваш код. Сначала ругнулось, что "NameError: global name 'dataFrame' is not defined"
Добавил в код это:
Но теперь получаю другую ошибку:
А это уже не знаю как исправить. Не поможете? Спасибо!
попробовал Ваш код. Сначала ругнулось, что "NameError: global name 'dataFrame' is not defined"
Добавил в код это:
Код: Выделить всё
mxd = arcpy.mapping.MapDocument('CURRENT')
df = arcpy.mapping.ListDataFrames(mxd)[0]
df_sr = df.spatialReference
Код: Выделить всё
cur_pnt = arcpy.PointGeometry(arcpy.Point(x,y), spatial_reference = df_sr)
File "c:\program files (x86)\arcgis\desktop10.4\arcpy\arcpy\arcobjects\mixins.py", line 224, in __init__
setattr(self._arc_object, attr, value)
AttributeError: DescribeGeometry: Read-only attribute spatial_reference
-
- Участник
- Сообщения: 85
- Зарегистрирован: 21 ноя 2010, 17:36
- Репутация: 31
Re: Получение координат в формате DD
напишите просто (*убрать "spatial_reference = ")altruista писал(а): Но теперь получаю другую ошибку:А это уже не знаю как исправить. Не поможете? Спасибо!Код: Выделить всё
cur_pnt = arcpy.PointGeometry(arcpy.Point(x,y), spatial_reference = df_sr) File "c:\program files (x86)\arcgis\desktop10.4\arcpy\arcpy\arcobjects\mixins.py", line 224, in __init__ setattr(self._arc_object, attr, value) AttributeError: DescribeGeometry: Read-only attribute spatial_reference
cur_pnt = arcpy.PointGeometry(arcpy.Point(x,y), df_sr)
есть такой косяк, увы)
ещё, чтоб не промахнуться с градусной СК, можно написать
any_gcs = df_sr.GCS
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей