Добавление базовой карты на участок geo pandas - PullRequest
1 голос
/ 18 июня 2020

У меня есть файл geo json, который состоит из города Нью-Йорка, покрытого шестиугольными многоугольниками, который я считываю во фрейм данных geo pandas. Я использую sh, чтобы добавить базовую карту Stamen TonerLite к графику фрейма данных. Однако я не могу воспроизвести те же результаты, что и рабочий пример здесь - https://geopandas.org/gallery/plotting_basemap_background.html

Ниже я привожу небольшой пример кода и crs связанного фрейма данных:

%matplotlib inline

import matplotlib
import matplotlib.pyplot as plt
import geopandas as gpd
import contextily as ctx

fp = "/data/hex_bins/nyc_hex_bins.geojson"
map_df = gpd.read_file(fp)
map_df = map_df.to_crs(epsg=3857)

ax = map_df.plot(figsize=(10, 10), alpha=0.5, edgecolor='k')
ctx.add_basemap(ax, zoom=12, source=ctx.providers.Stamen.TonerLite)
ax.set_axis_off()

Я получаю пустой фон без фона карты, а только шестиугольники в форме NY C.

crs фрейма данных, который я рисую, это

<Projected CRS: EPSG:3857>
Name: WGS 84 / Pseudo-Mercator
Axis Info [cartesian]:
- X[east]: Easting (metre)
- Y[north]: Northing (metre)
Area of Use:
- name: World - 85°S to 85°N
- bounds: (-180.0, -85.06, 180.0, 85.06)
Coordinate Operation:
- name: Popular Visualisation Pseudo-Mercator
- method: Popular Visualisation Pseudo Mercator
Datum: World Geodetic System 1984
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich

crs точно такой же, как и тот, который я получил из примера из приведенной выше ссылки (этот пример работает для меня.)

Как понять, в чем проблема? Я использовал этот файл geo json для многих графиков на протяжении многих лет, используя folium или ipyleaflet, и не подозреваю, что с ним что-то не так. Но вот ссылка на файл - https://drive.google.com/file/d/1HO854_YFTtRaL4e-nPrL43woYou-IY-a/view?usp=sharing

1 Ответ

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

Ваш файл поврежден. Geo JSON загружен с CRS 3857, а сама геометрия - с 4326. Просто назначьте правильный CRS перед перепроецированием в Web Mercator.

map_df = gpd.read_file(fp)
map_df.crs = 4326  # this line
map_df = map_df.to_crs(epsg=3857)

ax = map_df.plot(figsize=(10, 10), alpha=0.5, edgecolor='k')
ctx.add_basemap(ax, zoom=12, source=ctx.providers.Stamen.TonerLite)
ax.set_axis_off()

Обратите внимание, что ваши шестиугольники не были сгенерированы в правильном спроектированный CRS, поэтому они перекошены.

result

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