DPM
DPM

Reputation: 935

Get all nodes inside only one of the Polygons, OSMNX

I have a network formed with two Polygons and I want to now which nodes are only in the bigger Polygon. How can I do this?

Here is the code:

import osmnx as ox
import igraph as ig
import matplotlib.pyplot as plt
import pandas as pd
import networkx as nx

city = ['Portugal, Lisbon', 'Portugal, Amadora']
G = ox.graph_from_place(city, network_type='drive', simplify=True)
G_nx = nx.relabel.convert_node_labels_to_integers(G)
nodes, edges = ox.graph_to_gdfs(G_nx, nodes=True, edges=True)

Here are the Polygons: enter image description here

The smaller Polygon is Amadora and the other Lisbon

Upvotes: 0

Views: 1278

Answers (1)

gboeing
gboeing

Reputation: 6412

You are looking for a within spatial operation. Such an operation is elementary in spatial analysis, and as such, I would encourage you to carefully read the documentation of the tools you are using to understand their underlying concepts and usage. If working with OSMnx, this would include networkx (for network analysis) and geopandas (for spatial analysis). For example, the within method is described in detail and given usage examples in the geopandas documentation.

import osmnx as ox
ox.config(use_cache=True, log_console=True)

cities = ox.geocode_to_gdf(['Portugal, Lisbon', 'Portugal, Amadora'])
whole_polygon = cities.unary_union #unary union of both geometries
one_polygon = cities['geometry'].iloc[0] #geometry of just lisbon

G = ox.graph_from_polygon(whole_polygon, network_type='drive', simplify=True)
print(len(G)) #12811

# which nodes are within one_polygon?
nodes = ox.graph_to_gdfs(G, edges=False)
nodes_in_polygon = nodes[nodes.within(one_polygon)]
print(len(nodes_in_polygon)) #9734

Upvotes: 4

Related Questions