Prostorové operace v GeoPandas¶
Podívejme se na chráněné krajinné oblasti v Česku.
Budeme pracovat s otevřenými daty Data250 z ČÚZK)/Default.aspx?mode=TextMeta&side=mapy_data250&metadataID=CZ-CUZK-DATA250-V&head_tab=sekce-02-gp&menu=22910).
import geopandas as gpd
chko = gpd.read_file("ParkA.shp")
Podívejme se na informace o datech a na data samotná.
chko.crs
<Projected CRS: EPSG:5514> Name: S-JTSK / Krovak East North Axis Info [cartesian]: - X[east]: Easting (metre) - Y[north]: Northing (metre) Area of Use: - name: Czechia; Slovakia. - bounds: (12.09, 47.73, 22.56, 51.06) Coordinate Operation: - name: Krovak East North (Greenwich) - method: Krovak (North Orientated) Datum: System of the Unified Trigonometrical Cadastral Network - Ellipsoid: Bessel 1841 - Prime Meridian: Greenwich
chko.head(10)
FCSUBTYPE | F_CODE | ICC | NAMN1 | NA3 | NAMN2 | NLN1 | NLN2 | SHAPE_Leng | SHAPE_Area | SND | ANND | geometry | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2 | FA081 | CZ | Broumovsko | CAT V | UNK | cze | UNK | 111219.544184 | 4.322066e+08 | 5220000 | 7120200 | POLYGON ((-615978.682 -994555.085, -615911.986... |
1 | 2 | FA081 | CZ | Krkonošský národní park | CAT V | UNK | cze | UNK | 232089.726966 | 3.635709e+08 | 5220000 | 7120100 | POLYGON ((-658647.890 -974380.800, -658489.293... |
2 | 2 | FA081 | CZ | Šumava | CAT V | UNK | cze | UNK | 270558.358423 | 7.798763e+08 | 5220000 | 7120200 | POLYGON ((-830609.000 -1131423.000, -830377.17... |
3 | 2 | FA081 | CZ | Labské pískovce | CAT V | UNK | cze | UNK | 118644.238375 | 2.117074e+08 | 5220000 | 7120200 | POLYGON ((-743441.203 -964003.613, -743685.943... |
4 | 1 | FA080 | CZ | Podyjí | CAT II | Nationalpark Thayatal | cze | ger | 91087.186742 | 6.290955e+07 | 5220000 | 7120100 | POLYGON ((-656724.478 -1186419.132, -656719.97... |
5 | 1 | FA080 | CZ | České Švýcarsko | CAT II | UNK | cze | UNK | 86984.825493 | 7.929017e+07 | 5220000 | 7120100 | POLYGON ((-731155.429 -948303.529, -731078.389... |
6 | 2 | FA081 | CZ | Litovelské Pomoraví | CAT V | UNK | cze | UNK | 92265.320185 | 9.341963e+07 | 5220000 | 7120200 | POLYGON ((-565060.820 -1098311.049, -565127.18... |
7 | 2 | FA081 | CZ | Lužické hory | CAT V | UNK | cze | UNK | 101099.973960 | 2.701039e+08 | 5220000 | 7120200 | POLYGON ((-725187.700 -952220.884, -725063.805... |
8 | 2 | FA081 | CZ | Jeseníky | CAT V | UNK | cze | UNK | 158223.761975 | 7.413212e+08 | 5220000 | 7120200 | POLYGON ((-533661.262 -1043992.184, -533522.93... |
9 | 2 | FA081 | CZ | Pálava | CAT V | UNK | cze | UNK | 46540.392623 | 8.563956e+07 | 5220000 | 7120200 | POLYGON ((-604169.176 -1206220.629, -603841.60... |
chko.describe()
FCSUBTYPE | SHAPE_Leng | SHAPE_Area | SND | ANND | |
---|---|---|---|---|---|
count | 38.000000 | 38.000000 | 3.800000e+01 | 38.0 | 3.800000e+01 |
mean | 1.921053 | 114782.125816 | 3.308689e+08 | 5220000.0 | 7.120189e+06 |
std | 0.273276 | 66910.722711 | 3.107750e+08 | 0.0 | 3.110117e+01 |
min | 1.000000 | 2918.156777 | 2.924004e+05 | 5220000.0 | 7.120100e+06 |
25% | 2.000000 | 81325.480132 | 8.758458e+07 | 5220000.0 | 7.120200e+06 |
50% | 2.000000 | 104258.214662 | 2.267546e+08 | 5220000.0 | 7.120200e+06 |
75% | 2.000000 | 138095.101720 | 5.657614e+08 | 5220000.0 | 7.120200e+06 |
max | 2.000000 | 270558.358423 | 1.203346e+09 | 5220000.0 | 7.120200e+06 |
chko.plot()
<AxesSubplot:>
Spočítejme rozlohu jednotlivých krajů¶
Vytvořme sloupec pro rozlohu v S-JTSK
chko['area_5514'] = chko.geometry.area / 10000
# chko['area_5514'] = chko['geometry'].area / 10000
chko.head(10)
FCSUBTYPE | F_CODE | ICC | NAMN1 | NA3 | NAMN2 | NLN1 | NLN2 | SHAPE_Leng | SHAPE_Area | SND | ANND | geometry | area_5514 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2 | FA081 | CZ | Broumovsko | CAT V | UNK | cze | UNK | 111219.544184 | 4.322066e+08 | 5220000 | 7120200 | POLYGON ((-615978.682 -994555.085, -615911.986... | 43220.659681 |
1 | 2 | FA081 | CZ | Krkonošský národní park | CAT V | UNK | cze | UNK | 232089.726966 | 3.635709e+08 | 5220000 | 7120100 | POLYGON ((-658647.890 -974380.800, -658489.293... | 36357.093598 |
2 | 2 | FA081 | CZ | Šumava | CAT V | UNK | cze | UNK | 270558.358423 | 7.798763e+08 | 5220000 | 7120200 | POLYGON ((-830609.000 -1131423.000, -830377.17... | 77987.633810 |
3 | 2 | FA081 | CZ | Labské pískovce | CAT V | UNK | cze | UNK | 118644.238375 | 2.117074e+08 | 5220000 | 7120200 | POLYGON ((-743441.203 -964003.613, -743685.943... | 21170.739642 |
4 | 1 | FA080 | CZ | Podyjí | CAT II | Nationalpark Thayatal | cze | ger | 91087.186742 | 6.290955e+07 | 5220000 | 7120100 | POLYGON ((-656724.478 -1186419.132, -656719.97... | 6290.955403 |
5 | 1 | FA080 | CZ | České Švýcarsko | CAT II | UNK | cze | UNK | 86984.825493 | 7.929017e+07 | 5220000 | 7120100 | POLYGON ((-731155.429 -948303.529, -731078.389... | 7929.016945 |
6 | 2 | FA081 | CZ | Litovelské Pomoraví | CAT V | UNK | cze | UNK | 92265.320185 | 9.341963e+07 | 5220000 | 7120200 | POLYGON ((-565060.820 -1098311.049, -565127.18... | 9341.963420 |
7 | 2 | FA081 | CZ | Lužické hory | CAT V | UNK | cze | UNK | 101099.973960 | 2.701039e+08 | 5220000 | 7120200 | POLYGON ((-725187.700 -952220.884, -725063.805... | 27010.388257 |
8 | 2 | FA081 | CZ | Jeseníky | CAT V | UNK | cze | UNK | 158223.761975 | 7.413212e+08 | 5220000 | 7120200 | POLYGON ((-533661.262 -1043992.184, -533522.93... | 74132.120958 |
9 | 2 | FA081 | CZ | Pálava | CAT V | UNK | cze | UNK | 46540.392623 | 8.563956e+07 | 5220000 | 7120200 | POLYGON ((-604169.176 -1206220.629, -603841.60... | 8563.955581 |
Vytvořme sloupec pro rozlohu v WGS84
chko_4326 = chko.to_crs(epsg=4326)
chko['area_4326'] = chko_4326['geometry'].area / 10000
chko.head()
/tmp/ipykernel_90008/791893645.py:1: UserWarning: Geometry is in a geographic CRS. Results from 'area' are likely incorrect. Use 'GeoSeries.to_crs()' to re-project geometries to a projected CRS before this operation. chko['area_4326'] = chko_4326['geometry'].area / 10000
FCSUBTYPE | F_CODE | ICC | NAMN1 | NA3 | NAMN2 | NLN1 | NLN2 | SHAPE_Leng | SHAPE_Area | SND | ANND | geometry | area_5514 | area_4326 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2 | FA081 | CZ | Broumovsko | CAT V | UNK | cze | UNK | 111219.544184 | 4.322066e+08 | 5220000 | 7120200 | POLYGON ((-615978.682 -994555.085, -615911.986... | 43220.659681 | 5.483613e-06 |
1 | 2 | FA081 | CZ | Krkonošský národní park | CAT V | UNK | cze | UNK | 232089.726966 | 3.635709e+08 | 5220000 | 7120100 | POLYGON ((-658647.890 -974380.800, -658489.293... | 36357.093598 | 4.625936e-06 |
2 | 2 | FA081 | CZ | Šumava | CAT V | UNK | cze | UNK | 270558.358423 | 7.798763e+08 | 5220000 | 7120200 | POLYGON ((-830609.000 -1131423.000, -830377.17... | 77987.633810 | 9.561313e-06 |
3 | 2 | FA081 | CZ | Labské pískovce | CAT V | UNK | cze | UNK | 118644.238375 | 2.117074e+08 | 5220000 | 7120200 | POLYGON ((-743441.203 -964003.613, -743685.943... | 21170.739642 | 2.700361e-06 |
4 | 1 | FA080 | CZ | Podyjí | CAT II | Nationalpark Thayatal | cze | ger | 91087.186742 | 6.290955e+07 | 5220000 | 7120100 | POLYGON ((-656724.478 -1186419.132, -656719.97... | 6290.955403 | 7.709437e-07 |
O1: Proč se rozlohy v různých souřadnicových systémech tak liší?
O2: Vytvořte sloupec pro rozlohu v UTM-32N
chko_23032 = chko.to_crs(epsg=23032)
chko['area_23032'] = chko_23032['geometry'].area / 10000
chko.head()
FCSUBTYPE | F_CODE | ICC | NAMN1 | NA3 | NAMN2 | NLN1 | NLN2 | SHAPE_Leng | SHAPE_Area | SND | ANND | geometry | area_5514 | area_4326 | area_23032 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2 | FA081 | CZ | Broumovsko | CAT V | UNK | cze | UNK | 111219.544184 | 4.322066e+08 | 5220000 | 7120200 | POLYGON ((-615978.682 -994555.085, -615911.986... | 43220.659681 | 5.483613e-06 | 43470.952420 |
1 | 2 | FA081 | CZ | Krkonošský národní park | CAT V | UNK | cze | UNK | 232089.726966 | 3.635709e+08 | 5220000 | 7120100 | POLYGON ((-658647.890 -974380.800, -658489.293... | 36357.093598 | 4.625936e-06 | 36530.758987 |
2 | 2 | FA081 | CZ | Šumava | CAT V | UNK | cze | UNK | 270558.358423 | 7.798763e+08 | 5220000 | 7120200 | POLYGON ((-830609.000 -1131423.000, -830377.17... | 77987.633810 | 9.561313e-06 | 78186.847494 |
3 | 2 | FA081 | CZ | Labské pískovce | CAT V | UNK | cze | UNK | 118644.238375 | 2.117074e+08 | 5220000 | 7120200 | POLYGON ((-743441.203 -964003.613, -743685.943... | 21170.739642 | 2.700361e-06 | 21231.693903 |
4 | 1 | FA080 | CZ | Podyjí | CAT II | Nationalpark Thayatal | cze | ger | 91087.186742 | 6.290955e+07 | 5220000 | 7120100 | POLYGON ((-656724.478 -1186419.132, -656719.97... | 6290.955403 | 7.709437e-07 | 6328.494965 |
O3: Vytvořte sloupec udávající o kolik procent se rozloha každého z CHKO liší v EPSG:5514 a EPSG:23032
chko['area_diff'] = (chko['area_5514'] - chko['area_23032']) /chko['area_23032'] * 100
# chko.tail(10)
chko.describe()
FCSUBTYPE | SHAPE_Leng | SHAPE_Area | SND | ANND | area_5514 | area_4326 | area_23032 | area_diff | |
---|---|---|---|---|---|---|---|---|---|
count | 38.000000 | 38.000000 | 3.800000e+01 | 38.0 | 3.800000e+01 | 38.000000 | 3.800000e+01 | 38.000000 | 38.000000 |
mean | 1.921053 | 114782.125816 | 3.308689e+08 | 5220000.0 | 7.120189e+06 | 33086.890701 | 4.133182e-06 | 33249.442276 | -0.448053 |
std | 0.273276 | 66910.722711 | 3.107750e+08 | 0.0 | 3.110117e+01 | 31077.504812 | 3.870716e-06 | 31273.135645 | 0.245728 |
min | 1.000000 | 2918.156777 | 2.924004e+05 | 5220000.0 | 7.120100e+06 | 29.240043 | 3.733486e-09 | 29.331008 | -1.076526 |
25% | 2.000000 | 81325.480132 | 8.758458e+07 | 5220000.0 | 7.120200e+06 | 8758.457541 | 1.077923e-06 | 8825.144096 | -0.588830 |
50% | 2.000000 | 104258.214662 | 2.267546e+08 | 5220000.0 | 7.120200e+06 | 22675.463407 | 2.824034e-06 | 22784.252299 | -0.378643 |
75% | 2.000000 | 138095.101720 | 5.657614e+08 | 5220000.0 | 7.120200e+06 | 56576.142076 | 7.119663e-06 | 56705.360517 | -0.290023 |
max | 2.000000 | 270558.358423 | 1.203346e+09 | 5220000.0 | 7.120200e+06 | 120334.581481 | 1.492225e-05 | 121644.111392 | -0.113484 |
Délka, obvod¶
chko['perimeter'] = chko['geometry'].length
chko.tail()
FCSUBTYPE | F_CODE | ICC | NAMN1 | NA3 | NAMN2 | NLN1 | NLN2 | SHAPE_Leng | SHAPE_Area | SND | ANND | geometry | area_5514 | area_4326 | area_23032 | area_diff | perimeter | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
33 | 2 | FA081 | CZ | Kokořínsko-Máchův kraj | CAT V | UNK | cze | UNK | 107416.455364 | 2.745840e+08 | 5220000 | 7120200 | POLYGON ((-735048.286 -983123.143, -734931.553... | 27458.395736 | 0.000003 | 27552.044180 | -0.339897 | 107416.455364 |
34 | 2 | FA081 | CZ | Žďárské vrchy | CAT V | UNK | cze | UNK | 133006.101708 | 7.090082e+08 | 5220000 | 7120200 | POLYGON ((-645336.001 -1091107.000, -645187.46... | 70900.824077 | 0.000009 | 71324.975550 | -0.594675 | 133006.101708 |
35 | 2 | FA081 | CZ | Kokořínsko-Máchův kraj | CAT V | UNK | cze | UNK | 83059.715481 | 1.361833e+08 | 5220000 | 7120200 | POLYGON ((-719344.476 -982219.594, -719380.221... | 13618.326121 | 0.000002 | 13666.746238 | -0.354291 | 83059.715481 |
36 | 2 | FA081 | CZ | Brdy | CAT V | UNK | cze | UNK | 180326.987644 | 3.449984e+08 | 5220000 | 7120200 | POLYGON ((-794344.235 -1075225.561, -794192.86... | 34499.843006 | 0.000004 | 34590.963444 | -0.263423 | 180326.987644 |
37 | 2 | FA081 | CZ | Slavkovský les | CAT V | UNK | cze | UNK | 149619.964072 | 6.102797e+08 | 5220000 | 7120200 | POLYGON ((-853285.324 -1012924.861, -853142.67... | 61027.969541 | 0.000008 | 61116.829883 | -0.145394 | 149619.964072 |
Pojďme spočítat minimální obvod polygonu se stejným obsahem.
Takovým tvarem bude kruh. Využijeme fakt, že obsah kruhu $S = \pi r^2$. Z toho nám vyjde, že poloměr kružnice $r = \sqrt{\frac{S}{\pi} }$. Uvědomíme-li si, že obvod kružnice $o = 2\pi r$, máme vše, co potřebujeme.
import math
chko['min_perimeter'] = 2 * math.pi * ((chko['geometry'].area / math.pi) ** 0.5)
chko.head()
FCSUBTYPE | F_CODE | ICC | NAMN1 | NA3 | NAMN2 | NLN1 | NLN2 | SHAPE_Leng | SHAPE_Area | SND | ANND | geometry | area_5514 | area_4326 | area_23032 | area_diff | perimeter | min_perimeter | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2 | FA081 | CZ | Broumovsko | CAT V | UNK | cze | UNK | 111219.544184 | 4.322066e+08 | 5220000 | 7120200 | POLYGON ((-615978.682 -994555.085, -615911.986... | 43220.659681 | 5.483613e-06 | 43470.952420 | -0.575770 | 111219.544184 | 73697.138869 |
1 | 2 | FA081 | CZ | Krkonošský národní park | CAT V | UNK | cze | UNK | 232089.726966 | 3.635709e+08 | 5220000 | 7120100 | POLYGON ((-658647.890 -974380.800, -658489.293... | 36357.093598 | 4.625936e-06 | 36530.758987 | -0.475395 | 232089.726966 | 67592.655859 |
2 | 2 | FA081 | CZ | Šumava | CAT V | UNK | cze | UNK | 270558.358423 | 7.798763e+08 | 5220000 | 7120200 | POLYGON ((-830609.000 -1131423.000, -830377.17... | 77987.633810 | 9.561313e-06 | 78186.847494 | -0.254792 | 270558.358423 | 98996.035769 |
3 | 2 | FA081 | CZ | Labské pískovce | CAT V | UNK | cze | UNK | 118644.238375 | 2.117074e+08 | 5220000 | 7120200 | POLYGON ((-743441.203 -964003.613, -743685.943... | 21170.739642 | 2.700361e-06 | 21231.693903 | -0.287091 | 118644.238375 | 51579.003530 |
4 | 1 | FA080 | CZ | Podyjí | CAT II | Nationalpark Thayatal | cze | ger | 91087.186742 | 6.290955e+07 | 5220000 | 7120100 | POLYGON ((-656724.478 -1186419.132, -656719.97... | 6290.955403 | 7.709437e-07 | 6328.494965 | -0.593183 | 91087.186742 | 28116.628018 |
O4: Jaký je poměr současného obvodu polygonu a jeho nejmenšího možného obvodu se zachováním stejného obsah?
chko["perimeter_ratio"] = chko['perimeter'] / chko['min_perimeter']
chko.head()
FCSUBTYPE | F_CODE | ICC | NAMN1 | NA3 | NAMN2 | NLN1 | NLN2 | SHAPE_Leng | SHAPE_Area | SND | ANND | geometry | area_5514 | area_4326 | area_23032 | area_diff | perimeter | min_perimeter | perimeter_ratio | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2 | FA081 | CZ | Broumovsko | CAT V | UNK | cze | UNK | 111219.544184 | 4.322066e+08 | 5220000 | 7120200 | POLYGON ((-615978.682 -994555.085, -615911.986... | 43220.659681 | 5.483613e-06 | 43470.952420 | -0.575770 | 111219.544184 | 73697.138869 | 1.509143 |
1 | 2 | FA081 | CZ | Krkonošský národní park | CAT V | UNK | cze | UNK | 232089.726966 | 3.635709e+08 | 5220000 | 7120100 | POLYGON ((-658647.890 -974380.800, -658489.293... | 36357.093598 | 4.625936e-06 | 36530.758987 | -0.475395 | 232089.726966 | 67592.655859 | 3.433653 |
2 | 2 | FA081 | CZ | Šumava | CAT V | UNK | cze | UNK | 270558.358423 | 7.798763e+08 | 5220000 | 7120200 | POLYGON ((-830609.000 -1131423.000, -830377.17... | 77987.633810 | 9.561313e-06 | 78186.847494 | -0.254792 | 270558.358423 | 98996.035769 | 2.733022 |
3 | 2 | FA081 | CZ | Labské pískovce | CAT V | UNK | cze | UNK | 118644.238375 | 2.117074e+08 | 5220000 | 7120200 | POLYGON ((-743441.203 -964003.613, -743685.943... | 21170.739642 | 2.700361e-06 | 21231.693903 | -0.287091 | 118644.238375 | 51579.003530 | 2.300243 |
4 | 1 | FA080 | CZ | Podyjí | CAT II | Nationalpark Thayatal | cze | ger | 91087.186742 | 6.290955e+07 | 5220000 | 7120100 | POLYGON ((-656724.478 -1186419.132, -656719.97... | 6290.955403 | 7.709437e-07 | 6328.494965 | -0.593183 | 91087.186742 | 28116.628018 | 3.239620 |
Srovnejme si CHKO podle komplexity jejich tvaru.
chko.sort_values('perimeter_ratio', ascending=False).head()
FCSUBTYPE | F_CODE | ICC | NAMN1 | NA3 | NAMN2 | NLN1 | NLN2 | SHAPE_Leng | SHAPE_Area | SND | ANND | geometry | area_5514 | area_4326 | area_23032 | area_diff | perimeter | min_perimeter | perimeter_ratio | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 2 | FA081 | CZ | Krkonošský národní park | CAT V | UNK | cze | UNK | 232089.726966 | 3.635709e+08 | 5220000 | 7120100 | POLYGON ((-658647.890 -974380.800, -658489.293... | 36357.093598 | 4.625936e-06 | 36530.758987 | -0.475395 | 232089.726966 | 67592.655859 | 3.433653 |
4 | 1 | FA080 | CZ | Podyjí | CAT II | Nationalpark Thayatal | cze | ger | 91087.186742 | 6.290955e+07 | 5220000 | 7120100 | POLYGON ((-656724.478 -1186419.132, -656719.97... | 6290.955403 | 7.709437e-07 | 6328.494965 | -0.593183 | 91087.186742 | 28116.628018 | 3.239620 |
5 | 1 | FA080 | CZ | České Švýcarsko | CAT II | UNK | cze | UNK | 86984.825493 | 7.929017e+07 | 5220000 | 7120100 | POLYGON ((-731155.429 -948303.529, -731078.389... | 7929.016945 | 1.012781e-06 | 7952.875752 | -0.300002 | 86984.825493 | 31565.640424 | 2.755681 |
36 | 2 | FA081 | CZ | Brdy | CAT V | UNK | cze | UNK | 180326.987644 | 3.449984e+08 | 5220000 | 7120200 | POLYGON ((-794344.235 -1075225.561, -794192.86... | 34499.843006 | 4.298354e-06 | 34590.963444 | -0.263423 | 180326.987644 | 65843.588401 | 2.738717 |
2 | 2 | FA081 | CZ | Šumava | CAT V | UNK | cze | UNK | 270558.358423 | 7.798763e+08 | 5220000 | 7120200 | POLYGON ((-830609.000 -1131423.000, -830377.17... | 77987.633810 | 9.561313e-06 | 78186.847494 | -0.254792 | 270558.358423 | 98996.035769 | 2.733022 |
Zobrazme CHKO s nejkomplexnějším tvarem.
chko[chko['NAMN1'] == 'Krkonošský národní park'].plot()
<AxesSubplot:>
Tvorba geometrie¶
Buffer
chko['buffer']=chko['geometry'].buffer(300)
chko[chko['NAMN1'] == 'Krkonošský národní park'].plot()
<AxesSubplot:>
chko.head(3)
FCSUBTYPE | F_CODE | ICC | NAMN1 | NA3 | NAMN2 | NLN1 | NLN2 | SHAPE_Leng | SHAPE_Area | ... | ANND | geometry | area_5514 | area_4326 | area_23032 | area_diff | perimeter | min_perimeter | perimeter_ratio | buffer | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2 | FA081 | CZ | Broumovsko | CAT V | UNK | cze | UNK | 111219.544184 | 4.322066e+08 | ... | 7120200 | POLYGON ((-615978.682 -994555.085, -615911.986... | 43220.659681 | 0.000005 | 43470.952420 | -0.575770 | 111219.544184 | 73697.138869 | 1.509143 | POLYGON ((-622498.137 -1005854.747, -622614.46... |
1 | 2 | FA081 | CZ | Krkonošský národní park | CAT V | UNK | cze | UNK | 232089.726966 | 3.635709e+08 | ... | 7120100 | POLYGON ((-658647.890 -974380.800, -658489.293... | 36357.093598 | 0.000005 | 36530.758987 | -0.475395 | 232089.726966 | 67592.655859 | 3.433653 | POLYGON ((-667301.348 -979347.050, -667316.393... |
2 | 2 | FA081 | CZ | Šumava | CAT V | UNK | cze | UNK | 270558.358423 | 7.798763e+08 | ... | 7120200 | POLYGON ((-830609.000 -1131423.000, -830377.17... | 77987.633810 | 0.000010 | 78186.847494 | -0.254792 | 270558.358423 | 98996.035769 | 2.733022 | POLYGON ((-832470.643 -1132147.507, -832479.87... |
3 rows × 21 columns
Protože máme nyní dva sloupce obsahující geometrii, musíme specifikovat ten, který chceme zobrazit.
chko.set_geometry('buffer', inplace=True)
chko[chko['NAMN1'] == 'Krkonošský národní park'].plot()
<AxesSubplot:>
Konvexní obal
chko.set_geometry('geometry', inplace=True)
chko['convex_hull'] = chko.convex_hull
chko.set_geometry('convex_hull', inplace=True)
chko[chko['NAMN1'] == 'Krkonošský národní park'].plot()
<AxesSubplot:>
Nejmenší ohraničující obdélník
chko.set_geometry('geometry', inplace=True)
chko['envelope'] = chko.envelope
chko.set_geometry('envelope', inplace=True)
chko[chko['NAMN1'] == 'Krkonošský národní park'].plot()
<AxesSubplot:>
Centroid
chko.set_geometry('geometry', inplace=True)
chko['centroid'] = chko.centroid
chko.set_geometry('centroid', inplace=True)
chko[chko['NAMN1'] == 'Krkonošský národní park'].plot()
<AxesSubplot:>
Centroid sám o sobě nám mnoho neříká. Zobrazme si centroid i původní polygon.
chko.set_geometry('geometry', inplace=True)
basemap = chko[chko['NAMN1'] == 'Krkonošský národní park'].plot(color='darkgreen', alpha = 0.5)
chko.set_geometry('centroid', inplace=True)
chko[chko['NAMN1'] == 'Krkonošský národní park'].plot(ax=basemap, color='darkblue', alpha = 0.5)
<AxesSubplot:>
Překryvné operace¶
Vyberme pouze CHKO, ve kterých se nachází alespoň jedna rozhledna.
lookouts = gpd.read_file("TowerP.shp")
chko.set_geometry('geometry', inplace=True)
basemap = chko.plot(color='darkgreen', alpha = 0.5)
lookouts.plot(ax=basemap, color='darkblue', alpha = 0.5)
<AxesSubplot:>
lookouts_union = lookouts['geometry'].unary_union
lookouted = chko[chko['geometry'].intersects(lookouts_union)]
lookouted.plot()
<AxesSubplot:>
Zobrazme jen překryvné plochy.
lookouts['buffer'] = lookouts.buffer(10000)
lookouts_union = lookouts['buffer'].unary_union
lookouted['impacted_poly'] = lookouted['geometry'].intersection(lookouts_union)
lookouted.set_geometry('impacted_poly', inplace=True)
basemap = lookouts['buffer'].plot(alpha=0.5)
lookouted['geometry'].plot(ax=basemap, color='darkgreen', alpha=0.5)
lookouted.plot(ax=basemap, color='darkred')
/home/martin/.local/lib/python3.10/site-packages/geopandas/geodataframe.py:1472: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy super().__setitem__(key, value)
<AxesSubplot:>