Инструменты Python для географических данных
GeoPandas — это проект по добавлению поддержки географических данных к объектам pandas. В настоящее время он реализует типы GeoSeries
и GeoDataFrame
, которые являются подклассами pandas.Series
и pandas.DataFrame
соответственно. Объекты GeoPandas могут воздействовать на объекты фигурной геометрии и выполнять геометрические операции.
Геометрические операции GeoPandas являются декартовыми. Система отсчета координат (crs) может храниться как атрибут объекта и автоматически задается при загрузке из файла. Объекты можно преобразовать в новые системы координат с помощью метода to_crs()
. В настоящее время не существует обязательного использования одинаковых координат для операций, но это может измениться в будущем.
Документация доступна на сайте geopandas.org (текущая версия) и Read the Docs (релизная версия и версия для разработки).
Проект GeoPandas использует открытую модель управления и финансово спонсируется NumFOCUS. Рассмотрите возможность сделать пожертвование, не облагаемое налогом, чтобы помочь проекту оплатить время разработчиков, профессиональные услуги, поездки, семинары и множество других потребностей.
Подробности смотрите в документации по установке. GeoPandas зависит от следующих пакетов:
pandas
shapely
pyogrio
pyproj
packaging
Кроме того, matplotlib
— это необязательная зависимость, необходимая для построения графиков. Эти пакеты зависят от нескольких библиотек низкого уровня для геопространственного анализа, установка которых может оказаться сложной задачей. Поэтому мы рекомендуем устанавливать GeoPandas с помощью менеджера пакетов conda. Более подробную информацию смотрите в документации по установке.
>>> import geopandas
>>> from shapely.geometry import Polygon
>>> p1 = Polygon([(0, 0), (1, 0), (1, 1)])
>>> p2 = Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])
>>> p3 = Polygon([(2, 0), (3, 0), (3, 1), (2, 1)])
>>> g = geopandas.GeoSeries([p1, p2, p3])
>>> g
0 POLYGON ((0 0, 1 0, 1 1, 0 0))
1 POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))
2 POLYGON ((2 0, 3 0, 3 1, 2 1, 2 0))
dtype: geometry
Некоторые географические операции возвращают обычные объекты pandas. Свойство area
GeoSeries
вернет pandas.Series
, содержащую площадь каждого элемента в GeoSeries
:
>>> print(g.area)
0 0.5
1 1.0
2 1.0
dtype: float64
Другие операции возвращают объекты GeoPandas:
>>> g.buffer(0.5)
0 POLYGON ((-0.3535533905932737 0.35355339059327...
1 POLYGON ((-0.5 0, -0.5 1, -0.4975923633360985 ...
2 POLYGON ((1.5 0, 1.5 1, 1.502407636663901 1.04...
dtype: geometry
Объекты GeoPandas также умеют строить графики. GeoPandas использует matplotlib для построения графиков. Чтобы создать график GeoSeries
, используйте:
>>> g.plot()
GeoPandas также реализует альтернативные конструкторы, которые могут читать любой формат данных, распознаваемый pyogrio. Чтобы прочитать zip-файл, содержащий шейп-файл ESRI с границами районов Нью-Йорка (пример можно получить с помощью пакета geodatasets
):
>>> import geodatasets
>>> nybb_path = geodatasets.get_path('nybb')
>>> boros = geopandas.read_file(nybb_path)
>>> boros.set_index('BoroCode', inplace=True)
>>> boros.sort_index(inplace=True)
>>> boros
BoroName Shape_Leng Shape_Area
BoroCode
1 Manhattan 359299.096471 6.364715e+08
2 Bronx 464392.991824 1.186925e+09
3 Brooklyn 741080.523166 1.937479e+09
4 Queens 896344.047763 3.045213e+09
5 Staten Island 330470.010332 1.623820e+09
geometry
BoroCode
1 MULTIPOLYGON (((981219.0557861328 188655.31579...
2 MULTIPOLYGON (((1012821.805786133 229228.26458...
3 MULTIPOLYGON (((1021176.479003906 151374.79699...
4 MULTIPOLYGON (((1029606.076599121 156073.81420...
5 MULTIPOLYGON (((970217.0223999023 145643.33221...
>>> boros['geometry'].convex_hull
BoroCode
1 POLYGON ((977855.4451904297 188082.3223876953,...
2 POLYGON ((1017949.977600098 225426.8845825195,...
3 POLYGON ((988872.8212280273 146772.0317993164,...
4 POLYGON ((1000721.531799316 136681.776184082, ...
5 POLYGON ((915517.6877458114 120121.8812543372,...
dtype: geometry