Ответьте немного подробнее, так как это кажется достаточно ясным ...
В вашем коде, генерирующем geo_df
, вы указываете crs
из 'epsg:4326'
, и, основываясь на вашем коде, вы работаете в градусах широт и долгот. Это подтверждается просмотром EPSG 4326 , который определяет границы CRS как [-180, -90, 180, 90].
Я скачал и прочитал в файле, который вы связали. Этот код:
uk_10km = gpd.read_file(r'/Users/brendancox/Downloads/Great_Britain_shapefile/gb_10km.shp')
uk_10km.crs
возвращает
{'init': 'epsg:3035'}
EPSG 3035 указывает, что его единицы измерения указаны в метрах. Границы WGS84 равны [-10.6700, 34.5000, 31.5500, 71.0500], но прогнозируемые границы равны [2426378.0132, 1528101.2618, 6293974.6215, 5446513.5222].
Таким образом, когда вы наносите geo_df
на британский шейп-файл, он выравнивается по ukmap
crs
, помещая его в нижний угол.
Учитывая, что EPSG 4326 предназначен для всего земного шара, а вы ориентируетесь на Великобританию, я бы рекомендовал использовать проекцию для Великобритании. EPSG 3035, похоже, подходит для всей Европы, так что вы, вероятно, можете найти специфическую для Великобритании проекцию, в которую можно конвертировать оба ваших файла формы, используя geopandas.GeoDataFrame.to_crs()
.
Воспроизводимый пример
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
cities = gpd.read_file(gpd.datasets.get_path('naturalearth_cities'))
world.to_crs(epsg='3035', inplace=True)
fig, ax = plt.subplots(figsize=(10,8))
world.plot(ax=ax)
cities.plot(ax=ax, color='red')
plt.show()
![Reproducible example map](https://i.stack.imgur.com/2ob5C.png)
Это показывает, как повторное проецирование встроенной формы world
в EPSG 3035 увеличивает масштаб и заставляет фигуру cities
появляться в небольшом кластере вблизи (0, 0) - в данном случае, на центр карты.