如何在Python中使用zip处理数组中的GPS坐标数据
批量处理GPS坐标字符串数组实现zip拆分
我有一段处理GPS坐标的Python代码,通过zip将一组坐标拆分为纬度和经度集合:
golden_gate_park = zip(*[ (55.87694550, 37.48297183), (55.87870300, 37.48198183), (55.87875750, 37.48202100), (55.87880417, 37.48206183), (55.87883250, 37.48209700), (55.87979000, 37.48279567), (55.87993383, 37.48277550), (55.88843017, 37.48345133), (55.89800350, 37.48674450), (55.89821033, 37.48673800) ])
现在我有一个存储坐标字符串的数组:
array = ['55.87694550 37.48297183', '55.87870300 37.48198183', '55.87875750 37.48202100', '55.87880417 37.48206183', '55.87883250 37.48209700', '55.87979000 37.48279567', '55.87993383 37.48277550', '55.88843017 37.48345133', '55.89800350 37.48674450', '55.89821033 37.48673800', '55.89841483 37.48671867', '55.89861500 37.48668800', '55.89881033 37.48664517']
目前我只能提取单个元素处理:
mapcoord1 = array[0].split(" ")[0] mapcoord2 = array[0].split(" ")[1] attractions_lats, attractions_lngs = zip(*{ (float(mapcoord1), float(mapcoord2)), })
请问如何实现批量处理数组中的所有数据?
解决方案
你可以先将数组内的每个字符串转换为(float, float)格式的坐标元组,再通过zip(*...)拆分纬度和经度集合,以下是两种简洁实现方式:
方式一:列表推导式分步处理
# 将所有坐标字符串转换为浮点型元组 coords = [tuple(map(float, s.split())) for s in array] # 拆分纬度和经度集合 attractions_lats, attractions_lngs = zip(*coords)
方式二:一步完成(无中间变量)
attractions_lats, attractions_lngs = zip(*(tuple(map(float, s.split())) for s in array))
代码逻辑说明
s.split():将单条坐标字符串按空格分割为两个字符串元素map(float, ...):把分割后的字符串转为浮点型数值tuple(...):将数值打包为元组,与你示例中的坐标格式统一zip(*coords):通过解包坐标列表,将所有元组的第一个元素(纬度)、第二个元素(经度)分别聚合,最终得到两个包含所有纬度、经度的元组
处理后attractions_lats会包含所有坐标的纬度值,attractions_lngs包含所有经度值,和你处理golden_gate_park的逻辑完全一致。
内容的提问来源于stack exchange,提问作者RADIO BUTIK
相关产品推荐
相关产品推荐

