Põhjalik juhend geograafilise infosüsteemi (GIS) andmete töötlemiseks Pythoni abil, hõlmates olulisi teeke, tehnikaid ja reaalseid rakendusi globaalsele publikule.
Python Geograafiline Informatsioon: GIS-andmete töötlemise valdamine
Geograafilised infosüsteemid (GIS) on üliolulised ruumiliste andmete ja nende rakenduste mõistmiseks. Python on kujunenud võimsaks tööriistaks GIS-andmete töötlemiseks ja analüüsimiseks, pakkudes rikkalikku teekide ökosüsteemi, mis võimaldab tõhusaid ja skaleeritavaid georuumilisi töövooge. See juhend annab põhjaliku ülevaate Pythoni kasutamisest GIS-andmete töötlemiseks, hõlmates olulisi teeke, tehnikaid ja reaalseid rakendusi globaalsele publikule.
Miks Python GIS-andmete töötlemiseks?
Pythoni populaarsus GIS-i valdkonnas tuleneb mitmest peamisest eelisest:
- Mitmekülgsus: Python suudab käsitleda erinevaid GIS-andmevorminguid, sealhulgas vektori- ja rasterandmeid.
- Ulatuslikud teegid: Teegid nagu GeoPandas, Rasterio, Shapely, Fiona ja Pyproj pakuvad spetsiaalseid funktsioone georuumiliste andmete manipuleerimiseks ja analüüsimiseks.
- Avatud lähtekood: Python ja selle GIS-i teegid on avatud lähtekoodiga, muutes need kättesaadavaks ja kulutõhusaks.
- Suur kogukond: Suur ja aktiivne kogukond pakub rikkalikku tuge, dokumentatsiooni ja ressursse.
- Integratsioon: Python integreerub sujuvalt teiste andmeteaduse ja masinõppe tööriistadega.
Olulised Pythoni teegid GIS-i jaoks
Mitmed Pythoni teegid on GIS-andmete töötlemise jaoks fundamentaalsed:
GeoPandas
GeoPandas laiendab Pandasi, et töötada georuumiliste andmetega. See võimaldab teil lugeda, kirjutada ja manipuleerida vektoriandmeid (nt shapefile'id, GeoJSON) tabeliformaadis.
import geopandas
# Loe shapefile
gdf = geopandas.read_file("path/to/your/shapefile.shp")
# Prindi esimesed read
print(gdf.head())
# Juurdepääs geomeetria veerule
print(gdf.geometry.head())
Näide: Kujutage ette, et teil on shapefile, mis sisaldab erinevate riikide piire kogu maailmas. GeoPandas võimaldab teil hõlpsalt neid andmeid laadida, teha ruumilisi päringuid (nt leida riike konkreetses piirkonnas) ja visualiseerida tulemusi.
Rasterio
Rasterio't kasutatakse rasterandmete (nt satelliidipildid, kõrgusmudelid) lugemiseks ja kirjutamiseks. See pakub tõhusat juurdepääsu pikslite andmetele ja metaandmetele.
import rasterio
# Ava rasterfail
with rasterio.open("path/to/your/raster.tif") as src:
# Prindi metaandmed
print(src.meta)
# Loe rasterandmed
raster_data = src.read(1) # Loe esimene riba
# Prindi andmete kuju
print(raster_data.shape)
Näide: Mõelge Amazonase vihmametsa satelliidipildile. Rasterio võimaldab teil pildi laadida, pääseda juurde selle pikslite väärtustele (mis esindavad erinevaid spektraalribasid) ja teha toiminguid, nagu taimestikuindeksite arvutamine või metsade hävitamise tuvastamine.
Shapely
Shapely on teek tasapinnaliste geomeetriliste objektide manipuleerimiseks ja analüüsimiseks. See pakub klasse punktide, joonte, polügoonide ja muude geomeetriliste kujundite esitamiseks, koos meetoditega geomeetriliste toimingute, nagu lõikamine, ühendamine ja puhverdamine, tegemiseks.
from shapely.geometry import Point, Polygon
# Loo punkt
point = Point(2.2945, 48.8584) # Eiffeli torni koordinaadid
# Loo polügoon
polygon = Polygon([(0, 0), (0, 1), (1, 1), (1, 0)])
# Kontrolli, kas punkt on polügooni sees
print(point.within(polygon))
Näide: Saate kasutada Shapely't, et teha kindlaks, kas konkreetne asukoht (esindatud punktina) langeb kaitsealale (esindatud polügoonina).
Fiona
Fiona pakub puhast ja Pythonic liidest vektoriandmevormingute lugemiseks ja kirjutamiseks. Seda kasutatakse sageli koos GeoPandasega.
import fiona
# Ava shapefile
with fiona.open("path/to/your/shapefile.shp", "r") as collection:
# Prindi skeem
print(collection.schema)
# Itereeri üle objektide
for feature in collection:
print(feature["properties"])
Pyproj
Pyproj on teek koordinaatide teisenduste tegemiseks. See võimaldab teil teisendada erinevate koordinaatide viitesüsteemide (CRS) vahel.
import pyproj
# Määratle sisend- ja väljund-CRS-id
in_crs = "EPSG:4326" # WGS 84 (laiuskraad/pikkuskraad)
out_crs = "EPSG:3857" # Web Mercator
# Loo trafo
transformer = pyproj.Transformer.from_crs(in_crs, out_crs)
# Teisenda koordinaadid
lon, lat = 2.2945, 48.8584 # Eiffeli torni koordinaadid
x, y = transformer.transform(lat, lon)
print(f"Pikkuskraad, Laiuskraad: {lon}, {lat}")
print(f"X, Y: {x}, {y}")
Näide: Kui töötate andmetega erinevatest allikatest, peate sageli teisendama koordinaadid ühiseks CRS-iks analüüsi jaoks. Pyproj hõlbustab seda protsessi.
Levinud GIS-andmete töötlemise ülesanded Pythoniga
Pythoni saab kasutada mitmesuguste GIS-andmete töötlemise ülesannete jaoks:
Andmete import ja eksport
Andmete lugemine erinevatest vormingutest (nt shapefile'id, GeoJSON, rasterfailid) ja andmete kirjutamine erinevatesse vormingutesse.
# GeoJSON-faili lugemine GeoPandasega
import geopandas
gdf = geopandas.read_file("path/to/your/geojson.geojson")
# GeoDataFrame'i kirjutamine shapefile'i
gdf.to_file("path/to/output/shapefile.shp", driver='ESRI Shapefile')
Ruumiliste andmete puhastamine ja teisendamine
Topoloogiliste vigade parandamine, geomeetriate parandamine ja koordinaatsüsteemide teisendamine.
import geopandas
# Laadi GeoDataFrame
gdf = geopandas.read_file("path/to/your/shapefile.shp")
# Kontrolli kehtetuid geomeetriaid
print(gdf.is_valid.value_counts())
# Paranda kehtetud geomeetriad
gdf['geometry'] = gdf['geometry'].buffer(0)
# Kontrolli, kas geomeetriad on pärast parandamist kehtivad
print(gdf.is_valid.value_counts())
Ruumiline analüüs
Toimingute tegemine nagu puhverdamine, lõikamine, ühendamine, ruumilised ühendused ja läheduse analüüs.
import geopandas
# Laadi andmekogumid
countries = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))
cities = geopandas.read_file(geopandas.datasets.get_path('naturalearth_cities'))
# Loo linnade ümber puhver
cities['geometry'] = cities.geometry.buffer(1)
# Tee ruumiline ühendus
joined_data = geopandas.sjoin(countries, cities, how="inner", op="intersects")
# Prindi ühendatud andmed
print(joined_data.head())
Näide: Saate kasutada ruumilist ühendust, et leida kõik linnad, mis jäävad konkreetse riigi piiridesse.
Rasterandmete töötlemine
Toimingute tegemine nagu ümberdiskreetimine, kärpimine, mosaiikimine ja rasterstatistika arvutamine.
import rasterio
from rasterio.mask import mask
from shapely.geometry import Polygon
# Määratle piirikast polügoonina
polygon = Polygon([(-10, 20), (-10, 30), (10, 30), (10, 20)])
# Teisenda polügoon GeoJSON-i sarnaseks objektiks
geojson_geometry = [polygon.__geo_interface__]
# Ava rasterfail
with rasterio.open("path/to/your/raster.tif") as src:
# Maskeeri raster polügooniga
out_image, out_transform = mask(src, geojson_geometry, crop=True)
out_meta = src.meta.copy()
# Uuenda metaandmeid
out_meta.update({
"driver": "GTiff",
"height": out_image.shape[1],
"width": out_image.shape[2],
"transform": out_transform
})
# Kirjuta maskeeritud raster uude faili
with rasterio.open("path/to/output/masked_raster.tif", "w", **out_meta) as dest:
dest.write(out_image)
Näide: Saate kärpida satelliidipilti konkreetse huvipiirkonna jaoks, kasutades polügooni piiri.
Geokodeerimine ja pöördgeokodeerimine
Aadresside teisendamine geograafilisteks koordinaatideks (geokodeerimine) ja vastupidi (pöördgeokodeerimine).
from geopy.geocoders import Nominatim
# Initsialiseeri geokodeerija
geolocator = Nominatim(user_agent="geo_app")
# Geokodeerimine
location = geolocator.geocode("175 5th Avenue, New York, NY")
print(location.address)
print((location.latitude, location.longitude))
# Pöördgeokodeerimine
location = geolocator.reverse("40.7484, -73.9857")
print(location.address)
Näide: Saate kasutada geokodeerimist, et leida ettevõtte aadressi geograafilised koordinaadid, või pöördgeokodeerimist, et tuvastada konkreetsele asukohale vastav aadress.
Võrgu analüüs
Transpordivõrkude analüüsimine, näiteks kahe punkti vahelise lühima tee leidmine või teeninduspiirkondade arvutamine.
import osmnx as ox
# Määratle koht
place = "Piedmont, California, USA"
# Hangi koha graafik
G = ox.graph_from_place(place, network_type="drive")
# Leia lühim tee kahe sõlme vahel
origin = ox.nearest_nodes(G, X=-122.2347, Y=37.8264)
destination = ox.nearest_nodes(G, X=-122.2003, Y=37.8293)
shortest_path = ox.shortest_path(G, origin, destination, weight="length")
# Joonista lühim tee
fig, ax = ox.plot_graph_route(G, shortest_path, route_linewidth=6, route_color="y", orig_dest_size=10, node_size=0)
Näide: Saate kasutada võrgu analüüsi, et leida kiireim tee kahe asukoha vahel teedevõrgus.
Reaalsed rakendused
Pythonil põhinevat GIS-andmete töötlemist kasutatakse erinevates rakendustes erinevates sektorites:
- Keskkonnaseire: Satelliidipiltide analüüsimine metsade hävitamise jälgimiseks, õhukvaliteedi jälgimiseks ja kliimamuutuste mõju hindamiseks. Näide: Satelliidiandmete kasutamine Himaalaja liustike sulamise hindamiseks ja selle mõju hindamiseks allavoolu kogukondadele.
- Linnaplaneerimine: Transpordivõrkude optimeerimine, uute arenduste jaoks sobivate asukohtade tuvastamine ja linna laienemise analüüsimine. Näide: Liikluse mustrite analüüsimine sellises suurlinnas nagu Tokyo, et parandada ühistranspordi marsruute.
- Põllumajandus: Saagi tervise jälgimine, niisutuse optimeerimine ja saagikuse ennustamine. Näide: Droonide ja satelliidipiltide kasutamine saagi tervise jälgimiseks Brasiilia põllumajanduspiirkondades.
- Katastroofide ohjamine: Loodusõnnetuste mõju hindamine, päästetööde koordineerimine ja evakueerimisteede planeerimine. Näide: GIS-i kasutamine Bangladeshi rannikualade üleujutusalade kaardistamiseks ja evakueerimisteede planeerimiseks.
- Rahvatervis: Haiguspuhangute kaardistamine, riskipiirkondade tuvastamine ja ressursside tõhus jaotamine. Näide: Malaaria leviku kaardistamine Sahara-taguses Aafrikas ja sihtotstarbeliste sekkumiste jaoks piirkondade tuvastamine.
Parimad tavad GIS-andmete töötlemiseks Pythoniga
Et tagada tõhus ja usaldusväärne GIS-andmete töötlemine Pythoniga, järgige neid parimaid tavasid:
- Kasutage virtuaalseid keskkondi: Looge virtuaalsed keskkonnad sõltuvuste isoleerimiseks ja projektidevaheliste konfliktide vältimiseks.
- Kirjutage modulaarset koodi: Jagage keerukad ülesanded väiksemateks, taaskasutatavateks funktsioonideks ja klassideks.
- Dokumenteerige oma kood: Lisage kommentaare ja dokstringe, et selgitada oma koodi eesmärki ja funktsionaalsust.
- Testige oma koodi: Kirjutage ühiktestid, et veenduda, et teie kood töötab õigesti.
- Käsitlege vigu graatsiliselt: Rakendage veakäsitlusmehhanisme, et vältida koodi krahhi ootamatute vigade korral.
- Optimeerige jõudlust: Kasutage tõhusaid algoritme ja andmestruktuure, et minimeerida töötlemisaega ja mälukasutust.
- Kasutage versioonikontrolli: Kasutage Giti või muud versioonikontrollisüsteemi, et jälgida koodi muudatusi ja teha koostööd teistega.
Rakenduslikud arusaamad
- Alustage põhitõdedest: Tutvuge GIS-i põhimõistetega ja oluliste Pythoni teekidega (GeoPandas, Rasterio, Shapely, Fiona, Pyproj).
- Harjutage reaalse maailma andmetega: Töötage projektidega, mis hõlmavad reaalse maailma GIS-andmeid, et saada praktilisi kogemusi.
- Uurige veebiressursse: Kasutage veebipõhiseid õpetusi, dokumentatsiooni ja kogukonna foorumeid, et õppida uusi tehnikaid ja lahendada probleeme.
- Panustage avatud lähtekoodiga projektidesse: Panustage avatud lähtekoodiga GIS-i teekidesse, et parandada oma oskusi ja anda kogukonnale tagasi.
- Olge kursis: Olge kursis GIS-i tehnoloogia ja Pythoni teekide uusimate arengutega.
Järeldus
Python pakub võimsat ja mitmekülgset platvormi GIS-andmete töötlemiseks. Valdades olulisi teeke ja tehnikaid, saate avada ruumiliste andmete potentsiaali ja rakendada seda mitmesugustele reaalse maailma probleemidele. Olenemata sellest, kas olete keskkonnateadlane, linnaplaneerija või andmeanalüütik, võib Pythonil põhinev GIS-andmete töötlemine aidata teil saada väärtuslikku teavet ja teha teadlikke otsuseid. Ülemaailmne kogukond ja avatud lähtekoodiga tööriistade kättesaadavus annavad veelgi enam võimalusi üksikisikutele ja organisatsioonidele üle maailma GIS-i kasutamiseks mitmesuguste rakenduste jaoks. Parimate tavade omaksvõtmine ja pidev õppimine tagavad, et jääte selles pidevalt arenevas valdkonnas pädevaks. Ärge unustage alati arvestada oma töö eetiliste tagajärgedega ja püüdke kasutada GIS-i ühiskonna paremaks muutmiseks.
Lisateave
- GeoPandase dokumentatsioon: https://geopandas.org/en/stable/
- Rasterio dokumentatsioon: https://rasterio.readthedocs.io/en/stable/
- Shapely dokumentatsioon: https://shapely.readthedocs.io/en/stable/manual.html
- Fiona dokumentatsioon: https://fiona.readthedocs.io/en/stable/
- Pyproji dokumentatsioon: https://pyproj4.github.io/pyproj/stable/
- OSMnx dokumentatsioon: https://osmnx.readthedocs.io/en/stable/