OSMNX给定经纬度坐标获取对应建筑外部坐标的问题咨询
经纬度查询最近建筑外轮廓坐标解决方案
你遇到的AttributeError: module 'osmnx' has no attribute 'pois_from_point'报错是因为该API为OSMnx v0.x版本的旧接口,v1.0及以上版本已经将POI/要素查询功能统一迁移到features模块,不再提供该旧方法。
完整实现代码
import osmnx as ox from shapely.geometry import Point # 配置OSMnx请求超时时间,可根据网络情况调整 ox.settings.timeout = 100 # 给定的目标经纬度坐标,OSMnx入参点格式为(纬度, 经度) target_point = (53.2588051, -2.124499) search_radius = 100 # 搜索半径,单位米,可根据周边建筑密度调整 # 查询指定半径范围内的所有建筑要素 buildings = ox.features_from_point( center_point=target_point, tags={"building": True}, dist=search_radius ) if len(buildings) == 0: print("当前搜索范围内无建筑,请调大search_radius值重试") else: # 构造shapely点计算距离,注意shapely的Point入参格式为(经度, 纬度) target_shapely_point = Point(target_point[1], target_point[0]) # 计算每个建筑到目标点的距离,筛选出最近的建筑 buildings['distance'] = buildings.geometry.distance(target_shapely_point) nearest_building = buildings.sort_values('distance').iloc[0] # 提取外轮廓坐标 polygon = nearest_building['geometry'] # 兼容多面几何类型,可根据业务需求调整多部分几何的处理逻辑 if polygon.geom_type == 'MultiPolygon': polygon = list(polygon.geoms)[0] exterior_coords = list(polygon.exterior.coords) print(exterior_coords)
注意事项
- 注意两种坐标参数格式的区别,不要写反经纬度顺序
- 如果单次查询无结果,可逐步增大搜索半径重试,避免周边建筑密度低导致匹配不到
- 示例中对MultiPolygon类型取了第一个面,你可以根据实际需求调整多部分几何的筛选逻辑
内容的提问来源于stack exchange,提问作者Ana
相关产品推荐
相关产品推荐

