Координаты в базовой карте не соответствуют реальным - PullRequest
0 голосов
/ 28 октября 2019

Для моего командного проекта я пытаюсь получить карту моего города, используя Python, и нанести на нее тепловую карту. Я использую Basemap и matplotlib.

Я обнаружил, что выбор epsg = 3003 дает достаточные графические результаты, но проблема в том, что если я хочу визуализировать точную координату на карте, например, lat = 45.0306 и long= 7.42, он показывает другую точку относительно точки, которую я получаю с помощью Google Планета Земля.

Поскольку мне нужно наносить данные с очень точными и близкими координатами, получение точной карты крайне важно.

Может ли кто-нибудь помочь мне с моим кодом?

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np

map = Basemap(llcrnrlat=45,urcrnrlat=45.4,
    llcrnrlon=7.41,urcrnrlon=7.8,resolution='h', epsg=3003)
map.arcgisimage(service='ESRI_StreetMap_World_2D', xpixels = 3000, verbose= True)
plt.show()

1 Ответ

0 голосов
/ 28 октября 2019

Проблема в том, что вы используете две разные проекционные системы. Google Планета Земля использует WGS84, код epsg которого: 3857, но вы настроили свою карту, используя EPSG: 3003. Лучше всего было бы просто изменить проекцию вашей карты, когда вы определяете свою базовую карту. В качестве альтернативы, если вы действительно хотите использовать EPSG: 3003, вам придется перепроецировать координату, полученную из Google Планета Земля (возможно, вы захотите взглянуть на этот ответ )

Здесь небольшойПример, показывающий, что с помощью правильной проекции вы можете точно сопоставить результаты карты Google:

map = Basemap(llcrnrlat=45.245,urcrnrlat=45.255,
      llcrnrlon=7.54,urcrnrlon=7.55,resolution='h', epsg=4326)
map.arcgisimage(service='ESRI_StreetMap_World_2D', xpixels = 3000, verbose= True)
plt.plot(7.544335,45.250423,marker='+',markersize=15,color='Red')

Вот карта из базовой карты со скриншотом карты Google: enter image description here

...