首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用esy-osm-pbf中的纬度和经度值在Python中获取给定半径处的设施列表

使用esy-osm-pbf中的纬度和经度值在Python中获取给定半径处的设施列表
EN

Stack Overflow用户
提问于 2020-01-19 19:24:52
回答 1查看 417关注 0票数 3

我有一个数据集,其中包含一些元素的纬度和经度。我正在尝试获取特定纬度经度周围所有便利设施的信息。我已经使用了天桥查询,我能够提取便利设施。但是,我希望在python查询中使用直接下载的OSM.pbf文件。我可以使用以下查询提取特定纬度经度值的所有便利设施

代码语言:javascript
复制
import esy.osm.pbf
osm = esy.osm.pbf.File('california-latest.osm.pbf')
amenities = [entry for entry in osm if entry.tags.get('amenity')]

在此之后,我能够通过lonlat值并获得便利设施。我是否可以在代码中传递半径、经度和纬度值来获取所需的信息

使用天桥查询的代码。我想使用上面的方法复制以下代码

代码语言:javascript
复制
import overpy
amenities = [] 
for latitude,longitude in zip(Dataset_Sample.Latitude, Dataset_Sample.Longitude):
    overpass_query = """[out:json][timeout:25]; node["amenity"](around:1000.0,"""+ str(latitude) + "," +str(longitude)+"); out;"
    response = requests.get(overpass_url, params={'data': overpass_query})
    response_json = response.json()
    amenities.append([element['tags']['amenity'] for element in response_json['elements']])
EN

回答 1

Stack Overflow用户

发布于 2021-06-18 03:49:58

第一个元素展开对象的结构(esy.osm.pbf.file.Node):

代码语言:javascript
复制
amenities[0]

当您仔细观察时,您会发现tags本身就是Node对象中的一个dict

代码语言:javascript
复制
type(amenities[0].tags)    # := dict

longlat也是如此!(tuple inside Node):

代码语言:javascript
复制
type(amenities[0].longlat) # := tuple

因此,假设您正在寻找“确切的”坐标(long, lat),您只需运行以下代码:

代码语言:javascript
复制
for entry in osm :
   if entry.loglat == (long, lat)
       target = entry
       break

并且您已经在target中找到了您正在寻找的Node。我猜你已经明白了,并且知道如何寻找类似的坐标(使用regex等)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59809556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档