GeoPandas-Beispiele

In den folgenden Beispielen verwenden wir den nybb-Datensatz.

GeoPandas-Plot

  1. Import

[1]:
import geopandas as gpd

from geodatasets import get_path
  1. Daten lesen

[2]:
nybb = get_path("nybb")
[3]:
df = gpd.read_file(nybb)
  1. Anzeigen der ersten Zeilen

[4]:
df.head()
[4]:
BoroCode BoroName Shape_Leng Shape_Area geometry
0 5 Staten Island 330470.010332 1.623820e+09 MULTIPOLYGON (((970217.022 145643.332, 970227....
1 4 Queens 896344.047763 3.045213e+09 MULTIPOLYGON (((1029606.077 156073.814, 102957...
2 3 Brooklyn 741080.523166 1.937479e+09 MULTIPOLYGON (((1021176.479 151374.797, 102100...
3 1 Manhattan 359299.096471 6.364715e+08 MULTIPOLYGON (((981219.056 188655.316, 980940....
4 2 Bronx 464392.991824 1.186925e+09 MULTIPOLYGON (((1012821.806 229228.265, 101278...
  1. Plotten

[5]:
ax = df.plot(figsize=(10, 10), alpha=0.5, edgecolor="k")
../../_images/matplotlib_geopandas_example_11_0.png

figsize gibt die Größe des Plots, alpha die Transparenz und edgecolor die Kantenfarbe an.

Plotten in Folium

Folium oder genauer das mit Folium verwendete leaflet.js verwendet standardmäßig die Werte für Breiten- und Längengrade. Daher müssen wir unsere Werte erst konvertieren:

  1. Koordinaten bestimmen

    Um die Daten mit EPSG-Codes zu verwenden zu können, bietet GeoPandas geopandas.GeoDataFrame.crs (Coordination Reference System; deutsch: Koordinatenreferenzsystem).

[6]:
print(df.crs)
EPSG:2263
[7]:
df = df.to_crs(epsg=4326)
print(df.crs)
df.head()
EPSG:4326
[7]:
BoroCode BoroName Shape_Leng Shape_Area geometry
0 5 Staten Island 330470.010332 1.623820e+09 MULTIPOLYGON (((-74.05051 40.56642, -74.05047 ...
1 4 Queens 896344.047763 3.045213e+09 MULTIPOLYGON (((-73.83668 40.59495, -73.83678 ...
2 3 Brooklyn 741080.523166 1.937479e+09 MULTIPOLYGON (((-73.86706 40.58209, -73.86769 ...
3 1 Manhattan 359299.096471 6.364715e+08 MULTIPOLYGON (((-74.01093 40.68449, -74.01193 ...
4 2 Bronx 464392.991824 1.186925e+09 MULTIPOLYGON (((-73.89681 40.79581, -73.89694 ...
[8]:
import folium
[9]:
m = folium.Map(
    location=[40.70, -73.94], zoom_start=10, tiles="CartoDB positron"
)
for _, r in df.iterrows():
    # without simplifying the representation of each borough, the map might not be displayed
    sim_geo = gpd.GeoSeries(r["geometry"]).simplify(tolerance=0.001)
    geo_j = sim_geo.to_json()
    geo_j = folium.GeoJson(
        data=geo_j,
    )
    folium.Popup(r["BoroName"]).add_to(geo_j)
    geo_j.add_to(m)
m
[9]:
Make this Notebook Trusted to load map: File -> Trust Notebook