Как перекрыть фрейм данных geopandas базовой картой?

У меня есть шейп-файл, который я читаю как фрейм данных geopandas.

import geopandas as gpd
gdf = gpd.read_file('myfile.shp')
gdf.plot()

где gdf.crs

<Projected CRS: ESRI:54009>
Name: World_Mollweide
Axis Info [cartesian]:
- E[east]: Easting (metre)
- N[north]: Northing (metre)
Area of Use:
- name: World.
- bounds: (-180.0, -90.0, 180.0, 90.0)
Coordinate Operation:
- name: World_Mollweide
- method: Mollweide
Datum: World Geodetic System 1984
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich

и gdf.total_bounds

array([-17561329.90352868,  -6732161.66088735,  17840887.22672861,
         8750122.26961274])

Я хотел бы использовать basemap, чтобы построить поверх нее сетку широты и долготы. Это то, что я делаю

from mpl_toolkits.basemap import Basemap
# Create a Basemap instance with the same projection as the GeoDataFrame
map = Basemap(projection='moll', lon_0=-0, lat_0=-0, resolution='c')


# Create a figure and axis
fig, ax = plt.subplots(figsize=(10, 6))
# Plot the basemap
map.drawcoastlines()
map.drawcountries()
map.drawparallels(range(-90, 91, 30), labels=[1,0,0,0], fontsize=10)
map.drawmeridians(range(-180, 181, 60), labels=[0,0,0,1], fontsize=10)
# Plot the GeoDataFrame on top of the basemap
gdf.plot(ax=ax, color='red', markersize=5)

но это то, что я получаю

похоже на проблему с проекцией

André de Mattos Ferraz 17.04.2024 14:27
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
1
128
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это связано с тем, что параметры проекции Моллвейде (т. е. строка proj ), используемая базовой картой , отличаются от параметров вашего GeoDataFrame (то есть ESRI:54009):

>>> gdf.crs.srs
'esri:54009'

>>> map.srs
'+proj=moll +R=6370997.0 +units=m +lat_0=0.0 +lon_0=0.0 +x_0=18019900...'

Простым решением было бы вызвать to_crs (с srs базовой карты) перед созданием графика :

gdf.plot(ax=ax, color='red', markersize=5)

gdf.to_crs(map.srs).plot(ax=ax, color='red')

СН: Использование map в качестве имени переменной не рекомендуется, поскольку она встроена.

Другие вопросы по теме