2017-07-07 3 views
1

Ich benutze Python 3.6, um eine Karte zu erstellen, die Niederschlagsdaten in Nordamerika anzeigt. Der Code, den ich bisher habe, extrahiert meine Daten innerhalb einer shapefile und plottet sie dann auf einer Karte.Python: Nur Teile eines Shapefiles verwenden

Mein Problem ist, dass die shapefile, die ich heruntergeladen habe enthält die Formen aller Kontinente. Ich habe mich gefragt, ob es einen Weg gibt, den ich nur auf dem nordamerikanischen Kontinent von meiner shapefile lesen konnte?

Wenn dies keine Möglichkeit ist, dann weiß jemand, wo ich eine shapefile herunterladen könnte, die nur Nordamerika hat? Vielen Dank!

Dies ist der Teil meines Code, der die shapefile lautet:

import shapefile 
sf=shapefile.Reader('continents') 

Dies ist die link für die Shape-Datei.

+0

Bitte fügen Sie weitere Details hinzu, um Ihnen zu helfen. Was hast du bisher versucht? Wie sieht dieses Shapefile aus, hat es irgendwelche Attribute, die helfen können (nicht nur einen Link teilen)? – DarkCygnus

+0

Ich habe versucht, den Namen des Kontinents am Ende der Shapefile hinzuzufügen. Zum Beispiel sf = shapefile.Reader ('Kontinente', 'Nordamerika') und sf = Shapefile.Reader ('Kontinente/Nordamerika'). Das ändert nichts, ich sehe immer noch nur eine Karte mit allen Kontinenten. Ich habe den Link in meine Frage eingefügt, damit Leute das Shapefile herunterladen können, das ich benutze, und die txt-Datei lesen, die alle Attribute enthält, da sie zu groß ist, um sie hier zu kopieren und einzufügen. @GrayCygnus – CPG

+0

Ich habe Ihr Shapefile heruntergeladen, ich arbeite gerade an einer Anzeige und posten es in Kürze. – DarkCygnus

Antwort

2

Wenn wir uns das von Ihnen erwähnte Shapefile ansehen, können wir sehen, dass es ein Attribut in seiner Attributtabelle hat (das ist "CONTINENT"). Deshalb brauchen wir für alle Formen suchen und diejenigen auswählen, die den Kontinent passen Sie wünschen (Nordamerika), wie folgt aus:

import shapefile 

#read the shapefile 
sf=shapefile.Reader('continent.shp') 

#obtain shapes and its records 
#the shapes are the actual coordinate points 
#the record contains all attributes related to each shape 
shape_records = sf.shapeRecords() 

#search for the ones with desired records 
#this shapefile has only one attribute calles CONTINENT 
desired_shapes = [] 
for s in shape_records: 
    if s.record[0] == 'North America': 
     desired_shapes.append(s.shape) 
     #or do whatever you want with that element s.shape is the actual shape 

Wenn Sie einen Blick auf this Seite nehmen möchten, dass die Verwendung von shapefile beschreibt. Es ist nützlich, ein Tool (wie QGis) zu verwenden, um zu sehen, welche Attribute Ihre Daten haben, damit Sie sie dann programmatisch erkennen können.

+1

Das funktioniert, danke! – CPG

+1

Großartig, du kannst auch [OSGEO] (https://pcjericks.github.io/py-gdalogr-cookbook/) überprüfen, um Shapefiles zu bearbeiten, es ist das, das ich momentan benutze, anstatt 'pyshp', da es mehr hat Optionen und Dokumentation. – DarkCygnus

Verwandte Themen