mirror of
https://github.com/marceloprates/prettymaps.git
synced 2025-09-01 02:22:00 +02:00
Added support for waterways and fetching by OSM Id
This commit is contained in:
@@ -18,6 +18,7 @@ from shapely.affinity import *
|
|||||||
from geopandas import GeoDataFrame
|
from geopandas import GeoDataFrame
|
||||||
|
|
||||||
# etc
|
# etc
|
||||||
|
import re
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
from functools import reduce
|
from functools import reduce
|
||||||
from tabulate import tabulate
|
from tabulate import tabulate
|
||||||
@@ -105,9 +106,11 @@ def plot_shapes(shapes, ax, vsketch = None, palette = None, **kwargs):
|
|||||||
|
|
||||||
# Parse query (by coordinates, OSMId or name)
|
# Parse query (by coordinates, OSMId or name)
|
||||||
def parse_query(query):
|
def parse_query(query):
|
||||||
if type(query) == tuple:
|
if type(query) in([Polygon, MultiPolygon]):
|
||||||
|
return 'polygon'
|
||||||
|
elif type(query) == tuple:
|
||||||
return 'coordinates'
|
return 'coordinates'
|
||||||
elif False:
|
elif re.match('''[A-Z][0-9]+''', query):
|
||||||
return 'osmid'
|
return 'osmid'
|
||||||
else:
|
else:
|
||||||
return 'address'
|
return 'address'
|
||||||
@@ -173,9 +176,8 @@ def plot(
|
|||||||
'radius': radius
|
'radius': radius
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
by_osmid = False
|
|
||||||
base_kwargs = {
|
base_kwargs = {
|
||||||
'perimeter': get_perimeter(query, by_osmid = by_osmid)
|
'perimeter': query if query_mode == 'polygon' else get_perimeter(query, by_osmid = query_mode == 'osmid')
|
||||||
}
|
}
|
||||||
|
|
||||||
# Fetch layers
|
# Fetch layers
|
||||||
|
@@ -80,7 +80,10 @@ def get_geometries(perimeter = None, point = None, radius = None, tags = {}, per
|
|||||||
return geometries
|
return geometries
|
||||||
|
|
||||||
# Get streets
|
# Get streets
|
||||||
def get_streets(perimeter = None, point = None, radius = None, width = 6, custom_filter = None, circle = True, dilate = 0):
|
def get_streets(perimeter = None, point = None, radius = None, layer = 'streets', width = 6, custom_filter = None, circle = True, dilate = 0):
|
||||||
|
|
||||||
|
if layer == 'streets':
|
||||||
|
layer = 'highway'
|
||||||
|
|
||||||
# Boundary defined by polygon (perimeter)
|
# Boundary defined by polygon (perimeter)
|
||||||
if perimeter is not None:
|
if perimeter is not None:
|
||||||
@@ -106,10 +109,10 @@ def get_streets(perimeter = None, point = None, radius = None, width = 6, custom
|
|||||||
streets = unary_union([
|
streets = unary_union([
|
||||||
# Dilate streets of each highway type == 'highway' using width 'w'
|
# Dilate streets of each highway type == 'highway' using width 'w'
|
||||||
MultiLineString(
|
MultiLineString(
|
||||||
streets[(streets.highway == highway) & (streets.geometry.type == 'LineString')].geometry.tolist() +
|
streets[(streets[layer] == highway) & (streets.geometry.type == 'LineString')].geometry.tolist() +
|
||||||
list(reduce(lambda x, y: x+y, [
|
list(reduce(lambda x, y: x+y, [
|
||||||
list(lines)
|
list(lines)
|
||||||
for lines in streets[(streets.highway == highway) & (streets.geometry.type == 'MultiLineString')].geometry
|
for lines in streets[(streets[layer] == highway) & (streets.geometry.type == 'MultiLineString')].geometry
|
||||||
], []))
|
], []))
|
||||||
).buffer(w)
|
).buffer(w)
|
||||||
for highway, w in width.items()
|
for highway, w in width.items()
|
||||||
@@ -139,8 +142,8 @@ def get_layer(layer, **kwargs):
|
|||||||
else:
|
else:
|
||||||
raise Exception("Either 'perimeter' or 'point' & 'radius' must be provided")
|
raise Exception("Either 'perimeter' or 'point' & 'radius' must be provided")
|
||||||
# Fetch streets or railway
|
# Fetch streets or railway
|
||||||
if layer in ['streets', 'railway']:
|
if layer in ['streets', 'railway', 'waterway']:
|
||||||
return get_streets(**kwargs)
|
return get_streets(**kwargs, layer = layer)
|
||||||
# Fetch geometries
|
# Fetch geometries
|
||||||
else:
|
else:
|
||||||
return get_geometries(**kwargs)
|
return get_geometries(**kwargs)
|
Reference in New Issue
Block a user