mirror of
https://github.com/marceloprates/prettymaps.git
synced 2025-08-12 01:25:06 +02:00
catch empty response instead of failing
If a street is present in the layers with a custom filter that does not exist in the specified area, osmnx throws an exception and the whole plotting fails. I suggest catching the exception and just returning an empty `MultiLineString`. Maybe a warning could also be added, to inform that the requested street is not present in the result.
This commit is contained in:
@@ -2,6 +2,7 @@ from functools import reduce
|
|||||||
|
|
||||||
import osmnx as ox
|
import osmnx as ox
|
||||||
from osmnx import utils_geo
|
from osmnx import utils_geo
|
||||||
|
from osmnx._errors import EmptyOverpassResponse
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from shapely.geometry import Point, Polygon, MultiPolygon, MultiLineString
|
from shapely.geometry import Point, Polygon, MultiPolygon, MultiLineString
|
||||||
from shapely.ops import unary_union
|
from shapely.ops import unary_union
|
||||||
@@ -166,6 +167,7 @@ def get_streets(
|
|||||||
# Boundary defined by polygon (perimeter)
|
# Boundary defined by polygon (perimeter)
|
||||||
if perimeter is not None:
|
if perimeter is not None:
|
||||||
# Fetch streets data, project & convert to GDF
|
# Fetch streets data, project & convert to GDF
|
||||||
|
try:
|
||||||
streets = ox.graph_from_polygon(
|
streets = ox.graph_from_polygon(
|
||||||
unary_union(perimeter.geometry).buffer(buffer)
|
unary_union(perimeter.geometry).buffer(buffer)
|
||||||
if buffer > 0
|
if buffer > 0
|
||||||
@@ -174,9 +176,12 @@ def get_streets(
|
|||||||
)
|
)
|
||||||
streets = ox.project_graph(streets)
|
streets = ox.project_graph(streets)
|
||||||
streets = ox.graph_to_gdfs(streets, nodes=False)
|
streets = ox.graph_to_gdfs(streets, nodes=False)
|
||||||
|
except EmptyOverpassResponse:
|
||||||
|
return MultiLineString()
|
||||||
# Boundary defined by polygon (perimeter)
|
# Boundary defined by polygon (perimeter)
|
||||||
elif (point is not None) and (radius is not None):
|
elif (point is not None) and (radius is not None):
|
||||||
# Fetch streets data, save CRS & project
|
# Fetch streets data, save CRS & project
|
||||||
|
try:
|
||||||
streets = ox.graph_from_point(
|
streets = ox.graph_from_point(
|
||||||
point,
|
point,
|
||||||
dist=radius + dilate + buffer,
|
dist=radius + dilate + buffer,
|
||||||
@@ -192,6 +197,8 @@ def get_streets(
|
|||||||
# Intersect with perimeter & filter empty elements
|
# Intersect with perimeter & filter empty elements
|
||||||
streets.geometry = streets.geometry.intersection(perimeter)
|
streets.geometry = streets.geometry.intersection(perimeter)
|
||||||
streets = streets[~streets.geometry.is_empty]
|
streets = streets[~streets.geometry.is_empty]
|
||||||
|
except EmptyOverpassResponse:
|
||||||
|
return MultiLineString()
|
||||||
|
|
||||||
if type(width) == dict:
|
if type(width) == dict:
|
||||||
streets = unary_union(
|
streets = unary_union(
|
||||||
|
Reference in New Issue
Block a user