我想在地图上找到许多地方之间的所有距离。为此,我使用Mapbox's Distance API,它接受最多100个坐标对的列表,并返回它们之间的距离矩阵。 所以如果你给它:
{
"coordinates": [
[13.41894, 52.50055],
[14.10293, 52.50055],
[13.50116, 53.10293]
]
}
它将返回如下矩阵:
^{pr2}$所以,因为我不能发送所有6000个位置的请求,所以我必须分段进行。经过几次尝试,我想出了一个解决方案:
下面是Python中的工作玩具代码(没有实际的API调用,位置用数字表示):
import itertools
import random
def get_set(s, rsample_size):
m_set = set([x[0] for x in s] + [x[1] for x in s])
if len(m_set) < rsample_size:
rsample_size = len(m_set)
sampled = random.sample(set(m_set), rsample_size) #sampling
return sampled, rsample_size
#all place features, but just numbers here
master = set(range(500))
#all possible permutations between them
master_combinations = set(itertools.permutations(master, 2))
print 'len of original combinations list', len(master_combinations)
c = 0
#API call limit
smpl_size = 100
while len(master_combinations) > 0:
print 'start iter: ', c, '\t remaining combinations: ', len(master_combinations)
#sampling 100 random locations
combs, smpl_size = get_set(master_combinations, smpl_size)
#a set of all possible permutations of above 100
combs = set(itertools.permutations(combs, 2))
#subtracting calculated pairs from all possible pairs
master_combinations = master_combinations.difference(combs)
c += 1
上面的例子在132-140个调用中查找所有可能的500个元素对之间的距离。我有两个问题:
我的问题是,既然我显然是粗暴地逼迫我通过这个列表,那么是否有一个更优雅和更有效的方法来解决这个问题?在
我在想也许:
任何想法都将不胜感激。谢谢!在
目前没有回答
相关问题 更多 >
编程相关推荐