为什么 OSMnx 足迹没有填满整个图像?
Why are OSMnx footprints not filling up the entire image?
我正在使用 here 提供的辅助函数,对距离和颜色进行了一些修改。我在没有更改的情况下进行了尝试,结果相同。我注意到如果我使用 'natural' 标签,水路会延伸超过图形,但我没有在这些中使用它,只有 'building'.
正在使用的代码:
import osmnx as ox
from IPython.display import Image
ox.config(log_console=True, use_cache=True)
bgcolor="#343434"
edge_color="#FFB0E2"
bldg_color="#F4FF6E"
point = (40.7154,-73.9853)
place = 'New York City, NY'
dist = 3000
dpi = 100
# helper funcion to get one-square-mile street networks, building.
footprints, and plot them
def make_plot(place, point, dist, network_type='all',
bldg_color=bldg_color, dpi=dpi,
default_width=0.5,
street_widths = {
"footway": 0.25,
"steps": 0.25,
"pedestrian": 0.25,
"service": 0.25,
"path": 0.25,
"track": 0.25,
"primary": 1,
"secondary": 0.5,
"motorway": 2 ,
}):
tags = {
#'amenity':True,
'building':True,
#'geological':True,
#'historic':True,
#'landuse':['retail', 'commercial'],
#'natural':True,
#'waterway':True,
}
gdf = ox.geometries.geometries_from_point(center_point=point,
tags=tags, dist=dist)
fig, ax = ox.plot.plot_figure_ground(point=point, dist=dist,
network_type=network_type,
default_width=default_width,
street_widths=street_widths,
edge_color=edge_color ,save=False, show=False,
close=True, bgcolor=bgcolor)
fig, ax = ox.plot.plot_footprints(gdf, ax=ax, color=bldg_color,
save=True, show=False, close=True,
filepath="images/us_cities/{}-dist{}-
dpi{}.png".format(place,dist,dpi), dpi=dpi)
make_plot(place, point, dist)
示例输出:
足迹没有延伸到图像的边缘。图像顶部和底部的空白边距
图像左右边距,足迹未延伸到边缘。
大边距和足迹未填满图像。我在生成地图时注意到日志中有一些东西;创建了两个不同大小的 bbox。它们在下面的日志条目中以粗体显示:
2020-10-04 11:37:28 已配置 osmnx 2020-10-04 11:37:28 已创建
bbox 3000 m 来自(40.7154,-73.9853):
40.74237961006479,40.68842038993522,-73.9497049233066,-74.02089507669339
2020-10-04 11:37:28 将 GeoDataFrame 投影到 +proj=utm +zone=18
+ellps=WGS84 +datum=WGS84 +units=m +no_defs +type=crs
2020-10-04 11:37:28 将 GeoDataFrame 投影到 epsg:4326
2020-10-04 11:37:28 在 1 中从 API 请求多边形内的数据
请求
2020-10-04 11:37:29 在制作 HTTP 之前暂停 0 秒 POST
请求
-
2020-10-04 11:37:37 从立交桥下载了 25,341.0KB-api.de 2020-10-04 11:37:39 已保存对缓存文件的响应“cache/5c31a2f980a9dc4969b2dd7541ef5eff.json"
2020-10-04 11:37:39 在 1 个请求中从 API 获得了多边形内的所有几何数据
2020-10-04 11:37:39 JSON 响应中的 196787 个元素(包括每个节点)。
2020-10-04 11:37:39 将元素转换为几何图形
2020-10-04 11:37:42 没有为 https://www.openstreetmap.org/relation/7774552
创建外部多边形
2020-10-04 11:37:42 字典中创建了30055个几何图形
2020-10-04 11:37:42 删除了 376 个未标记的几何图形
2020-10-04 11:37:53 为 29679 个几何图形创建了 r-tree 空间索引
2020-10-04 11:37:54 在多边形内识别出 29669 个几何图形
2020-10-04 11:37:54 10 个几何形状被多边形过滤器移除
2020-10-04 11:37:54 标签过滤器删除了 413 个几何图形
2020-10-04 11:37:56 最终 GeoDataFrame 中的 29265 个几何图形
2020-10-04 11:37:56 从 (40.7154, -73.9853) 创建了 bbox 3600.0 m: 40.747775532077746,40.68302446792226,-73.94258592,-797 74.02801409203207
2020-10-04 11:37:57 将 GeoDataFrame 投影到 +proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs +类型=crs
2020-10-04 11:37:57 将 GeoDataFrame 投影到 epsg:4326
2020-10-04 11:37:57 将 GeoDataFrame 投影到 +proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs +类型=crs
2020-10-04 11:37:57 将 GeoDataFrame 投影到 epsg:4326
2020-10-04 11:37:57 在 1 个请求中从 API 请求多边形内的数据
2020-10-04 11:37:57 在发出 HTTP POST 请求之前暂停 0 秒
简短的回答是您在最后调用 plot_footprints
,但没有向它传递 bbox
参数。因此,根据 the docs,它根据几何的空间范围计算要显示的图形边界框。一些与您的查询区域相交的几何形状也远远超出了它。创建一个匹配您的查询区域的 bbox 并将其传递给绘图函数。
这是一个简化但完整的工作示例。
import osmnx as ox
ox.config(log_console=True, use_cache=True)
bgcolor = '#343434'
edge_color = '#FFB0E2'
bldg_color = '#F4FF6E'
point = (40.7154,-73.9853)
dist = 3000
bbox = ox.utils_geo.bbox_from_point(point, dist=dist)
fp = ox.geometries_from_point(point, tags={'building':True}, dist=dist)
G = ox.graph_from_point(point, network_type='drive', dist=dist, truncate_by_edge=True, retain_all=True)
fig, ax = ox.plot_graph(G, bgcolor=bgcolor, node_size=0, edge_color=edge_color, show=False)
fig, ax = ox.plot_footprints(fp, ax=ax, bbox=bbox, color=bldg_color, save=True)
我正在使用 here 提供的辅助函数,对距离和颜色进行了一些修改。我在没有更改的情况下进行了尝试,结果相同。我注意到如果我使用 'natural' 标签,水路会延伸超过图形,但我没有在这些中使用它,只有 'building'.
正在使用的代码:
import osmnx as ox
from IPython.display import Image
ox.config(log_console=True, use_cache=True)
bgcolor="#343434"
edge_color="#FFB0E2"
bldg_color="#F4FF6E"
point = (40.7154,-73.9853)
place = 'New York City, NY'
dist = 3000
dpi = 100
# helper funcion to get one-square-mile street networks, building.
footprints, and plot them
def make_plot(place, point, dist, network_type='all',
bldg_color=bldg_color, dpi=dpi,
default_width=0.5,
street_widths = {
"footway": 0.25,
"steps": 0.25,
"pedestrian": 0.25,
"service": 0.25,
"path": 0.25,
"track": 0.25,
"primary": 1,
"secondary": 0.5,
"motorway": 2 ,
}):
tags = {
#'amenity':True,
'building':True,
#'geological':True,
#'historic':True,
#'landuse':['retail', 'commercial'],
#'natural':True,
#'waterway':True,
}
gdf = ox.geometries.geometries_from_point(center_point=point,
tags=tags, dist=dist)
fig, ax = ox.plot.plot_figure_ground(point=point, dist=dist,
network_type=network_type,
default_width=default_width,
street_widths=street_widths,
edge_color=edge_color ,save=False, show=False,
close=True, bgcolor=bgcolor)
fig, ax = ox.plot.plot_footprints(gdf, ax=ax, color=bldg_color,
save=True, show=False, close=True,
filepath="images/us_cities/{}-dist{}-
dpi{}.png".format(place,dist,dpi), dpi=dpi)
make_plot(place, point, dist)
示例输出:
足迹没有延伸到图像的边缘。图像顶部和底部的空白边距
图像左右边距,足迹未延伸到边缘。
大边距和足迹未填满图像。我在生成地图时注意到日志中有一些东西;创建了两个不同大小的 bbox。它们在下面的日志条目中以粗体显示:
2020-10-04 11:37:28 已配置 osmnx 2020-10-04 11:37:28 已创建
bbox 3000 m 来自(40.7154,-73.9853): 40.74237961006479,40.68842038993522,-73.9497049233066,-74.020895076693392020-10-04 11:37:28 将 GeoDataFrame 投影到 +proj=utm +zone=18
+ellps=WGS84 +datum=WGS84 +units=m +no_defs +type=crs2020-10-04 11:37:28 将 GeoDataFrame 投影到 epsg:4326
2020-10-04 11:37:28 在 1 中从 API 请求多边形内的数据 请求
2020-10-04 11:37:29 在制作 HTTP 之前暂停 0 秒 POST 请求
2020-10-04 11:37:37 从立交桥下载了 25,341.0KB-api.de 2020-10-04 11:37:39 已保存对缓存文件的响应“cache/5c31a2f980a9dc4969b2dd7541ef5eff.json"
2020-10-04 11:37:39 在 1 个请求中从 API 获得了多边形内的所有几何数据
2020-10-04 11:37:39 JSON 响应中的 196787 个元素(包括每个节点)。
2020-10-04 11:37:39 将元素转换为几何图形
2020-10-04 11:37:42 没有为 https://www.openstreetmap.org/relation/7774552
创建外部多边形2020-10-04 11:37:42 字典中创建了30055个几何图形
2020-10-04 11:37:42 删除了 376 个未标记的几何图形
2020-10-04 11:37:53 为 29679 个几何图形创建了 r-tree 空间索引
2020-10-04 11:37:54 在多边形内识别出 29669 个几何图形
2020-10-04 11:37:54 10 个几何形状被多边形过滤器移除
2020-10-04 11:37:54 标签过滤器删除了 413 个几何图形
2020-10-04 11:37:56 最终 GeoDataFrame 中的 29265 个几何图形
2020-10-04 11:37:56 从 (40.7154, -73.9853) 创建了 bbox 3600.0 m: 40.747775532077746,40.68302446792226,-73.94258592,-797 74.02801409203207
2020-10-04 11:37:57 将 GeoDataFrame 投影到 +proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs +类型=crs
2020-10-04 11:37:57 将 GeoDataFrame 投影到 epsg:4326
2020-10-04 11:37:57 将 GeoDataFrame 投影到 +proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs +类型=crs
2020-10-04 11:37:57 将 GeoDataFrame 投影到 epsg:4326
2020-10-04 11:37:57 在 1 个请求中从 API 请求多边形内的数据
2020-10-04 11:37:57 在发出 HTTP POST 请求之前暂停 0 秒
简短的回答是您在最后调用 plot_footprints
,但没有向它传递 bbox
参数。因此,根据 the docs,它根据几何的空间范围计算要显示的图形边界框。一些与您的查询区域相交的几何形状也远远超出了它。创建一个匹配您的查询区域的 bbox 并将其传递给绘图函数。
这是一个简化但完整的工作示例。
import osmnx as ox
ox.config(log_console=True, use_cache=True)
bgcolor = '#343434'
edge_color = '#FFB0E2'
bldg_color = '#F4FF6E'
point = (40.7154,-73.9853)
dist = 3000
bbox = ox.utils_geo.bbox_from_point(point, dist=dist)
fp = ox.geometries_from_point(point, tags={'building':True}, dist=dist)
G = ox.graph_from_point(point, network_type='drive', dist=dist, truncate_by_edge=True, retain_all=True)
fig, ax = ox.plot_graph(G, bgcolor=bgcolor, node_size=0, edge_color=edge_color, show=False)
fig, ax = ox.plot_footprints(fp, ax=ax, bbox=bbox, color=bldg_color, save=True)