Mer

Formfilprojeksjon for Matplotlib Basemap

Formfilprojeksjon for Matplotlib Basemap


Forord: Første gang du arbeider med GIS-data.

Jeg bruker pythons Basemap-bibliotek for å legge data på kart.

Opplæringen jeg bruker inkluderer en shapefile for London (london_wards.shp).

Jeg bruker grensemetoden for å få et minimumsavgrensningsrektangel.

s = "/ data / london_wards.shp" shp = fiona.open (s) shp.bounds

(-0.5103750689005356, 51.28676016315085, 0.3340155643740321, 51.691874116909894)

Dette er breddegrad, lengdegrad (51.5072 ° N, 0.1275 ° V) for London.

Jeg overfører disse grensene til en grunnkartforekomst.


Deretter har jeg gjort det samme for shapefiles hentet fra SF OpenData.

Imidlertid er grensene tilsynelatende ikke breddegrad, lengdegrad.

s = "/ data / sfpd_districts.shp" shp = fiona.open (s) shp.bounds

(5979385.3163340045, 2085856.3243659574, 6024751.466714004, 2131290.9014959573)

Så jeg kan ikke overføre dem til grunnkart.

Flere shapefiler fra SF OpenData har lignende enheter returnert fra shp.bounds.

Hva er disse verdiene?

Hvordan konverteres de til breddegrad, lengdegrad for videre bruk?


Bruk direkte GDAL-modulen i stedet for å bruke den gjennom (Geo) Django:

fra osgeo importerer osr ori = osr.SpatialReference () desti = osr.SpatialReference () ori.ImportFromProj4 ("+ init = EPSG: 2227") desti.ImportFromProj4 ("+ init = EPSG: 4326") transformation = osr.CoordinateTransformation ( ori, desti) transformasjon1.TransformPoint (5979385.3163340045, 2085856.3243659574) (-122.5129551683127, 37.706167841402952, 0.0)

eller pyproj-modulen (medpreserve_units = Santfordi pyproj antar at koordinatene dine er i meter, og dette er ikke tilfelle for EPSG: 2227):

fra pyproj importerer Proj, transformerer ori = Proj (init = 'epsg: 2227', preserve_units = True) dest = Proj (init = 'EPSG: 4326', preserve_units = True) transform (ori, dest, x, y) (- 122.51295516831273, 37.706167841402959)

Kombiner med Fiona:

fra pyproj import Proj, transformer import fiona fra fiona.crs import from_epsg med fiona.open ("/ data / sfpd_districts.shp") som shp ori = Proj (shp.crs, preserve_units = True), dest = Proj (init = ' EPSG: 4326 ', preserve_units = True) med fiona.open (' / data / sfpd_districtsWGS84.shp ',' w ',' ESRI Shapefile ', shp.schema.copy (), crs = from_epsg (4326) som utgang: for punkt i shp: x, y = punkt ['geometri'] ['koordinater'] punkt ['geometri'] ['koordinater'] = transformer (ori, dest, x, y) output.write (punkt)

Python: Hvordan bruke matplotlib-basiskart med shapefiler

for et prosjekt ved universitetet mitt vil jeg bruke Python 2.7 til å vise et kart over en (tysk) by, for det meste veiene, og til slutt inkluderer geo-lokalisering av flere servicepunkter. Jeg har grunnleggende kunnskap om Python, og jeg føler at jeg ikke får tilgang til trinnene jeg trenger å gjøre for å nå målet mitt.

Jeg brukte basekart for å begrense området med lon og lat der byen er. Så ønsket jeg å bruke en shapefile for å inkludere veier som er gitt, men jeg fikk feilmeldingen "RuntimeError: Can not put single artist in more than one figure". Til tross for søking kunne jeg ikke finne en løsning. Her er koden jeg brukte:

Så fikk jeg Google Maps API-er, men det ser ut til at jeg ikke kan bruke dem til å gi ut et kart. Også ved å laste inn pygmaps-innpakningen krasjer: "ImportError: Ingen modul med navnet pygmaps", og uansett, jeg vet ikke hvordan jeg skal bruke den.

Vet noen her hvilke skritt jeg kan ta for å oppnå målet mitt? Jeg ville være veldig takknemlig for råd. Takk på forhånd!


Imurointi kaikille saataville arkkitehtuureille
Arkkitehtuuri Versio Paketin koko Koko asennettuna Tiedostot
alfa (epävirallinen siirros) 1.2.2 + dfsg-1 + b1 93,1 kt435,0 kt [tiedostoluettelo]
amd64 1.2.2 + dfsg-1 + b1 93,9 kt427,0 kt [tiedostoluettelo]
arm64 1.2.2 + dfsg-1 + b1 92,3 kt423,0 kt [tiedostoluettelo]
armel 1.2.2 + dfsg-1 + b1 91,6 kt416,0 kt [tiedostoluettelo]
armhf 1.2.2 + dfsg-1 + b1 91,7 kt404,0 kt [tiedostoluettelo]
hppa (epävirallinen siirros) 1.2.2 + dfsg-1 93,3 kt425,0 kt [tiedostoluettelo]
i386 1.2.2 + dfsg-1 + b1 95,6 kt424,0 kt [tiedostoluettelo]
m68k (epävirallinen siirros) 1.2.2 + dfsg-1 + b1 92,1 kt417,0 kt [tiedostoluettelo]
mips64el 1.2.2 + dfsg-1 + b1 91,5 kt425,0 kt [tiedostoluettelo]
mipsel 1.2.2 + dfsg-1 + b1 91,8 kt422,0 kt [tiedostoluettelo]
ppc64 (epävirallinen siirros) 1.2.2 + dfsg-1 + b1 95,4 kt501,0 kt [tiedostoluettelo]
ppc64el 1.2.2 + dfsg-1 + b1 95,0 kt435,0 kt [tiedostoluettelo]
riscv64 (epävirallinen siirros) 1.2.2 + dfsg-1 + b1 91,2 kt411,0 kt [tiedostoluettelo]
s390x 1.2.2 + dfsg-1 + b1 92,1 kt427,0 kt [tiedostoluettelo]
sh4 (epävirallinen siirros) 1.1.0 + dfsg-3 104,1 kt477,0 kt [tiedostoluettelo]
sparc64 (epävirallinen siirros) 1.1.0 + dfsg-3 96,4 kt519,0 kt [tiedostoluettelo]
x32 (epävirallinen siirros) 1.2.1 + dfsg-1 + b2 100,0 kt437,0 kt [tiedostoluettelo]

Denne siden er også tilgjengelig på følgende språk (Hvordan angi standard dokumentspråk):


Загрузить для всех доступных архитектур
Архитектура Размер пакета В установленном виде Файлы
amd64 243,0 KB884,0 KB [список файлов]
arm64 210,3 KB798,0 KB [список файлов]
armel 238,4 KB910,0 KB [список файлов]
armhf 212,4 KB706,0 KB [список файлов]
i386 248,5 KB891,0 KB [список файлов]
mips 229,6 KB870,0 KB [список файлов]
mips64el 228,8 KB892,0 KB [список файлов]
mipsel 231,9 KB870,0 KB [список файлов]
ppc64el 222,9 KB906,0 KB [список файлов]
s390x 223,7 KB891,0 KB [список файлов]

Dette har gjort det mulig å velge en del (som du kan gjøre som du vil):

Чтобы сообщить о проблеме, связанной с веб-сайтом, отправьте сообщение (на английском) in список рассылки [email protected] Прочую контактную информацию см. på denne debianen Как с нами связаться.

Авторские права & copy 1997 - 2021 SPI Inc. См. условия лицензии. Debian это торговый знак компании SPI Inc. Об этом сайте.


Загрузить для всех доступных архитектур
Архитектура Версия Размер пакета В установленном виде Файлы
alfa (неофициальный перенос) 1.2.2 + dfsg-1 + b1 93,1 KB435,0 KB [список файлов]
amd64 1.2.2 + dfsg-1 + b1 93,9 KB427,0 KB [список файлов]
arm64 1.2.2 + dfsg-1 + b1 92,3 KB423,0 KB [список файлов]
armel 1.2.2 + dfsg-1 + b1 91,6 KB416,0 KB [список файлов]
armhf 1.2.2 + dfsg-1 + b1 91,7 KB404,0 KB [список файлов]
hppa (неофициальный перенос) 1.2.2 + dfsg-1 93,3 KB425,0 KB [список файлов]
i386 1.2.2 + dfsg-1 + b1 95,6 KB424,0 KB [список файлов]
m68k (неофициальный перенос) 1.2.2 + dfsg-1 + b1 92,1 KB417,0 KB [список файлов]
mips64el 1.2.2 + dfsg-1 + b1 91,5 KB425,0 KB [список файлов]
mipsel 1.2.2 + dfsg-1 + b1 91,8 KB422,0 KB [список файлов]
ppc64 (неофициальный перенос) 1.2.2 + dfsg-1 + b1 95,4 KB501,0 KB [список файлов]
ppc64el 1.2.2 + dfsg-1 + b1 95,0 KB435,0 KB [список файлов]
riscv64 (неофициальный перенос) 1.2.2 + dfsg-1 + b1 91,2 KB411,0 KB [список файлов]
s390x 1.2.2 + dfsg-1 + b1 92,1 KB427,0 KB [список файлов]
sh4 (неофициальный перенос) 1.1.0 + dfsg-3 104,1 KB477,0 KB [список файлов]
sparc64 (неофициальный перенос) 1.1.0 + dfsg-3 96,4 KB519,0 KB [список файлов]
x32 (неофициальный перенос) 1.2.1 + dfsg-1 + b2 100,0 KB437,0 KB [список файлов]

Dette har gjort det mulig å velge en del (som du kan gjøre som du vil):

Чтобы сообщить о проблеме, связанной с веб-сайтом, отправьте сообщение (на английском) in список рассылки [email protected] Прочую контактную информацию см. på denne debianen Как с нами связаться.

Авторские права & copy 1997 - 2021 SPI Inc. См. условия лицензии. Debian это торговый знак компании SPI Inc. Об этом сайте.


Python | Opplæring: Intro til kartong

Det er for tiden to hoved Python-biblioteker for å plotte geografiske data på kartet: Cartopy og Basemap. Nye brukere bør bruke Cartopy siden support Cartopy vil erstatte Basemap, og det forventes at støtte for Basemap vil komme i 2020. Derfor vil denne veiledningen fokusere på Cartopy. Hvis du vil bruke Basemap (f.eks. For å plotte i "3D"), er det et par lenker til eksisterende opplæringsprogrammer og eksempler for å komme i gang. Videre kan mange begreper beskrevet her være nyttige for å forstå Basemap.

  • Plott GFS-overflatetemperaturdata på et kart
  • Masker ut landoverflater for å tegne et kart over havoverflatetemperatur og isdekke fra GFS
  • Tegn et regionalt kart over overflatetemperatur med amerikanske stater
  • Bruke forvandle funksjon for å plotte GFS-data på en annen kartprojeksjon

Denne opplæringen får tilgang til NOMADS-dataserveren ved hjelp av netCDF4-biblioteket. Hvis du ikke er kjent med dette, anbefaler jeg at du ser veiledningen min om å lese NetCDF-data.


Starter - Griping GFS Data:
Følgende kode brukes for å komme i gang med denne opplæringen, i hovedsak importerer den alle nødvendige moduler, trekker GFS-dataene fra NOMADS-dataserveren og laster den inn i matriser. Når dataene er lastet inn, vil resten av opplæringen fokusere på Cartopy.

Nå som dataene dine er lastet inn initialiserer vi en figur og delplotterer ved hjelp av "projeksjon" -nøkkelordet matplotlibs for å koble til Cartopy-biblioteket. Når du har festet Cartopy-pakken til delplottet ditt, er det en rekke ekstra objekter og klasser du kan legge til i figuren din. I det første eksemplet vil jeg demonstrere ved å påkalle "kystlinjene" -attributtet til plottkontinenter på kartet.

Nå er figuren din og delplott definert. Kartongen "PlateCarree ()"projeksjon er en grunnleggende sylindrisk kartprojeksjon som godtar koordinatinformasjon i form av lat / lon-koordinatpar. Lat / lon-dataene kan være enten 1D eller 2D, men hvis koordinatinformasjonen din er lat / lon, er projeksjonen din PlateCarree (). Du kan sende to nøkkelord til PlateCarree ( sentral lengde og klode), men i de fleste tilfeller trenger du ikke det. Noen ganger tilbakestiller jeg sentral lengdegrad til 180, i stedet for at den er null.

Koden for å plotte kartet er:

Og du får et bilde som ligner på dette:

GFS overflatetemperatur fra Cartopy

La oss si at du ønsket å maskere landområder og legge til is på kartet for å fokusere på havene.
Det er enkelt å legge til havisen, alt du trenger er at du trekker i icecsfc variabel fra GFS-dataene, og plott den over toppen av overflatetemperaturkartet:

Vi bruker nummen maske (ma) -funksjonalitet til å maskere rutenett der isdekket er mindre enn 10%.
For å skjule ut landområder bruker vi "Cartopy Feature"modul, som håndterer shapefiles. Cartopy Feature-modulen kobler seg tilsynelatende til Natural Earth Dataset, og gjør det mulig for alle å plotte en rekke forskjellige GIS-datasett uten å måtte laste ned individuelle shapefiles før hånden. Grensesnittet har til og med mange forhåndsdefinerte funksjoner, inkludert land. Dette gjør maskering av landområdene til en lek.

I koden ovenfor er "add_feature"funksjon brukes, og den forhåndsdefinerte" LAND "-funksjonen fra Cartopy Feature-pakken leveres med et par grunnleggende søkeordargumenter. Setter alt sammen:

Å kjøre ovennevnte kode vil gi deg et bilde som dette:

GFS SST og havisdekke


Nå kan vi zoome inn over USA og legge til stater på kartet. For å klippe ut omfanget, "set_extent"funksjon brukes:

Listen tilsvarer lon / lat-grenser fra [vestligste lengdegrad, østligste lengdegrad, sørligste breddegrad, nordligste bredde] og crs-argumentet indikerer hvilken transform som blir brukt. For å legge til tilstandene, må du definere tilstandene fra Natural Earth-databasen. argumentet "skala"

Ved å endre omfanget, og legge til statene, får du et kart som ser slik ut:


For dette eksemplet vil jeg bruke Overpass API for å trekke ut alle større byer i Portugal fra OpenStreetMaps-prosjektet.

Overpass API er en skrivebeskyttet API som serverer tilpassede utvalgte deler av OSM-kartdataene. Det fungerer som en database over nettet: klienten sender et spørsmål til API og får tilbake datasettet som tilsvarer spørringen.

(.) disse koordinatene er spesifisert i OSM-databasen og i OverPass API ved å projisere de virkelige punktene vertikalt til noder på WGS84-ellipsoiden.

La oss importere noen Python-moduler vi skal bruke:

Overpass API-spørringssystemet er litt komplisert. Her er beskrivelsen av Query Language: Overpass API Query Language.

La oss ringe API-objektet og gjøre et spørsmål:

Svaret er en Python-ordbok som inneholder dataene.

La oss bruke Pythons listeforståelse for å trekke ut koordinatene og navnene på byene.

Listeforståelser gir en kortfattet måte å lage lister på. Vanlige applikasjoner er å lage nye lister der hvert element er resultatet av noen operasjoner som blir brukt på hvert medlem av en annen sekvens eller iterabel, eller å lage en undersøkelse av de elementene som tilfredsstiller en viss tilstand.

geometry.shape er en velskapt metode for å få en geometribeskrivelse inne i en ordbok og forvandle den til et velskapt objekt. Deretter kaller vi metoden .xy for å få de faktiske koordinatene.

Du kan dele denne cellen i trinn for å forstå den bedre (dette lærte jeg Python).

navn er en liste som inneholder bynavn. La oss sjekke det ut:

coords er en liste som inneholder koordinatpar. La oss sjekke den første oppføringen i listen:

Her kaller vi numpys hstack for å gjøre en horisontal stabel på koordinatobjektet. På denne måten stabler vi lengdegrader og breddegrader i forskjellige 1d-matriser.


Shapefile projection for Matplotlib Basemap - Geographic Information Systems

Pythons filoverføringsprotokoll (FTP) -bibliotek brukes til å analysere værstasjonsdata fra det offentlig tilgjengelige automatiserte overflateobservasjonssystemet (ASOS) fra U.S.A.s National Climatic Data Center (NCDC). Flere programmatiske verktøy tilgjengelig i Python brukes til å automatisere analysering av værdata, samt visualisere de resulterende dataene.

NEO-6 er en miniatyr GPS-modul designet av u-blox for å motta oppdateringer fra opptil 22 satellitter på 50 forskjellige kanaler som bruker trilaterasjon for å tilnærme den faste posisjonen til en mottakerenhet hvert sekund (eller mindre, for noen moduler). Den spesielle modulen som brukes i denne opplæringen, NEO-6M, er i stand til å oppdatere sin posisjon hvert sekund og kommuniserer med et Arduino-kort ved hjelp av UART seriell kommunikasjon. NEO-6M bruker National Marine Electronics Association (NMEA) protokoll som gir tidsmessig og geolokaliseringsinformasjon som Greenwich Mean Time (GMT), breddegrad, lengdegrad, høyde og omtrentlig kurshastighet. NEO-6M og Arduino-kortet vil også bli parret med en SD-modul for å lage en bærbar logger som fungerer som en GPS-tracker som kan hentes ut.

I denne opplæringsserien brukes Pythons Basemap-verktøysett og flere andre biblioteker for å utforske den offentlig tilgjengelige Geostationary Operational Environmental Satellite-16 (GOES-16). I denne første oppføringen vil følgende bli introdusert: anskaffelse av satellittdata, forståelse av satellittdatafiler, kartlegging av geografisk informasjon i Python, og plotte satellittoverflatetemperatur (LST) på et kart.

Beregning av breddegrad og lengdegrad fra en GOES-R L1b-datafil. GOES-R L1b-utstrålingsfilene inneholder utstrålingsdata og geometrisk skanneinformasjon i radianer. Denne informasjonen er ikke nok til å plotte geografiske utstrålingsdata rett fra filen, men etter noen geometriske manipulasjoner som utnytter satellittposisjon og ellipsoide parametere, kan vi utlede verdier for bredde og lengdegrad fra de endimensjonale skanningsvinklene og plotte dataene våre i projiserte formater kjent. til mange geografiske informasjonsverktøy.


Til slutt vil vi tegne parallellene (breddelinjene) og meridianene (lengdelinjene) på kartet. Den enkleste måten å definere området og intervallet for parallellene og meridianene er med matplotlib & # 8217 s numpy module. Fordi vi ser på et innzoomet område, har vi litt mer fleksibilitet i hvordan vi definerer ting. I forbindelse med dette eksemplet definerer jeg parallellene og meridianene for hele verden, og viser hvert multiplum av 10. Hvis du ser på et større område, vil du sannsynligvis i stedet vise hvert multiplum på 30 eller så.

Etter å ha definert rekkevidde og intervall, må vi definere hvordan de er merket på plottet. Figurer i matplotlib vises alltid inne i en boks, og vi bruker en liste over booleans for å fortelle matplotlib hvilke sider av boksen vi ønsker å vise etiketter, i formatet [venstre, høyre, topp, bunn]. Her vil vi merke breddelinjer på toppen og høyre side av boksen, som vi vil indikere med [False, True, True, False]. Linjer for lengdegrad vises på bunnen og venstre side av boksen, som kan angis med [True, False, False, True].


Shapefile projection for Matplotlib Basemap - Geographic Information Systems

Figur 1. PySAL i QGIS Processing Toolbox: Hot-spot analyse av drapstall i sørlige amerikanske fylker.

Python er et populært språk for geospatial programmering og applikasjonsutvikling. Denne oppføringen gir en oversikt over de forskjellige utviklingsmodusene som kan tas i bruk for GIS-programmering med Python, og diskuterer historien om adopsjon av Python i GIS-samfunnet. De forskjellige lagene i geospatial utviklingsstakken i Python blir undersøkt for å gi leseren en forståelse av bredden som Python tilbyr til GIS-utvikleren. Fremtidig utvikling og bredere spørsmål knyttet til interoperabilitet og programmering av økosystemer identifiseres.

Rey, S.J. (2017). Python for GIS. Geografisk informasjonsvitenskap & amp Technology Knowledge Body (3. kvartal 2017 utgave), John P. Wilson (red.). DOI: 10.22224 / gistbok / 2017.3.4

Denne oppføringen ble først publisert 19. august 2017. Ingen tidligere utgaver eksisterer.

utviklingsstabel: en gruppe programvarer som jobber sammen for å oppnå et spesifikt resultat eller for å utføre en bestemt analytisk oppgave

tolket språk: et programmeringsspråk der instruksjonene blir utført direkte uten tidligere kompilering til maskinspråklige instruksjoner

programvare med åpen kildekode: programvarekode som gjøres fritt tilgjengelig og kan endres og distribueres

Python er et åpen kildekode, objektorientert tolkespråk opprettet av Guido von Rossum i 1991. Siden utgivelsen har Python sett bred adopsjon på mange problemdomener. Denne populariteten stammer fra de attraktive egenskapene til språket. For det første støtter Python som et multiparadigmaspråk både strukturert programmering og objektorientering. For det andre er Python et tolket språk som gir seg til raske prototyping og utviklingssykluser. Core Python er selv skrevet på C-språket, og dette har muliggjort implementeringer av Python på tvers av mange plattformer og operativsystemer. Det rike og allsidige standardbiblioteket gjør Python godt egnet for mange prosjekter.

GIScience er en av de mange vitenskapelige fagdisipliner der Python har funnet et mottakelig publikum. Fra et vitenskapelig perspektiv har vekt på lesbarhet, plattformstøtte og lave oppstartkostnader gjort Python til et utmerket språk for samarbeid mellom GIScientists. Noen av disse samme funksjonene posisjonerer også Python som et fantastisk språk for undervisning i GIScience-begreper, faktisk brukes Python i økende grad som førstespråk i datalogi. Python er et utmerket førstespråk, men dette bør ikke forstås som at det er begrenset i omfang, ettersom mange applikasjoner i stor skala og mye brukte er implementert i Python, et godt eksempel på Dropbox.

Gitt den økende populariteten, gir denne oppføringen først en oversikt over de forskjellige utviklingsmodusene som kan adopteres for GIS-programmering med Python, og diskuterer historien om Python-adopsjon i GIS-samfunnet. Dette etterfølges av en innhøsting av GIS-programmeringsstakken for å gi leseren en forståelse av bredden som Python tilbyr til GIS-utvikleren. Konklusjonen diskuterer sannsynlig fremtidig utvikling og bredere spørsmål knyttet til interoperabilitet og programmering av økosystemer.

Som et skriptspråk tilbyr Python fleksibilitet i de forskjellige utviklingsmåtene for geospatial programmering. Disse kan ha form av å bruke Python for å utvide funksjonaliteten til en desktop GIS, til utvikling av en komplett frittstående desktop-applikasjon for spesialisert geospatial analyse, og bruk av Python for vitenskapelig skripting og interaktiv beregning i et skallmiljø.

3.1 Desktop-applikasjoner

Python spiller en sentral rolle for stasjonære Geospatial-applikasjoner. Fra versjon 9.0 av ArcGIS inkluderte Esri Python som et kjerneskriptspråk. Det er ArcPy pakken gir et grensesnitt til geoprosesseringsverktøy, funksjoner, klasser og moduler. En arcpy-funksjon definerer et bestemt stykke funksjonalitet, for eksempel, funksjoner finnes for å liste opp bestemte datasett, få tilgang til datasettets egenskaper og oppdatere geodatabaser. Videre kan Python-skript brukes i ArcGIS eller utenfor ArcGIS, og flere Python-verktøykasser kan utvikles og distribueres til ArcGIS-brukere ved å utnytte Pythons distutils modul.

GIS-pakken med åpen kildekode QGIS bruker Python som skriptspråk på en rekke måter. En Python-konsoll er tilgjengelig via QGIS grafiske brukergrensesnitt (GUI) for å gi et interaktivt skall som kan brukes til å skripte den eksisterende økten. Dette støtter eksperimentering med QGIS API og lar brukeren bygge opp en arbeidsflyt som til slutt kan lagres som et skript for senere gjenbruk.

Python har også blitt brukt til å utvikle behandling rammeverk som en del av QGIS. Dette er et geoprosesseringsmiljø som kan brukes til å kjøre innfødte eller eksterne / tredjepartsalgoritmer fra QGIS. Figur 1 viser et eksempel på bruk av PySAL-verktøyet fra Processing-verktøykassen for å utføre en hot-spot-analyse av en ressursmangelvariabel i 1990 for sørlige amerikanske fylker.

I tillegg til disse to stasjonære GIS-pakkene, har Python blitt brukt til å utvikle andre frittstående geospatiale applikasjoner. Primære eksempler er relatert til PySAL-prosjektet og inkluderer: GeoDaSpace, en pakke for romlig regresjonsanalyse CAST: Crime Analytics in Space-Time og STARS (Space-Time Analysis of Regional Systems). Disse pakkene er utviklet ved hjelp av Python og pakker avansert geospatial funksjonalitet i en GUI. Disse applikasjonene er mulige på grunn av at det finnes flere vitenskapelige biblioteker tilgjengelig for Python som er oppsummert nedenfor.

3.2 Interativ beregningsgeospatial programmering

Mange ganger innen vitenskapelig databehandling skriver forskere kode for å uttrykke sine ideer, prototype eller for å utforske data. Denne typen opportunistisk programmering krever et fleksibelt databehandlingsmiljø for å lette åpen leting. Python-økosystemet tilbyr et rikt sett med verktøy for denne typen interaktive vitenskapelige databehandling.

IPython utvider den interaktive Python-tolk for å gi et omfattende skallmiljø for interaktiv og utforskende databehandling. Funksjonsrikt, IPython tilbyr fullføring av tabulatorer, objektintrospeksjon, kommandohistorikk og tilgang til operativsystemskallet, noe som resulterer i en overlegen tolk for vitenskapelig databehandling over det som tilbys av den innebygde Python-tolk.

IPython-prosjektet har utviklet seg og gitt Jupyter. Jupyter-notatboken utvider den konsollbaserte tilnærmingen til interaktiv databehandling ved å tilby et nettbasert program som kan omfatte hele den vitenskapelige databehandlingsprosessen fra kodeutvikling, dokumentasjon og utførelse til den faktiske presentasjonen og formidlingen av resultatene. Jupyter består av to komponenter. Den første er et nettleserbasert verktøy som kombinerer tekst, kode og rich media for å støtte interaktiv redigering av vitenskapelige dokumenter. Den andre komponenten er notatbokdokumentet som er den faktiske kodingen av alt innholdet som er synlig i webapplikasjonen. Notatboksdokumentene er implementert som JavaScript Object Notation (JSON) som letter versjonskontroll og deling med samarbeidspartnere.

Geospatial utvikling dekker et bredt mangfold av oppgaver. For å gi en oversikt over geospatial programmeringsstabel i Python, oppsummerer tabell 1 selektive pakker fra hvert lag i stakken. De valgte pakkene er de mest populære eller ofte forekommende for hver type funksjonalitet, og det bør huskes at oppføringen ikke er uttømmende i dekningen, men ment å gi en første stopp-peker for Python-utviklere som ønsker å takle en bestemt oppgave .

Beskrivelse

Grensesnitt til Geospatial data abstraction library

API til OGR (Vector) lag av GDAL

Lese og skrive geospatiale rasterdata

Deterministisk romlig analyse

Oppsummerer raster ved hjelp av vektorgeometrier

Pandalignende romlige operasjoner på geometriske typer

PROJ4-grensesnitt for kartografiske transformasjoner

Visualisering via interaktive Leaflet maps

Interaktive nettlesere for visualisering av biblioteker

Big data visualisering grafikk pipeline

Romlig statistisk analyse

Romlig interaksjonsmodellering

Romlig begrenset klynging

Klientprogrammeringsgrensesnitt til OGC-nettjeneste

Streaming ETL for geospatial data

Tabell 1. Python Geospatial Programming Stack

4.1 Romlig datainngang / -utgang

All romlig analyse begynner med lesing av geospatiale data. En av de viktigste kjennetegnene ved å gjøre romlig dataanalyse er det rike utvalget av geodataformater. Dette gir en stor utfordring for den geospatiale utvikleren, da pakker som ikke er i størrelse bare ikke er å finne.

Som vanlig for mange av pakkene i geospatialstakken, har tilnærmingen til å implementere filinngang (og utdata) vært å pakke inn eksisterende C-biblioteker som har blitt mye brukt for det formål som er tilgjengelig. I dette tilfellet er målbiblioteket Geospatial Data Abstraction Library (GDAL) som gir oversettere til å lese og skrive både raster- og vektordata. I Python-stakken er det utviklet to forskjellige biblioteker som retter seg mot disse komponentene. Fiona fokuserer på OGR (vektor) funksjonalitet, mens rasterio gir en lignende innpakning for å avsløre rasterfunksjonaliteten til GDAL. Dette muliggjør lesing og skriving av formater som GeoTIFF via et Python API som er avhengig av bedøvet NV-matriser for effektiv beregning.

4.2 Geoprosessering

Når geospatiale data er lest i minnet, er en rekke geometriske operasjoner og manipulasjoner tilgjengelig for etterfølgende behandling. For vektordata tar disse form av settteoretiske operasjoner og manipulering av plane funksjoner. Pakken Velformet pakker inn geoer bibliotek for buffering, skjæringspunkt, utvidelse, differensiering og en rekke andre typer romlige operatorer på vektorobjekter. Funksjonalitet for fokal, sonal og oppsummering av rasters tilbys av rasterstatistikk pakke. Rasterstatistikk kan også støtte spørring av rasters ved hjelp av vektorgeometrier. For eksempel kan en utvikler finne høyden fra en DEM som er lagret i en TIF-fil basert på et punktvektorobjekt, eller generere sammendragsstatistikk for høyden innenfor grensene til et polygonobjekt (dvs. gjennomsnitt, maks, std av høyden innenfor en sone) .

Begge settene med disse romlige operasjonene er ofte oppstått i brukstilfellet for å utlede nye romlige variabler. Disse brukes deretter høyere opp i geospatialstakken for statistisk analyse. På egen hånd er ikke pakkene ved geoprosesseringsstakken (dvs. fiona og velskapt) ment å dekke den påfølgende statistiske analysen av de avledede objektene / lagene. Snarere blir de sett på som kritiske komponenter i en geospatial rørledning der forskjellige pakker er lenket sammen for å implementere en bestemt arbeidsflyt. Pakken geopandas kan sees på som en måte å legge til rette for denne typen arbeidsflyt og rørledning. Det er avhengig av funksjonalitet fra fiona og velskapt for geoprosessering, men henter inspirasjon fra den populære generelle databehandlingspakken pandaer som er det fremste biblioteket for behandling av data i Python beregningsstabel.

For at data fra forskjellige formater og kilder skal kunne harmoniseres og integreres ordentlig, blir funksjonalitet for å konvertere mellom forskjellige koordinatsystemer gitt gjennom pyproj pakke. pyproj er en Cython wrapper som gir et Python-grensesnitt til PROJ.4 bibliotek for kartografiske transformasjoner og geodetiske beregninger.

4.3 Geovisualisering og kartlegging

Visualisering og kartlegging av geospatiale data i Python hadde sin opprinnelse i global skala kartlegging implementert i pakken grunnkart. Grunnleggende kart implementerer ikke selve planleggingen i seg selv, men er avhengig av Proj4.C å transformere koordinater til en bestemt kartprojeksjon og deretter benytte matplotlib, det primære visualiseringsbiblioteket i Python, for å utføre den faktiske tegningen av konturer, bilder eller vektorobjekter i de projiserte koordinatene. Basemap’s opprinnelsen var støttet av oceanografi og meteorologi, og over tid har funksjonaliteten utviklet seg til å støtte andre fagområder fra biologi til geologi og geofysikk.

kartong er en pakke rettet mot enkel tegning av kart for dataanalyse og visualisering. Den benytter en objektorientert tilnærming til å definere kartprojeksjoner og gir et enkelt og intuitivt grensesnitt for visualisering via matplotlib. kartong er avhengig av både PROJ.4 for projeksjonsfunksjonalitet, og velskapt for å lese shapefiles. Lik grunnkart, Kartong ble opprinnelig opprettet for å støtte meteorologisk forskning, men har utvidet seg til å støtte kartlegging i et bredt spekter av vitenskapelige domener.

Mens begge deler grunnkart og kartong grensesnitt med matplotlib for visualisering målretter et antall Python-kartleggingspakker nettlesere som plattform for visualisering. Folium er en av de tidligste av disse, og gir et Python-grensesnitt til brosjyre javascript-bibliotek for interaktiv nettbasert kartlegging. Folium inkluderer også forbedringer fra Vincent / Vega rammeverk for å bringe utvidede markører og plott inn i geospatial visualisering. Folium grensesnitt med en rekke populære flisetjenester inkludert OpenStreetMap, Mapbox, og Stamen, med støtte for GeoJSON og TopoJSON geodataformater.

Selv om de ikke er designet spesielt for kartlegging og geovisualisering, garanterer to nylige Python-visualiseringspakker å inkluderes her. Bokeh den er lik Folium ved at den retter seg mot moderne nettlesere for visualisering. Det gjør det gjennom stilen til D3.js bibliotek for datadrevet visualisering, med vekt på interaktivitet med høy ytelse for store datasett. Datashader er en komponent av Bokeh som implementerer en grafisk rørledning for å gjengi representasjoner av massive datasett gjennom binning, aggregering og transformasjoner. Det er bemerkelsesverdig at de imponerende evnene til Datashader often feature geospatial applications (https://github.com/bokeh/datashader).

Before leaving the visualization layer of the Python geospatial stack, two additional points need to be made. First, there is an active focus in the Python scientific community on effective color maps for scientific visualization. This work intersects with that of cartographers designing color schemes for choropleth mapping. In the Python world the popular packages are palettable og colormap. Second, the visualization component of the Python scientific stack is rapidly evolving so readers are encouraged to use this section as an entry point not a final destination.

4.4 Spatial Statistical Analysis

PySAL is a library of spatial analysis functions for spatial data. It consists of modules that cover exploratory spatial data analysis which includes global and local measures of spatial autocorrelation - popular methods to detect spatial clustering and hot spots. PySAL also provides functionality for spatial regression, space-time analysis, regionalization, map classification and a host of geocomputational modules. PySAL began at a time when very little of the geospatial Python stack existed and, as such, it also includes functionality for lower levels of the stack out of necessity. Over time, PySAL has added modules that interface with many other newer packages in the stack (shapely, geopandas, cartopy, etc).

PySAL focuses primarily on vector spatial formats and covers statistical analysis for attributes associated with polygons, points and networks. Geostatistical data analysis is associated with the statistical analysis of fields commonly encountered in the geosciences where phenomena such as temperature, precipitation, air quality are modeled as a surface using methods such as kriging and various spatial interpolation approaches. The objective in much of this work is to generate predictions for a continuum of locations based on a discrete set of observed locations for the process at hand. In the Python stack, geostatistics is an area that has been underdeveloped to date as there have been a few starts of projects but intermittent development - one example being pykriging.

4.5 Spatial Modeling

Mesa is a package that implements functionality to develop and apply agent-based models. These models can be used to simulate autonomous agents embodied with behavioral rules on a grid layout to assess the impacts of their behaviors and interactions on the system as a whole. The classic example of ABM is the Schelling model of segregation featured as a key demonstration in the Mesa package.

clusterpy provides a library of spatially constrained clustering algorithms that can be used to group primitive geographic areas or points into a smaller number of regions for subsequent analysis. For example, in geodemographics, census tracts can be defined based on both socioeconomic similarity as well as geographical contiguity. The inclusion of the latter constraint differentiates regionalization from more general multivariate clustering.

4.6 Web and Distributed

Increasingly, scientific workflows have been moving towards web based and distributed frameworks, and spatial analysis is no exception. Here libraries that provide for middleware linking different analytical and processing functionality together as individual services are required. In the Python geospatial stack a growing number of packages implement specifications from the Open Geospatial Consortium to facilitate web based geoprocessing and analysis. Stetl offers a toolkit for extraction, transformation, and loading (ETL) of geospatial data. OWSlib implements key OGC standards via a Pythonic interface including, web mapping service (WMS), web feature service (WFS), sensor model language (SensorML), and WaterML among some 17 other services. Both Stetl og OWSlib are part of the GeoPython organization which develops numerous geospatial projects.

4.7 Package Considerations

The packages listed in Table 1 represent only a fraction of what is available to the geospatial developers working in Python. It should also be kept in mind that the placing of a package in a specific layer is somewhat fluid since a particular package may afford functionality that spans multiple layers of the stack. For example, because Geopandas has fiona and PySAL among its dependencies, it can provide access to the core functionality of those packages via its namespace. The richness and diversity of the geospatial packages are testaments to the core strengths of the underlying scientific computing stack in Python where packages such as numpy og scipy together with the development affordances of the Python ecosystem itself provide for an excellent development paradigm. As well, there are packages in the broader Python scientific stack that can be called upon to implement geospatial functionality. For eksempel, network-x provides a wealth of methods for analyzing networks and graphs, while scikit-image is a powerful library for image analysis.

There are a few issues that GIS developers need to keep in mind, particularly when developing GIS applications with Python for different platforms. A key issue is the management of the Python installation alongside third-party packages. Both ArcGIS og QGIS install their own Python interpreters in directories that are specific to those applications. This can be a source of confusion if the developer also has other Python installations on the same machine, particularly when it comes to installing additional packages. Python offers a number of approaches towards package management (pip being the main one), and Python distributions such as Anaconda and Enthought also provide their own package managers.

Python and the related GIS software ecosystem are very active and undergoing constant growth. To enhance one’s proficiency, it is important to keep up with these developments so that workflows can remain current by taking advantage of advances in the language itself and packages in the broader ecosystem. While predictions about the future are always challenging, the seeds of a few developments can already be seen emerging. The first is an increasing emphasis on the importance of interoperability between Python and other languages. Packages such as RPy allow for bidirectional interfaces between Python and R so that a developer can leverage the strengths of each language in the same workflow. This also serves to widen the scope of the GIScience programming stack.

A related area to keep abreast of is the set of tools that allow for extension of Python by wrapping external libraries written in lower level languages such as C, C++, and Fortran. Cython, numba, og swig provide methods to target bottlenecks in a Python code base to be replaced with more computationally efficient libraries. The extensibility of Python using these tools means that initial prototyping of a GIScience application can rely on pure Python in a developer-efficient manner. Only after the full functionality of the application is implemented should attention turn to optimizations and, in many cases, this turns out to be a small fraction of the code base. In these instances, the extension frameworks can prove invaluable.

The world of parallel and distributed high performance computing has advanced remarkably in the past decade and the Python ecosystem exemplifies this. Although a comprehensive coverage of related packages is beyond the current scope (packages for cloud, distributed and high performance computing in Python can be found at https://wiki.python.org/moin/ParallelProcessing), one exemplar package to note is Dask. A flexible parallel library for analytic computing, Dask is built around two components: dynamic task scheduling that optimizes interactive computational workloads, and big data collections that enable out-of-memory or distributed processing of parallel data arrays and dataframes.

A fourth important thread is the rise of open science. Stressing the need for improved transparency, reproducibility, and replication, the open science movement is leading to new types of development paradigms such as Docker containers, conda environments and the notebook viewer that enable sharing of snippets of code and even complete workflows that reproduce the analysis underlying a particular scientific paper. Familiarity with these tools will be increasingly important for Python GIS development.

Open science also has parallels in the open government and open data movements that are driving transparency, sharing, and reuse of government collected data. These have fostered collaborative projects bringing together academic researchers, government and industry to fashion computing solutions targeting social and environmental issues. Given that many of these projects involve geospatial data and analysis, Python capable GIScientists can play a central role in these efforts.


Se videoen: Matplotlib Tutorial Part 1: Creating and Customizing Our First Plots