Как изменить проекцию crs с помощью Geo pandas in Python? - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь изменить .crs с цилиндрической проекции (WGS84 (широта / долгота)) на проекцию Меркатора. Некоторая информация может быть найдена здесь (https://geopandas.org/projections.html). Однако это не работает для меня в этом шейп-файле Бельгии. (пример на сайте geo pandas для всего мира работал хорошо, поэтому все библиотеки установлены правильно) Кто-то знает, в чем может быть проблема? -> Мой .crs остается цилиндрическим и не изменяется на проекцию Меркатора для этого шейп-файла Бельгии. (набор данных 'БЕЛЬГИЯ__Municipalities.shp' -> https://hub.arcgis.com/datasets/esribeluxdata :: belgium-муниципалитеты-1 )

Пример кода:

import geopandas
import fiona
import matplotlib.pyplot as plt
import pandas as pd

def records(filename, list):
    list = sorted(list)
    with fiona.open(filename) as source: 
        for i, feature in enumerate(sourceô:max(list)+1):
            if i in list:
                yield feature

a = list(range(588))
municipalities = geopandas.GeoDataFrame.from_features(records("BELGIUM__Municipalities.shp",a))

municipalities.crs = "epsg:4326"  #WGS84(lat/lon)-projection
municipalities.plot(facecolor = 'lightgrey', linewidth = 0.05, edgecolor = 'black', alpha = 0.25)

municipalities.to_crs("epsg:3395") #Mercator-projection
municipalities.plot(facecolor = 'lightgrey', linewidth = 0.05, edgecolor = 'black', alpha = 0.25)

plt.show()

РЕДАКТИРОВАТЬ:

import geopandas
import fiona
import matplotlib.pyplot as plt
import pandas as pd

def records(filename, list):
    list = sorted(list)
    with fiona.open(filename) as source: 
        for i, feature in enumerate(sourceô:max(list)+1):
            if i in list:
                yield feature

a = list(range(588))
municipalities = geopandas.GeoDataFrame.from_features(records("BELGIUM__Municipalities.shp",a))

municipalities.crs = "epsg:4326"  #WGS84(lat/lon)-projection
municipalities.plot(facecolor = 'lightgrey', linewidth = 0.05, edgecolor = 'black', alpha = 0.25)

municipalities = municipalities.to_crs("epsg:3395") #Mercator-projection
municipalities.plot(facecolor = 'lightgrey', linewidth = 0.05, edgecolor = 'black', alpha = 0.25)

plt.show()

1 Ответ

2 голосов
/ 13 апреля 2020

GeoDataFrame.to_crs() не перепроектирует на месте, он возвращает новый объект. Вы должны присвоить его обратно municipalities, если хотите использовать свой код следующим образом.

municipalities = municipalities.to_crs("epsg:3395") #Mercator-projection

Кроме того, ваш код построения не будет работать, правильный синтаксис такой:

municipalities.plot(facecolor = 'lightgrey', linewidth = 0.05, edgecolor = 'black', alpha = 0.25)

Обратите внимание на . вместо , в числах.

...