Получение координат в формате DD

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
altruista
Интересующийся
Сообщения: 33
Зарегистрирован: 05 дек 2008, 11:50
Репутация: 4

Получение координат в формате DD

Сообщение altruista » 20 апр 2017, 16:19

Здравствуйте!
Простой вопрос, возможно, но не найду ответа. Треубется написать аддин для получения координат карты при клике мыши по карте. Решение есть: How To: Capture map coordinates with a mouse click using Python
Однако, так мы получаем координаты в виде XY (метры), но как получить их в виде DD (градусы) системы координат карты/фрейма данных?
Подскажите, пожалуйста!

Аватара пользователя
nadiopt
Гуру
Сообщения: 4598
Зарегистрирован: 29 янв 2009, 13:27
Статьи: 4
Репутация: 432
Ваше звание: хрюкало
Откуда: Москва-Питер
Контактная информация:

Re: Получение координат в формате DD

Сообщение nadiopt » 20 апр 2017, 17:09

перепроецировать фрейм в DD?
ин гроссен фамилен нихт клювен клац клац

altruista
Интересующийся
Сообщения: 33
Зарегистрирован: 05 дек 2008, 11:50
Репутация: 4

Re: Получение координат в формате DD

Сообщение altruista » 20 апр 2017, 18:20

Несмотря на то, что в строке состояния координаты показываются градусами, в аддине X и Y все равно в метрах.

5Nap
Участник
Сообщения: 60
Зарегистрирован: 21 ноя 2010, 17:36
Репутация: 22

Re: Получение координат в формате DD

Сообщение 5Nap » 21 апр 2017, 09:52

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

altruista
Интересующийся
Сообщения: 33
Зарегистрирован: 05 дек 2008, 11:50
Репутация: 4

Re: Получение координат в формате DD

Сообщение altruista » 21 апр 2017, 10:51

5Nap,
попробовал Ваш код. Сначала ругнулось, что "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
А это уже не знаю как исправить. Не поможете? Спасибо!

5Nap
Участник
Сообщения: 60
Зарегистрирован: 21 ноя 2010, 17:36
Репутация: 22

Re: Получение координат в формате DD

Сообщение 5Nap » 21 апр 2017, 11:00

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
А это уже не знаю как исправить. Не поможете? Спасибо!
напишите просто (*убрать "spatial_reference = ")
cur_pnt = arcpy.PointGeometry(arcpy.Point(x,y), df_sr)
есть такой косяк, увы)

ещё, чтоб не промахнуться с градусной СК, можно написать
any_gcs = df_sr.GCS

Ответить

Вернуться в «ArcGIS»