Эквидистантная сетка на картографической проекции - PullRequest
0 голосов
/ 02 июля 2018

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

m = Basemap(projection='mill',
        llcrnrlat= 40.6968,
        llcrnrlon= -74.0224,
        urcrnrlat= 40.8964, 
        urcrnrlon= -73.8927,
        resolution='h')

Что будет лучшим способом сделать это, мне также нужно хранить значения lat, long для каждой точки вершины сетки.

1 Ответ

0 голосов
/ 02 июля 2018

Из базовой документации :

Для отображения данных на карте их координаты должны быть приведены в карте проекции координат. Вызов экземпляра класса Basemap с аргументами lon, lat преобразует lon / lat (в градусах) в x / y координаты проекции карты (в метрах). Обратное преобразование сделано, если для необязательного ключевого слова inverse задано значение True.

На странице документации также есть пример. Чтобы приспособить этот пример к вашему варианту использования, я преобразовал нижний левый угол в метры, создал регулярную сетку с интервалом 2000 м (200 м было слишком плотно) и преобразовал сетку обратно в координаты lon / lat, которые затем можно используется drawparallels() и drawmeridians.

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

fig, ax = plt.subplots()

lon0 = -74.0224
lat0 = 40.6968

m = Basemap(
    projection='mill',
    llcrnrlat= 40.6968,
    llcrnrlon= -74.0224,
    urcrnrlat= 40.8964, 
    urcrnrlon= -73.8927,
    resolution='h',
    ax = ax,
    )

x0, y0 = m(lon0, lat0)

x = np.arange(20)*2000+x0
y = np.arange(20)*2000+y0

lons, lats = m(x,y,inverse=True)    

m.drawcoastlines()
m.drawcountries()
m.drawstates()
m.drawmeridians(lons)
m.drawparallels(lats)

plt.show()

Результат выглядит так:

result of the above code

Надеюсь, это поможет.

...