Zephyrnet-logo

Een topografische kaart van Nepal bouwen met behulp van Python

Datum:

Introductie

Heb je je ooit afgevraagd hoe de topografie van je land de economische en politieke ontwikkeling beïnvloedt? Topografische kaarten – kaarten van het aardoppervlak die contourlijnen gebruiken voor visualisatie – kunnen helpen bij het beantwoorden van deze vragen! We zullen Python gebruiken om een ​​topografische kaart te maken voor Nepal, een land met een interessante topografische omgeving. U leert hoe u ruimtelijke gegevens kunt lezen die de topografie van een land beschrijven, hoe u deze gegevens kunt interpreteren en hoe u deze kunt visualiseren. De resulterende kaart kan worden gecombineerd met andere gegevens van belang op zeer uitgesplitste subnationale niveaus om te begrijpen hoe de topografie van een land zijn economische en/of politieke ontwikkeling beïnvloedt. Deze blogpost zal je leren hoe je een echt interessante tool kunt genereren die het beleid en de ontwikkeling van de particuliere sector kan informeren!

leerdoelen

  • Vaardigheid verwerven in data-analysetechnieken voor digitale hoogtegegevens.
  • Leer hoe u geospatiale gegevens en gerelateerde analysetools in Python kunt gebruiken.
  • Kennis opdoen van mappingtechnieken.
  • Ontwikkel vaardigheden in effectieve datavisualisatie voor communicatie.
  • Begrijp het belang van verhoging voor ongelijkheid en armoede.

Dit artikel is gepubliceerd als onderdeel van het Data Science-blogathon.

Inhoudsopgave

Wat zijn topografische kaarten?

Topografische kaarten zijn kaarten van het aardoppervlak die contourlijnen gebruiken voor visualisatie. Topografische kaarten zijn een waardevol hulpmiddel voor het navigeren op onbekend terrein en dienen als input voor stadsplanning en rampenbeheer. Ze worden vaak gebruikt om de ruimtelijke context van beleid of projecten in de particuliere sector rond infrastructuurontwikkeling te begrijpen, om gebieden te identificeren die kwetsbaar zijn voor natuurrampen of met beperkte toegang tot essentiële diensten, zoals onderwijs, gezondheidszorg en infrastructuur, of voor het beheer van natuurlijke hulpbronnen. Uiteindelijk kunnen deze kaarten dienen als input voor evidence-based besluitvorming. In deze blogpost zullen we Python gebruiken om een ​​topografische kaart te maken voor Nepal, een land met een heel interessante topografische omgeving.

Gegevensbeschrijving

Om onze kaart te genereren, vertrouwen we op gegevens die zijn gepubliceerd door de Geologisch onderzoek van de Verenigde Staten (USGS). USGS is een wetenschappelijk bureau van de federale overheid van de Verenigde Staten dat gegevens en onderzoek genereert rond natuurlijke hulpbronnen, geologie, geografie, watervoorraden en natuurlijke gevaren. Om bij hun te komen gegevenspagina, typ "USGS Data" in Google of klik op de link die u naar hun Earth Explorer leidt. De Earth Explorer is een online tool en gegevensportaal waarmee u een breed scala aan aardwetenschappelijke gegevens kunt zoeken, openen en downloaden. U moet een account aanmaken en inloggen om de gegevens volledig te gebruiken.

Gegevens downloaden

Deze blogpost zal Nepal als voorbeeld gebruiken vanwege zijn unieke topografische kenmerken. Nepal heeft een van de meest uitdagende en interessante topografieën ter wereld. 8 van de 14 bergen boven de 8,000 m liggen in Nepal (Trektocht Nepal), en het land is verdeeld in drie zeer verschillende topografische regio's: de bergen, heuvels en Terai (of vlakten) (DHS). Hoewel deze kenmerken het land uniek en interessant maken, blijkt uit sommige onderzoeken dat de topografie van Nepal het een uitdaging maakt om het land te verbinden, essentiële diensten aan de bevolking te leveren en risico's en belemmeringen op te werpen voor een duurzaam ontwikkelingstraject.

Daartoe filteren we in de Zoekcriteria, zoals aangegeven in onderstaande afbeelding. Nadat we Nepal hadden geselecteerd, hebben we onze interessante dataset geselecteerd. Klik hiervoor op de gegevens Sets tab en kies Digitale hoogte. Er zijn verschillende opties voor digitale hoogtegegevens en hoewel u meerdere van deze gegevenssets kunt gebruiken, gebruiken we de Global Multi-resolution Terrain Elevation Data 2010 GMTED2010 gegevens. Deze gegevens bieden een wereldwijde dekking van het terrein van de aarde met meerdere resoluties (variërend van 7.5 boogseconden (ongeveer 250 meter) tot 30 boogseconden (ongeveer 1 kilometer)). Het wordt gegenereerd op basis van teledetectiegegevens in de ruimte en in de lucht, waaronder satelliethoogtemeting, stereobeelden en topografische kaarten.

Nadat u de gegevens hebt gekozen, klikt u op de Resultaten tabblad. U kunt nu de gegevens downloaden door op het symbool met te klikken download opties. Ook de gegevens weergeven via de voetspoor icoon. We downloaden de gegevens in de hoogste resolutie (7.5 boogseconden). Belangrijk is dat we, om heel Nepal te dekken, twee verschillende mozaïeken (delen) van de onderliggende gegevens moeten downloaden en deze later moeten combineren. U zult zien dat de resulterende dataset in een tif formaat, dat rastergegevens aangeeft.

Topografische kaart | Python

Python biedt verschillende tools voor geospatiale analyse. In deze blogpost vertrouwen we op de Rasterio bibliotheek die het mogelijk maakt om geospatiale rastergegevens (gerasterde gegevens) te lezen en te schrijven. Laten we aan de slag gaan en het eerste mozaïek (deel) lezen van de gegevens die we eerder in onze Jupyter Notebook hebben gedownload:

#import relevant libraries (after installing them)
import rasterio
import matplotlib.pyplot as plt
import numpy as np #Read the data and show the shape of the dataset
file = rasterio.open(r'path10n060e_20101117_gmted_mea075.tif')
dataset = file.read()
print(dataset.shape)

Laten we ook het tweede mozaïek uploaden en combineren door ze samen te voegen. Hiertoe volgen we standaard technieken voor het lezen en manipuleren van rastergegevens in Python als volgt:

#Upload second dataset and show the shape of the dataset
file2 = rasterio.open(r'path30n060e_20101117_gmted_mea075.tif')
dataset2 = file2.read()
print(dataset2.shape) #Combine both datasets
from rasterio.merge import merge
from rasterio.plot import show #Create empty list
src_files_to_mosaic = [] #Append the list with both files
src_files_to_mosaic.append(file)
src_files_to_mosaic.append(file2)
src_files_to_mosaic #Merge both files
mosaic, out_trans = merge(src_files_to_mosaic) # Copy Metadata
output_meta = file.meta.copy() #Update Metadata
output_meta.update( {"driver": "GTiff", "height": mosaic.shape[1], "width": mosaic.shape[2], "transform": out_trans, }
) #Write to destination
# Write the mosaic raster to disk
out_fp = r"pathNepal_Mosaic.tif" with rasterio.open(out_fp, "w", **output_meta) as dest: dest.write(mosaic) #Open the combined raster data
file_mosaic = rasterio.open(out_fp) #Read the data
dataset_mosaic = file_mosaic.read()
print(file_mosaic.shape) #Show the data
plt.imshow(dataset_mosaic[0], cmap='Spectral')
plt.show()
Topografische kaart | Python

Wereldwijde terreinhoogtegegevens met meerdere resoluties

We hebben nu een gecombineerde Global Multi-resolution Terrain Elevation Data 2010 GMTED2010 gegevens voor heel Nepal, maar het bestand beslaat ook grote delen van de omgeving die niet tot Nepal behoren. Laten we het gebied beperken tot Nepal door een shapefile van Nepal te gebruiken. We gebruiken een shapefile met landsgrenzen voor de wereld. U kunt deze dataset downloaden hier. Laten we dan de rastergegevens en het shapefile knippen met behulp van de maskeren functie. We gebruiken alleen de eerste rij van het shapefile en de geometriekolom. Het resultaat van deze bewerking wordt opgeslagen in afgekapte_array, wat de bijgesneden rastergegevens zijn, en afgekapt_transform, die de transformatie-informatie van het bijgesneden raster vertegenwoordigt.

import geopandas as gpd
from shapely.geometry import mapping
from rasterio import mask as msk#import csv #Upload shapefile with country boarders of the world
df = gpd.read_file(r'path/world-administrative-boundaries.shp') #Restrict to Nepal
nepal = df.loc[df.name=="Nepal"]
nepal.head() #Clip data
clipped_array, clipped_transform = msk.mask(file_mosaic, [mapping(nepal.iloc[0].geometry)], crop=True) #

Er is nog één probleem. De geen gegevens waarden in rastergegevens zijn zeer schadelijk. Daarom zou de visualisatie van onze kaart worden verstoord, aangezien deze deel uitmaken van het waardebereik.

Begrijp het probleem

Laten we dit probleem als volgt oplossen, zoals beschreven in deze blog post:

  • Laten we een functie bouwen die zorgt voor geen gegevens waarden. Wij construeren een geen gegevens parameter om de waarde op te geven die wordt beschouwd als "geen gegevens" in de geknipte array. In dit geval is het ingesteld op (np.amax(clipped_array[0]) + 1), wat betekent dat het gelijk is aan de maximale waarde in de geclipte array plus één. Deze waarde wordt beschouwd als de waarde "geen gegevens".
  • Pas de geknipte array aan door de absolute waarde van de minimumwaarde in de geknipte array toe te voegen aan de eerste band (index 0) van de geknipte array. Deze stap zorgt ervoor dat alle waarden in de geknipte array niet-negatief worden.
  • We berekenen ook het waardebereik van de geknipte array. Het voegt de maximale en absolute waarde van de minimale waarde in de geknipte array toe. De waardebereik variabele houdt het berekende waardebereik vast.
  • Gebruik een handmatig samengesteld kleurwaardewoordenboek op basis van een bestaand woordenboek (het seismisch one) en definieer onze achtergrondkleur voor de waarden "geen gegevens".
  • In de laatste stap plotten we de kaart met het nieuwe kleurenbereik genaamd new_seismic.
#Let's investigate no data values nodata_value = file_mosaic.nodata print("Nodata value:", nodata_value)
#Nodata value: -32768.0 #Change value of nodata to one more than the maximum elevation def clip_raster(gdf, img): clipped_array, clipped_transform = msk.mask(img, [mapping(gdf.iloc[0].geometry)], crop=True) clipped_array, clipped_transform = msk.mask(img, [mapping(gdf.iloc[0].geometry)], crop=True, nodata=(np.amax(clipped_array[0]) + 1)) clipped_array[0] = clipped_array[0] + abs(np.amin(clipped_array)) value_range = np.amax(clipped_array) + abs(np.amin(clipped_array)) return clipped_array, value_range nepal_topography, value_range = clip_raster(nepal, file_mosaic) #Check that this worked
print(value_range) #Let's give the nodata value a new background color
from matplotlib import cm
from matplotlib.colors import ListedColormap,LinearSegmentedColormap #Sesmic
new_seismic = cm.get_cmap('seismic', 8828) #Define background color
background_color = np.array([0.9882352941176471, 0.9647058823529412, 0.9607843137254902, 1.0]) #Use color map
newcolors = new_seismic(np.linspace(0, 1, 8828)) # Add the background color as the last row to the newcolors array.
newcolors = np.vstack((newcolors, background_color)) #Use new Italy Color Map
new_seismic = ListedColormap(newcolors) #Create final map and save
plt.figure(figsize=(10,10))
c = plt.imshow(nepal_topography[0], cmap = new_seismic)
clb = plt.colorbar(c, shrink=0.4)
clb.ax.set_title('Elevation (meters)',fontsize=10) plt.savefig(r'pathTopographic_Map_Nepal.png', bbox_inches='tight')
plt.show()
Topografische kaart | Python

Voila! We hebben een topografische kaart van Nepal die duidelijk de verschillende hoogtes in het land en de drie topografische zones aangeeft.

Conclusie

Je hebt geleerd om een ​​topografische kaart te genereren in Python met behulp van geospatiale gegevens uit de Geologisch onderzoek van de Verenigde Staten (USGS). Je hebt ook geleerd hoe belangrijk het is om te zorgen voor ontbrekende waarden in de uiteindelijke dataset voor visualisatie.

Beleidsmakers of praktijkmensen kunnen deze kaart nu gebruiken voor verdere analyse, zoals het combineren met andere kaarten, zoals kaarten van armoede of natuurrampen, om te analyseren of er een verband is. We hebben een waardevolle tool ontwikkeld die evidence-based besluitvorming in de politiek kan ondersteunen!

Key Takeaways

  • Topografische kaarten zijn handige hulpmiddelen voor empirisch onderbouwde besluitvorming.
  • Topografie en hoogte spelen een cruciale rol in stadsplanning, dienstverlening en ongelijkheid.
  • Python heeft handige tools voor het analyseren van georuimtelijke gegevens.
  • Het is cruciaal voor visualisatie om geen gegevenswaarden in dit type gegevens op te nemen.
  • Het visualiseren van geospatiale gegevens kan waardevolle informatie op gedesaggregeerde niveaus genereren.

Ik hoop dat je dit artikel informatief vond. Neem gerust contact met mij op LinkedIn. Laten we contact maken en werken aan het benutten van gegevens voor positieve verandering.

Veelgestelde Vragen / FAQ

Q1. Wat staat er op een topografische kaart?

A. Topografische kaarten geven een uitgebreide weergave van een specifieke geografische regio en bieden nauwkeurige informatie over natuurlijke en menselijke elementen. Ze geven de kenmerken van het terrein weer, inclusief bergen, valleien en vlaktes, met behulp van contourlijnen, die punten aangeven die even hoog boven zeeniveau liggen. Topografische kaarten bieden een gedetailleerd overzicht van de kenmerken van het land, waardoor gebruikers de vorm en hoogte nauwkeurig kunnen begrijpen.

Q2. Waar wordt een topografische kaart voor gebruikt?

A. Topografie heeft tot doel verschillende kenmerken en punten op het aardoppervlak nauwkeurig te lokaliseren met behulp van een horizontaal coördinatensysteem zoals breedtegraad, lengtegraad en hoogte. Het omvat het bepalen van posities, het benoemen van geïdentificeerde kenmerken en het identificeren van gemeenschappelijke patronen van landvormen. Topografie probeert de ruimtelijke ordening en kenmerken van de kenmerken van het aardoppervlak te begrijpen en weer te geven.

Q3. Wat is georuimtelijke analyse in Python?

A. Geospatiale analyse in Python omvat het gebruik van de Python-programmeertaal en gespecialiseerde bibliotheken om met geospatiale gegevens te werken en deze te analyseren. Geospatiale gegevens omvatten informatie over de kenmerken en gebeurtenissen van de aarde, inclusief geografische posities, ruimtelijke verbindingen en kenmerken die verband houden met deze locaties.

Q4. Wat is de GMTED2010-dataset?

A. De GMTED2010-dataset profiteert van de beschikbaarheid van hoogtegegevens van hogere kwaliteit die zijn verkregen uit verschillende bronnen, zoals de Shuttle Radar Topography Mission (SRTM), Canadese hoogtegegevens, Spot 5 Reference3D-gegevens en de Ice, Cloud en land Elevation Satellite (ICESat). Deze nieuwe bronnen dragen bij aan verbeterde nauwkeurigheid en dekking van wereldwijde topografische gegevens. GMTED2010 vertegenwoordigt een aanzienlijke vooruitgang op het gebied van wereldwijde topografische gegevens, waardoor verschillende geospatiale analyses mogelijk zijn en veel belangrijke toepassingen worden ondersteund.

De in dit artikel getoonde media zijn geen eigendom van Analytics Vidhya en worden naar goeddunken van de auteur gebruikt.

spot_img

Laatste intelligentie

spot_img