Доброго времени суток. Пишу программу - навигатор с векорными картами на основе OSM.
Нашел готовую реализацию проекции меркатора на питоне вот тут.
Вопрос следующий: в каких единицах функции возвращают значения?
К примеру merc_x(59.57) возвращает 6631302.06656, на 5 порядков больше. Что это?
И главное - как перевести эти знаения в километры, с точкой отсчета (0,0) в точке пересечения нулевого мередиана и экватора?
Это не настоящие метры, а “меркаторовские”. С настоящими совпадает только на экваторе, для прочих широт для получения настоящих метров надо длину отрезка домножить на косинус широты (годится для небольших отрезков, для больших будет слишком большая погрешность).
А есть ли возможность преобразовать широту/долготу в плоскую систему координат в километрах?
Т.Е. на входе имеем массив точек в координатах широта/долгота на выходе массив точек в координатах x,y в км.
Спасибо за советы.
Пробовал использовать перевод из сферической системы координат в декартову вот по этой формуле. Прибавлял к широте/долготе некоторые значения чтобы “повернуть глобус” к нужному месту.
Все равно получал искажения (сплюснутость) к полюсам. Не могу понят в чем дело, ведь это не проекция, а перевод из одной системы координат в дргую…
Переход от сферы к плоскости не может не быть проекцией. Разве что в весьма ограниченной области, где кривизной можно принебречь. В формуле по сcылке - x,y - это проекция на плоскость, касающейся глобуса в некой точке.
Кстати, декартовы расстояния (x1,y1,z1) -(x2,y2,z2) - это расстояния по прямой, а не по поверхности сферы)
Да, согласен, я и пытаюсь прорисовать малую область - квадрат 500x500 метров. При этом кордината Z во всех рисуемых точках равна радиусу земли, что сидейтельствует о том, что это - “не проекция”.
И все равно искажения. Отношения X/Y на широте 59 примерно 1.7 / 1