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

выбор СК для слоя

Добавлено: 27 мар 2017, 22:14
lololol
Здравствуте, никак не могу разобраться
У меня есть векторный слой в Qgis с СК, где координаты записаны в формате
(32.08632477662723, 54.78251431736967)
Я использую этот слой в программе на python, карта с этим слоем отображается в окне формочки.
Создал обработчик нажатия мыши на карту и получаю координаты точки мыши в формате (3.5718e 06, 7.31896e 06)
p1 = canvas.getCoordinateTransform().toMapCoordinates(x, y)
Вопрос, как их превести к одному формату? то есть либо в каком формате СК надо сохранить слой, либо как их можно пересчитать координаты?
Мне надо определять, есть объект в рядом с точкой на карте или нет.
Буду признателен за помощь)

Re: выбор СК для слоя

Добавлено: 28 мар 2017, 09:13
Аминодов-Борисов
К сожалению, пока так и не взялся за изучение связки Python + QGIS, но кое-какие соображения имеются.
Координаты точки мышки — явно прямоугольные. Метры.
Координаты точки в вашем слое — уже геодезические. Градусы и доли градуса.
Осталось только определить закономерность между этими координатами. Попробуйте, пожалуйста, получить координаты одной и той же точки в обоих форматах. Сперва узнать координаты точки в слое, а потом щёлкнуть по ней мышкой и получить координаты от обработчика.

Re: выбор СК для слоя

Добавлено: 29 мар 2017, 16:17
lololol
Алексей Борисов писал(а):К сожалению, пока так и не взялся за изучение связки Python + QGIS, но кое-какие соображения имеются.
Координаты точки мышки — явно прямоугольные. Метры.
Координаты точки в вашем слое — уже геодезические. Градусы и доли градуса.
Осталось только определить закономерность между этими координатами. Попробуйте, пожалуйста, получить координаты одной и той же точки в обоих форматах. Сперва узнать координаты точки в слое, а потом щёлкнуть по ней мышкой и получить координаты от обработчика.
как мне кажется, тут либо нужна функция, которая переводит координаты в один формат, либо сохранить слой в нужном формате. Тем более я как то создавал другой слой и на нем работало. Того не сохранилось. Может можно в проекте задать нужную СК?
вот например координаты объекта:
(3,57208e 06, 7.32009e 06) - координаты мыши
(32,08632477662723, 54.78251431736967) - объект слоя

Re: выбор СК для слоя

Добавлено: 29 мар 2017, 17:28
Аминодов-Борисов
Как мне показалось, программа выдаёт координаты мышки в системе Web Mercator.
Написал функцию, конвертирующую геодезические координаты в координаты Web Mercator. Стоит заметить, что ваши координаты предоставлены в формате (Долгота, Широта).

Код: Выделить всё

import numpy

def convert_coords(lat, lon):
    a = 6378137.0
    alpha = 1.0/298.257223563
    e2 = 2*alpha - alpha**2
    logg = numpy.tan((numpy.pi/4) + (numpy.radians(lat)/2.0))
    x = a*numpy.radians(lon)
    y = a*numpy.log(logg)
    return [x, y]

lat = 54.78251431736967
lon = 32.08632477662723
print convert_coords(lat, lon)
Функция вернула следующее: [3571833.3355617407, 7319770.4736439213]. Как раз то, что нужно.

Re: выбор СК для слоя

Добавлено: 29 мар 2017, 17:48
Аминодов-Борисов
В общем, вы можете либо воспользоваться моей функцией для пересчёта координат, либо пересохранить ваши данные в Web-Mercator.
Формулы для пересчёта я брал вот тут: https://habrahabr.ru/post/239251/, при желании можно сделать из них обратные формулы.

Re: выбор СК для слоя

Добавлено: 01 апр 2017, 14:21
lololol
Благодарю))) помогли сильно))