Страница 1 из 1

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

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

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

Добавлено: 20 апр 2017, 17:09
nadiopt
перепроецировать фрейм в DD?

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

Добавлено: 20 апр 2017, 18:20
altruista
Несмотря на то, что в строке состояния координаты показываются градусами, в аддине X и Y все равно в метрах.

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

Добавлено: 21 апр 2017, 09:52
5Nap
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

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

Добавлено: 21 апр 2017, 10:51
altruista
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
А это уже не знаю как исправить. Не поможете? Спасибо!

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

Добавлено: 21 апр 2017, 11:00
5Nap
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