Mehr

Zählen Sie die Anzahl der Punkte in einem (Multi-)Polygon formschön?

Zählen Sie die Anzahl der Punkte in einem (Multi-)Polygon formschön?


Ich verwende Python, Shapely und Fiona, um einige Shapefiles zu verarbeiten.

Gibt es eine einfache Möglichkeit, die Anzahl der Punkte in einem Polygon/Multipolygon in Shapely und Fiona zu zählen?


1) Mit Fiona brauchen Sie nicht formschön, um die Anzahl der Punkte in einem Polygon/Multipolygon zu zählen. Verwenden Sie einfach das resultierende GeoJSON-Format (= ein Python-Wörterbuch).

Polygon einfach:

>>> import fiona >>> shape = fiona.open("simplePoly.shp") >>> # erstes Feature >>> feature = shape.next() >>> geom = feature['geometry'] >>> print geom {'type': 'Polygon', 'coordinates': [[(1.0, 1.0), (1.0, 7.0), (7.0, 7.0), (7.0, 1.0), (1.0, 1.0)]]} > >> print geom['coordinates'] [[(1.0, 1.0), (1.0, 7.0), (7.0, 7.0), (7.0, 1.0), (1.0, 1.0)]] >>> print len(geom[ 'coordinates']) 1 # -> nur ein Polygon >>> print "Anzahl Punkte =", len(geom['koordinaten'][0]) Anzahl Punkte = 5

oder einfach:

>>> shape = fiona.open("simplePoly.shp") >>> print "Anzahl der Punkte =", len(shape.next()['geometry']['coordinates'][0] Anzahl der Punkte = 5

Polygon mit einem Loch

>>> shape = fiona.open("Poly_hole.shp") >>> geom = shape.next()['geometry']['coordinates'] [[(1.0, 1.0), (1.0, 7.0), ( 7.0, 7.0), (7.0, 1.0), (1.0, 1.0)], [(2.0, 3.0), (4.0, 3.0), (4.0, 5.0), (2.0, 5.0), (2.0, 3.0)]] >>> print len(geom) 2 # -> Polygon und 1 Loch >>> print "Anzahl äußerer Punkte =", len(geom)[0]) Anzahl äußerer Punkte =5 >>> print "Anzahl innen Punkte =", len(geom)[1]) Anzahl der inneren Punkte =5

MultiPolygon

>>> shape = fiona.open("multiPoly.shp") >>> geom = shape.next()['geometry']['coordinates'] >>> print geom {'type': 'MultiPolygon', ' Koordinaten“: [[[(1.0, 1.0), (1.0, 7.0), (7.0, 7.0), (7.0, 1.0), (1.0, 1.0)]], [[(2.0, 3.0), (4.0, 3.0 ), (4.0, 5.0), (2.0, 5.0), (2.0, 3.0)]]]} >>> print "Anzahl der Punkte =", sum([len(poly[0]) für Poly in Geom]) Anzahl der Punkte =10

Die Lösung ist also

if shape.next()['geometry']['type'] == 'Polygon': if len(shape.next()['geometry']) == 1: # -> Polygon einfach if len(shape. next()['geometry']) > 1: # -> Polygon mit Löchern if shape.next()['geometry']['type'] == 'MultiPolygon': # -> Multipolygon

2) Wenn Sie die Lösung von Againstflow mit Fiona und Shapely verwenden möchten, verwenden Sie das ShapelygestaltenFunktion (Python Geo Interface):

>>> aus shapely.geometry import shape >>> shape = fiona.open("simplePoly.shp") >>> geom_shapely = shape(shape.next()) >>> print type(geom_shapely)  >>> drucken geom_shapely POLYGON ((1 1, 1 7, 7 7, 7 1, 1 1))

Sie können die äußeren und inneren Punktkoordinaten des Polygons auf diese Weise erhalten:

def Extract_poly_coords(geom): if geom.type == 'Polygon': external_coords = geom.exterior.coords[:] interior_coords = [] für Interieur in geom.interiors: interior_coords += interior.coords[:] elif geom.type == 'MultiPolygon': external_coords = [] interior_coords = [] for part in geom: epc = Extract_poly_coords(part) # Rekursiver Aufruf Exterior_coords += epc['exterior_coords'] interior_coords += epc['interior_coords'] else: raise ValueErr ('Unbehandelter Geometrietyp: ' + repr(geom.type)) return {'exterior_coords': external_coords, 'interior_coords': interior_coords}

Dann können Sie zum Beispiel alle Außenkoordinaten zählen:

polyPoints = len(exterior_coords);

Leider bietet Shapely nicht die Funktionalität, sofort alle Punkte aus einem MultiPolygon-Objekt zu extrahieren. Stattdessen müssten Sie erstens über einzelne Polygone eines MultiPolygon iterieren und zweitens einzelne Punkte jedes Polygons extrahieren.

Man könnte verschiedene Wege finden, um das Problem anzugehen. Wenn Sie beispielsweise wissen, dass keines Ihrer Polygone Löcher hat, können Sie einfach Folgendes tun:

Beachten Sie das [:-1], das das Duplizieren des ersten Scheitelpunkts verhindert. Sie können es entfernen, wenn Sie eine sauberere Syntax wünschen und keinen doppelten Punkt für jedes Polygon haben möchten.
Dies kann auch mit List Comprehension mit zwei Schleifen in eine Zeile geschrieben werden:

Wenn die Polygone Löcher enthalten können, können wir im Allgemeinen zum Beispiel die folgende Funktion schreiben, um Koordinaten aus den inneren Ringen zu extrahieren:

Man könnte noch weiter gehen und dies für jede beliebige Eingabegeometrie verallgemeinern (Python ≥3.7):


Zählen Sie die Anzahl der Punkte in einem (Multi-)Polygon formschön? - Geografisches Informationssystem

Аствовать есплатно

Dieser Kurs soll die Studierenden in CyberGIS – Geospatial Information Science and Systems (GIS) – basierend auf fortschrittlicher Cyberinfrastruktur sowie in den Stand der Technik in High-Performance Computing, Big Data und Cloud Computing im Kontext der Geodatenwissenschaft einführen . Der Schwerpunkt liegt auf dem Erlernen der neuesten Fortschritte von CyberGIS und den zugrunde liegenden Prinzipien der Geodatenwissenschaft.

Олучаемые навыки

Geovisualisierung, Python-Programmierung, Geodatenwissenschaft, Geographische Informationssysteme (GIS), CyberGIS

Modul 3: Manipulation von Geodaten und eine Einführung in die Zähmung von Big Data mit Hadoop

In diesem Modul erhalten die Studierenden zunächst eine Einführung in Techniken zur Manipulation von Geoobjekten mithilfe von Geobibliotheken in Python. Insbesondere lernen wir, wie man sowohl Vektor- als auch Rasterdatenobjekte mit Shapely- und RasterIO-Bibliotheken manipuliert. Als Nächstes werden die Schüler in die Verwendung des Hadoop-Paradigmas zur Zähmung großer Geodaten eingeführt. Konkret lernen wir die Grundlagen der Verarbeitung von Big Spatial Data mit Hadoop. Die Teilnehmer erhalten eine kurze Einführung in das Hadoop-Framework, seine Hauptkomponenten und seine Eigenschaften und lernen das Hadoop Distributed File System (HDFS), seine Architektur und einfache Befehle für die Interaktion mit ihm kennen. Wir lernen auch das MapReduce-Computing-Paradigma kennen und sehen ein Beispiel dafür, wie es mithilfe der Hadoop-Streaming-API angewendet werden kann, um New Yorker Taxidaten zu verarbeiten.


Punkt im Polygon für konvexe Polygone

Ein konvexes Polygon ist ein Polygon, bei dem alle Innenwinkel kleiner als 180° sind, d. h. alle Scheitelpunkte zeigen vom Inneren des Polygons weg.

Wir besprechen dies separat, da die häufigsten Arten von Polygonen, die in der Computervision vorkommen, konvexe Polygone sind. Dazu gehören alle Dreiecke, Quadrate, Parallelogramme, Trapeze usw.

Algorithmus: Bei einem konvexen Polygon, wenn die Seiten des Polygons als Pfad von einem beliebigen Scheitelpunkt aus betrachtet werden können. Ein Abfragepunkt liegt dann innerhalb des Polygons, wenn er auf derselben Seite aller Liniensegmente liegt, aus denen der Pfad besteht. Dies ist im Diagramm unten zu sehen.

Um herauszufinden, auf welcher Seite des Liniensegments der Punkt liegt, können wir den Punkt einfach in die Gleichung des Liniensegments einsetzen. Beispielsweise kann für die von (x1, y1) und (x2, y2) gebildete Linie der Abfragepunkt (xp,yp) wie folgt ersetzt werden:

Wenn das Segment gegen den Uhrzeigersinn betrachtet wird, ist das Ergebnis:

  1. Ergebnis > 0: Abfragepunkt liegt links von der Linie.
  2. Ergebnis = 0: Abfragepunkt liegt auf der Linie.
  3. Ergebnis < 0: Abfragepunkt liegt rechts von der Linie.
  1. replace_point_in_line():Diese Funktion berechnet, auf welcher Seite der Linie der Punkt liegt.
  2. is_point_inside_convex_polygon():Dies ist der vollständige Algorithmus und berechnet, ob ein Punkt Innerhalb, draußen oder an ein konvexes Polygon, wenn die Eckpunkte des Polygons entweder im oder gegen den Uhrzeigersinn vorliegen.

Wie zuvor besprochen, würde ein Punkt in einem konvexen Polygon auch Fälle abdecken wie

Zusammenfassend haben wir behandelt, wie Sie die Windungsnummer für ein Polygon finden und damit herausfinden, ob der Punkt innerhalb, auf oder außerhalb des Polygons liegt. Wir haben auch eine einfachere Lösung gesehen, die auf konvexe Polygone angewendet werden kann, um PIP zu lösen.

Bitte kontaktieren Sie mich, wenn Sie Fragen haben und hoffen, dass Ihnen die Mathematik gefallen hat.


Kreuzungsberechnung optimieren

Der größte Engpass des gesamten hier besprochenen Codes ist die Berechnung von Schnittpunkten. Jede Straße wird mit jeder anderen Straße im Netz verglichen, sodass die Anzahl der Operationen exponentiell mit der Anzahl der Straßen wächst. Da es in Philadelphia 130.000 Straßen gibt, führt dies zu über 8 Milliarden Kreuzungskontrollen. Und in einer größeren Region wie den Philippinen wird die Zahl der Kreuzungskontrollen viel größer.

Der naive Ansatz, jede Straße gegen jede andere zu prüfen, ist sehr ineffizient und kann erheblich verbessert werden, indem die Kreuzungsprüfungen lokalisierter gemacht werden. Beispielsweise muss nicht nach der Kreuzung zweier Straßen gesucht werden, die sehr weit voneinander entfernt sind. Ein Ansatz, dies zu verbessern, besteht darin, den Bereich in ein Raster von Kacheln aufzuteilen und die Schnittfunktion für jede Kachel separat auszuführen. Dann werden die Kreuzungsprüfungen lokalisiert und die Anzahl der Operationen drastisch reduziert.

Darüber hinaus eignet sich die Beschränkung von Schnittmengenoperationen auf eine Kachel gut für die Mehrfachverarbeitung — jede Kachel kann parallel verarbeitet werden.

Der folgende Code erstellt einen Kacheliterator, indem er die Anzahl der X- und Y-Unterteilungen mithilfe der konfigurierten maximalen Kacheleinheiten ermittelt. Ein räumlicher Straßenindex wird erstellt, um schnell feststellen zu können, welche Straßen sich in jeder Kachel befinden. Dann wird der Straßenindex mit jeder Kachelgrenze geschnitten, um den Satz von Straßen in jeder Kachel zu sammeln, und ein Straßenwert für Kacheln wird erhalten.

Multiprocessing wird dann verwendet, um die Kacheln parallel zu verarbeiten. Zuerst wird ein Multiprocessing-Pool von Workern erstellt, der der Anzahl der Kerne entspricht. Dann wird die Kreuzungsberechnung auf jedem Straßensatz ausgeführt, bis der Iterator erschöpft ist. Sobald alle Arbeiten abgeschlossen sind, wird die Liste der Mehrfachpunkte in eine Liste von Einzelpunkten abgeflacht, und die Puffer werden vereinigt, um Überlappungen zu entfernen.


Syntax

Die zu vereinfachenden Eingabe-Polygon-Features.

Die vereinfachte Ausgabe-Polygon-Feature-Class. Es enthält alle Felder, die in der Eingabe-Feature-Class vorhanden sind. Die Ausgabe-Polygon-Feature-Class ist topologisch korrekt. Das Werkzeug führt keine Topologiefehler ein, aber topologische Fehler in den Eingabedaten werden in der Ausgabe-Polygon-Feature-Class gekennzeichnet.

Die Ausgabe-Feature-Class enthält zwei zusätzliche Felder, InPoly_FID und SimPgnFlag , die die Eingabe-Feature-IDs bzw. die topologischen Eingabefehler oder Diskrepanzen enthalten.

  • SimPgnFlag = 0 zeigt an, dass keine Fehler vorliegen.
  • SimPgnFlag = 1 zeigt an, dass ein topologischer Fehler vorliegt.
  • SimPgnFlag = 2 zeigt Features an, die durch eine Partition geteilt wurden und nun nach der Vereinfachung unter der minimalen Fläche liegen. Das Flag kann nur auf einem Teil des Split-Features erscheinen. Diese Features werden alle in der Ausgabe-Feature-Class beibehalten. Diese Situation tritt nur auf, wenn die Umgebungseinstellung Kartografische Partitionen verwendet wird.

Gibt den Polygonvereinfachungsalgorithmus an.

  • POINT_REMOVE —Behält kritische Punkte bei, die die wesentliche Form eines Polygonumrisses beibehalten, und entfernt alle anderen Punkte (Douglas-Peucker). Dies ist die Standardeinstellung.
  • BEND_SIMPLIFY — Behält die kritischen Biegungen bei und entfernt überflüssige Biegungen aus einer Linie (Wang-Müller).
  • WEIGHTED_AREA —Behält Scheitelpunkte bei, die Dreiecke der effektiven Fläche bilden, die nach Dreiecksform (Zhou-Jones) gewichtet wurden.
  • EFFECTIVE_AREA — Behält Scheitelpunkte bei, die Dreiecke der effektiven Fläche bilden (Visvalingam-Whyatt).

Die Toleranz bestimmt den Grad der Vereinfachung. Sie können eine bevorzugte Einheit wählen, andernfalls werden die Einheiten der Eingabe verwendet. Die Felder MinSimpTol und MaxSimpTol werden der Ausgabe hinzugefügt, um die Toleranz zu speichern, die bei der Verarbeitung verwendet wurde.

  • Für den POINT_REMOVE-Algorithmus ist die Toleranz der maximal zulässige senkrechte Abstand zwischen jedem Scheitelpunkt und der neu erstellten Linie.
  • Für den BEND_SIMPLIFY-Algorithmus ist die Toleranz der Durchmesser eines Kreises, der sich einer signifikanten Biegung annähert.
  • Für den Algorithmus WEIGHTED_AREA ist das Toleranzquadrat die Fläche eines signifikanten Dreiecks, das durch drei benachbarte Scheitelpunkte definiert wird. Je weiter ein Dreieck vom gleichseitigen Dreieck abweicht, desto höher wird es gewichtet und desto unwahrscheinlicher wird es entfernt.
  • Für den EFFECTIVE_AREA-Algorithmus ist das Toleranzquadrat die Fläche eines signifikanten Dreiecks, das durch drei benachbarte Scheitelpunkte definiert wird.

Die Mindestfläche für ein Polygon, die beibehalten werden soll. Der Standardwert ist Null, dh alle Polygone werden beibehalten. Sie können eine bevorzugte Einheit für den angegebenen Wert auswählen, andernfalls werden die Einheiten der Eingabe verwendet.

Vermächtnis:

Dies ist ein Legacy-Parameter, der nicht mehr verwendet wird. Früher wurde damit festgelegt, wie mit bei der Verarbeitung möglicherweise eingeführten topologischen Fehlern umgegangen wird. Dieser Parameter ist aus Kompatibilitätsgründen in Skripten und Modellen immer noch in der Syntax des Tools enthalten, wird jedoch im Dialogfeld des Tools ausgeblendet.

Gibt an, ob eine Ausgabe-Point-Feature-Class erstellt werden soll, um die Mittelpunkte aller Polygone zu speichern, die entfernt werden, weil sie kleiner als der Parameter minimum_area sind. Die Punktausgabe wird abgeleitet und erhält denselben Namen wie die Polygonausgabe-Feature-Class, die Sie im Parameter out_feature_class angeben, jedoch mit dem Suffix _Pnt, das sich im selben Ordner befindet.

  • KEEP_COLLAPSED_POINTS —Zeigt die Mittelpunkte von Polygonen auf, die entfernt werden, weil sie unter der Mindestfläche in einer abgeleiteten Ausgabe-Point-Feature-Class liegen. Dies ist die Standardeinstellung.
  • NO_KEEP —Erstellen Sie keine abgeleitete Ausgabe-Point-Feature-Class.

Die Eingaben, die Funktionen enthalten, dienen als Barrieren zur Vereinfachung. Die resultierenden vereinfachten Polygone berühren oder überschreiten keine Barriere-Features. Wenn beispielsweise bewaldete Gebiete vereinfacht werden, kreuzen die resultierenden vereinfachten Waldpolygone keine als Barrieren definierten Straßen-Features.

Abgeleitete Ausgabe

Wenn der Parameter Eingeklappte Punkte beibehalten (collapsed_point_option in Python) verwendet wird, wird eine Ausgabe-Point-Feature-Class erstellt, um Punkte zu speichern, die alle Polygone darstellen, die entfernt wurden, weil sie unter der Mindestfläche liegen


Verwendungszweck

Punkte (ein SpatialPoints*-Objekt oder eine zweispaltige Matrix (oder data.frame)), SpatialLines*, SpatialPolygons* oder ein Extent-Objekt

Zahlen oder Zeichen. Der/die zu übertragende(n) Wert(e). Dies kann eine einzelne Zahl oder ein Zahlenvektor sein, der die gleiche Länge wie die Anzahl der räumlichen Features (Punkte, Linien, Polygone) hat. Wenn x ein Spatial*DataFrame ist, kann dies der Spaltenname der zu übertragenden Variablen sein. Wenn er fehlt, wird der Attributindex verwendet (d. h. Zahlen von 1 bis zur Anzahl der Merkmale). Sie können auch einen Vektor mit derselben Länge wie die Anzahl der räumlichen Features bereitstellen oder eine Matrix, bei der die Anzahl der Zeilen der Anzahl der räumlichen Features entspricht

Funktion oder Charakter. Um zu bestimmen, welche Werte Zellen zugewiesen werden sollen, die von mehreren räumlichen Features bedeckt sind. Sie können Funktionen wie min, max oder mean oder einen der folgenden Zeichenwerte verwenden: 'first' , 'last' , 'count' . Der Standardwert ist 'letzter' . Bei SpatialLines* ist auch 'Länge' erlaubt (derzeit nur für planare Koordinatensysteme).

Wenn x Punkte darstellt, muss fun ein na.rm-Argument akzeptieren, entweder explizit oder durch 'Punkte'. Dies bedeutet, dass fun=length fehlschlägt, fun=function(x. )length(x) jedoch funktioniert, obwohl das Argument na.rm ignoriert wird. Um das Argument na.rm zu verwenden, können Sie eine Funktion wie diese verwenden: fun=function(x, na.rm)if (na.rm) length(na.omit(x)) else (length(x), oder verwenden Sie a Funktion, die NA-Werte in allen Fällen entfernt, wie diese Funktion zum Berechnen der Anzahl der eindeutigen Werte pro Rasterzelle "Richness": fun=function(x, . ) . Wenn Sie die Anzahl der Punkte in jeder Rasterzelle zählen möchten, können Sie fun='count' oder fun=function(x. ) verwenden. .

Sie können auch mehrere Funktionen mit einer Anweisung wie fun=function(x, . ) c(length(x),mean(x)) übergeben. In diesem Fall ist das zurückgegebene Objekt ein RasterBrick (mehrere Ebenen).

numerisch. Wert, der in die Zellen eingefügt werden soll, die von keinem der Features von x abgedeckt werden. Standard ist NA

logisch. Bei TRUE werden die Werte des Eingabe-Raster-Objekts durch die räumlichen Merkmale von x 'maskiert'. Das heißt, Zellen, die sich räumlich mit den räumlichen Features überlappen, behalten ihre Werte, die anderen Zellen werden zu NA . Der Standardwert ist FALSE . Diese Option kann nicht verwendet werden, wenn update=TRUE

logisch. Bei TRUE werden die Werte des Raster*-Objekts für die Zellen aktualisiert, die die räumlichen Features von x überlappen. Der Standardwert ist FALSE . Kann nicht verwendet werden, wenn mask=TRUE

numerisch (normalerweise eine ganze Zahl) oder Zeichen. Nur relevant bei update=TRUE . Wählen Sie anhand ihrer Werte die Zellen aus, die mit den Werten der räumlichen Features aktualisiert werden sollen. Gültige Zeichenwerte sind 'all' , 'NA' und '!NA' . Standard ist 'alle'

Charakter. Ausgabedateiname (optional)

Bei TRUE werden NA-Werte entfernt, wenn fun das na.rm-Argument berücksichtigt

logisch. Bei TRUE wird der von den Polygonen bedeckte Bruchteil jeder Gitterzelle zurückgegeben (und die Werte von field, fun, mask und update werden ignoriert. Der abgedeckte Bruchteil wird geschätzt, indem jede Zelle in 100 Unterzellen unterteilt und Anwesenheit/Abwesenheit bestimmt wird des Polygons in der Mitte jeder Unterzelle

Logisch. Bei TRUE wird die Rückmeldung über die Polygonanzahl unterdrückt. Standard ist FALSE


Zählen Sie die Anzahl der Punkte in einem (Multi-)Polygon formschön? - Geografisches Informationssystem

Finden Sie bei einem Polygon und einem Punkt ‘p’ heraus, ob ‘p’ innerhalb des Polygons liegt oder nicht. Die am Rand liegenden Punkte werden als innen betrachtet.

Wir empfehlen dringend, zuerst den folgenden Beitrag zu lesen.
Wie überprüfe ich, ob sich zwei gegebene Liniensegmente schneiden?
Es folgt eine einfache Idee, um zu überprüfen, ob ein Punkt innen oder außen liegt.

Wie behandelt man Punkt ‘g’ in der obigen Abbildung?
Beachten Sie, dass wir true zurückgeben sollten, wenn der Punkt auf der Linie liegt oder mit einem der Eckpunkte des angegebenen Polygons übereinstimmt. Um dies zu handhaben, prüfen wir, nachdem wir überprüft haben, ob sich die Linie von ‘p’ zum Extrem schneidet, ob ‘p’ mit den Scheitelpunkten der aktuellen Polygonlinie kolinear ist. Wenn es coliear ist, prüfen wir, ob der Punkt ‘p’ auf der aktuellen Seite des Polygons liegt, wenn er liegt, geben wir true zurück, sonst false.


Osmnx.graph-Modul¶

osmnx.graph. graph_from_address ( die Anschrift, dist=1000, dist_type='bbox', network_type='all_private', vereinfachen=Wahr, keep_all=Falsch, truncate_by_edge=Falsch, return_coords=Falsch, clean_periphery=Wahr, custom_filter=Keine ) ¶

Erstellen Sie ein Diagramm von OSM in einiger Entfernung von einer Adresse.

  • die Anschrift (Schnur) – die zu geocodierende Adresse, die als zentraler Punkt für die Erstellung des Graphen verwendet werden soll
  • dist (int) – behalte nur die Knoten innerhalb dieser vielen Meter um die Mitte des Graphen bei
  • dist_type (Zeichenfolge <"Netzwerk","bbox">) – Bei „bbox“ werden nur die Knoten innerhalb eines Begrenzungsrahmens des Abstandsparameters beibehalten. Bei "Netzwerk" werden nur die Knoten innerhalb einer gewissen Netzwerkentfernung vom am weitesten in der Mitte befindlichen Knoten beibehalten (erfordert, dass scikit-learn als optionale Abhängigkeit installiert ist).
  • Netzwerkart (Zeichenfolge <"all_private","all","fahrrad","fahren","drive_service","walk">) – Welche Art von Straßennetz soll erhalten werden, wenn custom_filter None ist
  • vereinfachen (bool) – wenn True, vereinfachen Sie die Graphtopologie mit der Funktion simple_graph
  • behalten_all (bool) – bei True den gesamten Graphen zurückgeben, auch wenn er nicht verbunden ist. andernfalls behalten Sie nur die größte schwach verbundene Komponente bei.
  • truncate_by_edge (bool) – wenn True, Knoten außerhalb des Begrenzungsrahmens beibehalten, wenn mindestens einer der Nachbarn des Knotens innerhalb des Begrenzungsrahmens liegt
  • return_coords (bool) – optional auch die geokodierten Koordinaten der Adresse zurückgeben
  • saubere_peripherie (bool,) – wenn True, puffern Sie 500 m, um einen Graphen zu erhalten, der größer als angefordert ist, dann vereinfachen Sie ihn und kürzen Sie ihn dann auf die angeforderten räumlichen Grenzen
  • benutzerdefinierte Filter (Schnur) – ein benutzerdefinierter Filter, der anstelle der Voreinstellungen für network_type verwendet werden soll, z. B. ‘[“power”

networkx.MultiDiGraph oder optional (networkx.MultiDiGraph, (lat, lng))

Sie können das Overpass-Server-Timeout, die Speicherzuweisung und andere benutzerdefinierte Einstellungen über ox.config() konfigurieren.

osmnx.graph. graph_from_bbox ( Norden, Süd, Ost, Westen, network_type='all_private', vereinfachen=Wahr, keep_all=Falsch, truncate_by_edge=Falsch, clean_periphery=Wahr, custom_filter=Keine ) ¶

Erstellen Sie ein Diagramm aus OSM innerhalb eines Begrenzungsrahmens.

  • Norden (schweben) – nördlicher Breitengrad des Begrenzungsrahmens
  • Süd (schweben) – südlicher Breitengrad des Begrenzungsrahmens
  • Ost (schweben) – östlicher Längengrad des Begrenzungsrahmens
  • Westen (schweben) – westlicher Längengrad des Begrenzungsrahmens
  • Netzwerkart (Zeichenfolge <"all_private","all","fahrrad","fahren","drive_service","walk">) – Welche Art von Straßennetz soll erhalten werden, wenn custom_filter None ist
  • vereinfachen (bool) – wenn True, vereinfachen Sie die Graphtopologie mit der Funktion simple_graph
  • behalten_all (bool) – bei True den gesamten Graphen zurückgeben, auch wenn er nicht verbunden ist. andernfalls behalten Sie nur die größte schwach verbundene Komponente bei.
  • truncate_by_edge (bool) – wenn True, Knoten außerhalb des Begrenzungsrahmens beibehalten, wenn sich mindestens einer der Nachbarn des Knotens innerhalb des Begrenzungsrahmens befindet
  • saubere_peripherie (bool) – wenn True, puffern Sie 500 m, um einen Graphen zu erhalten, der größer als angefordert ist, dann vereinfachen Sie ihn und kürzen Sie ihn dann auf die angeforderten räumlichen Grenzen
  • benutzerdefinierte Filter (Schnur) – ein benutzerdefinierter Filter, der anstelle der Voreinstellungen für network_type verwendet werden soll, z. B. ‘[“power”

Sie können das Overpass-Server-Timeout, die Speicherzuweisung und andere benutzerdefinierte Einstellungen über ox.config() konfigurieren.

osmnx.graph. graph_from_place ( Anfrage, network_type='all_private', vereinfachen=Wahr, keep_all=Falsch, truncate_by_edge=Falsch, which_result=Keine, buffer_dist=Keine, clean_periphery=Wahr, custom_filter=Keine ) ¶

Erstellen Sie ein Diagramm aus OSM innerhalb der Grenzen einiger geokodierbarer Orte.

Die Abfrage muss geokodierbar sein und OSM muss Polygongrenzen für das Geokodierungsergebnis haben. Wenn OSM kein Polygon für diesen Ort hat, können Sie stattdessen sein Straßennetz mit der Funktion graph_from_address abrufen, die den Ortsnamen zu einem Punkt geokodiert und das Netzwerk in einiger Entfernung von diesem Punkt abruft.

Wenn OSM Polygongrenzen für diesen Ort hat, Sie ihn aber nicht finden, versuchen Sie, die Abfragezeichenfolge zu variieren, übergeben Sie ein strukturiertes Abfragedikt oder ändern Sie das Argument what_result, um ein anderes Geokodierungsergebnis zu verwenden. Wenn Sie die OSM-ID des Ortes kennen, können Sie sein Begrenzungspolygon mit der Funktion geocode_to_gdf abrufen und dann an die Funktion graph_from_polygon übergeben.

  • Anfrage (Schnuroderdiktierenoderaufführen) – die Abfrage oder Abfragen zum Geokodieren, um Ortsgrenzpolygon(e) zu erhalten
  • Netzwerkart (Zeichenfolge <"all_private","all","fahrrad","fahren","drive_service","walk">) – Welche Art von Straßennetz soll erhalten werden, wenn custom_filter None ist
  • vereinfachen (bool) – wenn True, vereinfachen Sie die Graphtopologie mit der Funktion simple_graph
  • behalten_all (bool) – bei True den gesamten Graphen zurückgeben, auch wenn er nicht verbunden ist. andernfalls behalten Sie nur die größte schwach verbundene Komponente bei.
  • truncate_by_edge (bool) – wenn True, Knoten außerhalb des Begrenzungspolygons beibehalten, wenn mindestens einer der Nachbarn des Knotens innerhalb des Polygons liegt
  • welches_ergebnis (int) – welches Geokodierungsergebnis verwendet werden soll. Wenn Keine, wählen Sie automatisch das erste (Multi)Polygon aus oder geben Sie einen Fehler aus, wenn OSM keinen zurückgibt.
  • buffer_dist (schweben) – Abstand zum Puffer um die Platzgeometrie, in Metern
  • saubere_peripherie (bool) – wenn True, puffern Sie 500 m, um einen Graphen zu erhalten, der größer als angefordert ist, dann vereinfachen Sie ihn und kürzen Sie ihn dann auf die angeforderten räumlichen Grenzen
  • benutzerdefinierte Filter (Schnur) – ein benutzerdefinierter Filter, der anstelle der Voreinstellungen für network_type verwendet werden soll, z. B. ‘[“power”

Sie können das Overpass-Server-Timeout, die Speicherzuweisung und andere benutzerdefinierte Einstellungen über ox.config() konfigurieren.

osmnx.graph. graph_from_point ( Mittelpunkt, dist=1000, dist_type='bbox', network_type='all_private', vereinfachen=Wahr, keep_all=Falsch, truncate_by_edge=Falsch, clean_periphery=Wahr, custom_filter=Keine ) ¶

Erstellen Sie einen Graphen von OSM in einiger Entfernung von einem (lat, lng) Punkt.

  • Mittelpunkt (Tupel) – der (lat, lng) Mittelpunkt, um den der Graph konstruiert werden soll
  • dist (int) – Behalten Sie nur die Knoten innerhalb dieser vielen Meter von der Mitte des Diagramms bei, wobei die Entfernung gemäß dem Argument dist_type bestimmt wird
  • dist_type (Zeichenfolge <"Netzwerk","bbox">) – Bei „bbox“ behalten Sie nur die Knoten innerhalb eines Begrenzungsrahmens des Abstandsparameters bei. Bei "Netzwerk" werden nur die Knoten innerhalb einer gewissen Netzwerkentfernung vom am weitesten in der Mitte befindlichen Knoten beibehalten (erfordert, dass scikit-learn als optionale Abhängigkeit installiert ist).
  • Netzwerkart (Schnur,<"all_private","all","fahrrad","fahren","drive_service","walk">) – Welche Art von Straßennetz soll erhalten werden, wenn custom_filter None ist
  • vereinfachen (bool) – wenn True, vereinfachen Sie die Graphtopologie mit der Funktion simple_graph
  • behalten_all (bool) – bei True den gesamten Graphen zurückgeben, auch wenn er nicht verbunden ist. andernfalls behalten Sie nur die größte schwach verbundene Komponente bei.
  • truncate_by_edge (bool) – wenn True, Knoten außerhalb des Begrenzungsrahmens beibehalten, wenn mindestens einer der Nachbarn des Knotens innerhalb des Begrenzungsrahmens liegt
  • saubere_peripherie (bool,) – wenn True, puffern Sie 500 m, um einen Graphen zu erhalten, der größer als angefordert ist, dann vereinfachen Sie ihn und kürzen Sie ihn dann auf die angeforderten räumlichen Grenzen
  • benutzerdefinierte Filter (Schnur) – ein benutzerdefinierter Filter, der anstelle der Voreinstellungen für network_type verwendet werden soll, z. B. ‘[“power”

Sie können das Overpass-Server-Timeout, die Speicherzuweisung und andere benutzerdefinierte Einstellungen über ox.config() konfigurieren.

osmnx.graph. graph_from_polygon ( Polygon, network_type='all_private', vereinfachen=Wahr, keep_all=Falsch, truncate_by_edge=Falsch, clean_periphery=Wahr, custom_filter=Keine ) ¶

Erstellen Sie ein Diagramm aus OSM innerhalb der Grenzen eines formschönen Polygons.

  • Polygon (formschöne.geometrie.Polygonoderformschöne.geometrie.MultiPolygon) – das Shape zum Abrufen von Netzwerkdaten. Koordinaten sollten in nicht projizierten Breiten-Längen-Graden angegeben werden (EPSG:4326).
  • Netzwerkart (Zeichenfolge <"all_private","all","fahrrad","fahren","drive_service","walk">) – Welche Art von Straßennetz soll erhalten werden, wenn custom_filter None ist
  • vereinfachen (bool) – wenn True, vereinfachen Sie die Graphtopologie mit der Funktion simple_graph
  • behalten_all (bool) – bei True den gesamten Graphen zurückgeben, auch wenn er nicht verbunden ist. andernfalls behalten Sie nur die größte schwach verbundene Komponente bei.
  • truncate_by_edge (bool) – wenn True, Knoten außerhalb des Begrenzungspolygons beibehalten, wenn mindestens einer der Nachbarn des Knotens innerhalb des Polygons liegt
  • saubere_peripherie (bool) – Wenn True, puffern Sie 500 m, um einen Graphen zu erhalten, der größer als angefordert ist, dann vereinfachen Sie ihn und kürzen Sie ihn dann auf die angeforderten räumlichen Grenzen
  • benutzerdefinierte Filter (Schnur) – ein benutzerdefinierter Filter, der anstelle der Voreinstellungen für network_type verwendet werden soll, z. B. ‘[“power”

Sie können das Overpass-Server-Timeout, die Speicherzuweisung und andere benutzerdefinierte Einstellungen über ox.config() konfigurieren.

osmnx.graph. graph_from_xml ( Dateipfad, bidirektional=Falsch, vereinfachen=Wahr, keep_all=Falsch ) ¶

Erstellen Sie ein Diagramm aus Daten in einer .osm-formatierten XML-Datei.

  • Dateipfad (Schnuroderpathlib.Pfad) – Pfad zur Datei mit OSM XML-Daten
  • bidirektional (bool) – bei True bidirektionale Kanten für Einbahnstraßen erstellen
  • vereinfachen (bool) – wenn True, vereinfachen Sie die Graphtopologie mit der Funktion simple_graph
  • behalten_all (bool) – bei True den gesamten Graphen zurückgeben, auch wenn er nicht verbunden ist. andernfalls behalten Sie nur die größte schwach verbundene Komponente bei.

Geopandas-Grundlagen

Geopandas ist eine Bibliothek zur Manipulation räumlicher Daten. Der Unterschied zwischen Geopandas und Pandas besteht darin, dass ein GeoDataFrame eine GeoSeries mit räumlichen Daten enthält. Der Name dieser GeoSeries ist oft „Geometrie“. Diese räumlichen Daten haben ein Koordinatenreferenzsystem (CRS), typischerweise EPGS: 4326 nicht projizierte geographische Koordinaten, d. h. Breitengrad/Längengrad. Für räumliche Analysen oder Messungen muss das CRS in ein projiziertes CRS geändert werden. In dieser Klasse verwenden wir EPSG:3857 WGS84 Web Mercator (Auxiliary Sphere) mit Einheiten in Metern.

Die Geopandas-Bibliothek ist NICHT Teil der Anaconda-Anwendung, daher müssen Sie sie vor der Verwendung in Ihrer Umgebung installieren.

Geben Sie im Terminalfenster ein conda install -c conda-forge geopandas.

Es gibt zwei gängige Formate für Geodatensätze, nämlich GeoJSON und SHP. Die einfachste Methode, um festzustellen, ob ein geöffnetes Dataset ein Geo-Dataset ist (das Koordinaten enthält), besteht darin, zu ermitteln, ob es in eines dieser Formate exportiert werden kann.

Die geöffneten Datensätze in diesem Beispiel sind im GeoJSON-Format. Darüber hinaus ist die Plattform für die offenen Datensätze in diesem Beispiel SOCRATA. Spätere Übungen werden mit ArcGIS REST-Services und dem Census WMS funktionieren.

Die Stadt Buffalo, NY, verwendet Socrata als Plattform, um offene Daten bereitzustellen. Die Webadresse lautet https://data.buffalony.gov/.

Geodaten Bereitstellung von Standort- und ID-Informationen zu geografischen Merkmalen und Ereignissen. Attribute in diesen Datensätzen sind ziemlich begrenzt. Am häufigsten werden diese Datensätze in Kombination mit anderen Datensätzen verwendet. Beachten Sie, dass Geodatensätze vom Typ Karte sind.

Wenn Sie auf den Namen eines Geodatensatzes klicken, wird eine Karte der geografischen Merkmale angezeigt. Das Bild unten zeigt die Ergebnisse eines Klicks auf die Karte der Polizeibezirke von Buffalo. Die Bezirkspolygone werden über der Google-Grundkarte angezeigt. Wenn Sie auf ein Feature (Polygon) klicken, zeigt ein Popup die Attribute in der Datenbank an.

Wenn Sie auf klicken EXPORT Registerkarte sehen Sie, dass dieser Datensatz im Shapefile- oder GeoJson-Format exportiert werden kann.

Wenn Sie mit der Maus über eines dieser Formate fahren, mit der rechten Maustaste klicken - Linkadresse kopieren - können Sie die URL in eine Textzeichenfolge einfügen, um sie in einen Geodataframe einzulesen.


Schau das Video: Koordinatensystem schnell und einfach erklärt