Проецирование набора широт / долгот точек, охватывающих несколько зон UTM, в одну сетку - PullRequest
1 голос
/ 18 июня 2019

Я работаю над проектом, в котором Мне нужно переместить множество географических местоположений (определяемых их широтой / долготой) , все они в относительно небольшом регионе (размером с страну, подобную Nederlands, например), в сетку , чтобы запустить некоторые алгоритмы кластеризации и другие вещи на них.

Моя текущая реализация использует модули utm и geopy . В некоторых случаях это работает как очарование (южная Корея приятно центрирована в одной зоне UTM), но не так, как только точки охватывают несколько отдельных зон UTM (как в случае с Нидерландами).

Я думал о неуклюжих / неэлегантных способах сделать это (например, сместить долготу всех точек на пару градусов, чтобы попытаться «перецентрировать» ее, или попытаться «прилепить» зоны друг к другу), но затем я немного искал и понял, что на самом деле существует много система координат и несколько модулей Python (pyproj, basemap, ...), которые имеют с ними дело.
Поэтому я бы не стал изобретать велосипед, если вы понимаете, о чем я, особенно не изобретать квадратный.

Мне не нужна большая точность , отклонение в 5% от реальных расстояний определенно приемлемо для меня. Но то, что мне нужно, - это возможность перенести область земли (с учетом границ по широте и долготе) в единую связную сетку.

Я не думаю, что производительность была бы проблемой, так как у меня самое большее около 1 миллиона очков, и я не спешу (если конвертация займет пару минут, пусть будет так).

Что бы вы мне посоветовали?
Я предпочитаю готовое решение вместо того, чтобы реализовывать конвертер координат, и, поскольку проект написан на Python3, придерживаться языка определенно будет плюсом.

1 Ответ

1 голос
/ 18 июня 2019

Обратите внимание, что решение Google Maps появилось еще в 2005 году, и для решения такого рода ограничений было создано то, что называется Web Mercator , в настоящее время известное как EPSG: 3857 .

Мне не нужна большая точность, для меня определенно допустимо отклонение в 5% от реальных расстояний

В этом случае вы определенно можете использовать Web Mercator,

Возможная реализация в Python:

import math

def merc_x(lon):
  r_major=6378137.000
  return r_major*math.radians(lon)

def merc_y(lat):
  if lat>89.5:lat=89.5
  if lat<-89.5:lat=-89.5
  r_major=6378137.000
  r_minor=6356752.3142
  temp=r_minor/r_major
  eccent=math.sqrt(1-temp**2)
  phi=math.radians(lat)
  sinphi=math.sin(phi)
  con=eccent*sinphi
  com=eccent/2
  con=((1.0-con)/(1.0+con))**com
  ts=math.tan((math.pi/2-phi)/2)/con
  y=0-r_major*math.log(ts)
  return y 

Обратите внимание, что реализация Web Mercator намного проще, чем, например, UTM, поэтому производительность будет намного лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...