Базовая карта и проект получают разные результаты проецирования - PullRequest
0 голосов
/ 07 ноября 2018

Я изо всех сил пытаюсь понять прогнозы, используя pyproj.

пока мой вопрос - понять результаты проекционных операций

У меня есть следующие координаты, которые я проецирую на x, y:

from mpl_toolkits.basemap import Basemap
import pyproj

lon  = [3.383789, 5.822754]
lat = [48.920575, 53.72185]

# with Basemap
M = Basemap(projection='merc',ellps = 'WGS84')
q1, q2 = M(lon, lat)
for a,b in zip([x for x in q1], [x for x in q2]):
    print(a,b)
# with pyproj
from pyproj import Proj
p = Proj(proj='merc', ellps='WGS84',errcheck = True)
p1 = Proj(proj='latlong', datum='WGS84',errcheck = True)
print(p(3.383789, 48.920575), p(5.822754, 53.72185))
print(p1(3.383789, 48.920575), p1(5.822754, 53.72185))

20414190.011221122 65799915.8523339 20685694.35308374 66653928.94763097 (376681.6684318804, 6229168.979819128) (648186.0102944968, 7083182.075116195) (0,0590582592427664, 0,8538251057188251) (0,10162622883366988, 0,9376231627625158)

почему результаты отличаются, когда я использую одни и те же параметры проекций как новичок в обработке геопространственных данных, заранее прошу прощения за вопрос, который может быть тривиальным

1 Ответ

0 голосов
/ 09 ноября 2018

Для проекции Меркатора Базовая карта использует начало системы координат сетки в нижнем левом углу вычисляемых значений. С вашим кодом значения могут быть вычислены как

M(0, 0, inverse=True)
# output: (-180.0, -89.98999999999992)

Если вы вычисляете координаты проекции для (long = 0, lat = 0) и присваиваете значения (x0, y0). Вы получаете сдвиги в координатах (x0, y0), которые отличают его проекционные координаты от стандартных значений (0,0 в центре карты).

lon0, lat0 = 0, 0
x0, y0 = M(lon0, lat0)
# x0=20015077.371242613, y0=59546805.8807

Для контрольной точки при (long = 3.383789, lat = 48.920575),

lon1 = 3.383789
lat1 = 48.920575
x1, y1 = M(lon1, lat1)

с примененными сдвигами координат, результат

print(x1-x0, y1-y0)
# output: (376259.9924608879, 6254386.049398325)

при сравнении со значениями pyproj

p0 = Proj(proj='merc', ellps='WGS84', errcheck = True)
print(p0(lon1, lat1))
# output (376681.6684318804, 6229168.979819128)

они вполне согласны, но не близки. При построении карт небольшого масштаба вы не можете видеть расхождения на картах.

...