我为一个城市下载了相应的openstreetmap数据。我想获得纬度和经度的最大值和最小值。我怎样才能做到这一点?
我的方法如下:
import osmread as osm
#...
def _parse_map(self):
geo = [(entity.lat, entity.lon) for entity in osm.parse_file('map.osm') if isinstance(entity, osm.Node)]
return max(geo[0]), min(geo[0]), max(geo[1]), min(geo[1])
但是当我打印这些值时,我认为它们并不正确。当我从OpenStreetMap网站下载该区域时,我有一个白色区域,表明我正在导出哪个区域。对于这个区域,我还得到了纬度和经度的最小值和最大值。而这些值与我从简单脚本中得到的值不合适。
我做错了什么?
答案 0 :(得分:2)
return max(geo[0]), min(geo[0]), max(geo[1]), min(geo[1])
你正在考虑geo
的第一和第二要素的极值。但是geo
是一个2元组的列表。因此,第一个元素geo[0]
是由第一个节点的entity.lat
和entity.lon
组成的2元组。因此,您只需为一个节点选择纬度和经度的最小值/最大值。
如果要将列表中每个元组的第一个(第二个)元素提供给聚合函数,则必须专门选择这些元素。例如,使用生成器:
return max(x[0] for x in geo), min(x[0] for x in geo), max(x[1] for x in geo), min(x[1] for x in geo)