获取OpenStreetMap映射的最大和最小值

时间:2014-01-31 17:22:49

标签: python openstreetmap

我为一个城市下载了相应的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网站下载该区域时,我有一个白色区域,表明我正在导出哪个区域。对于这个区域,我还得到了纬度和经度的最小值和最大值。而这些值与我从简单脚本中得到的值不合适。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

return max(geo[0]), min(geo[0]), max(geo[1]), min(geo[1])

你正在考虑geo的第一和第二要素的极值。但是geo是一个2元组的列表。因此,第一个元素geo[0]是由第一个节点的entity.latentity.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)