Geonames边界框

时间:2017-07-06 05:50:16

标签: python geonames

我使用geonames API来验证"字符串"是一个地方/位置。以下是我的代码片段。

import geonames.adapters.search

sa = geonames.adapters.search.Search(my_user_name)
result = sa.query('bordeaux').east_west_north_south_box([141.021805, 95.009331, 5.904417, -10.941861]).execute()

theresult = set()
for id_, name in result.get_flat_results():
    theresult.add(name.lower())
print 'bordeaux' in theresult

正如你所看到的,当我进行搜索时,我添加了一个印度尼西亚的边界框。但令我惊讶的是,这段代码的结果是" True"我们都知道波尔多位于法国。我的代码有问题吗?

1 个答案:

答案 0 :(得分:0)

使用国家/地区代码,而不是使用坐标边界框,例如:

result = sa.query('bordeaux').country('id').execute()

不返回任何结果,而:

result = sa.query('jakarta').country('id').execute()

返回一些适当的结果,如下所示:

result = sa.query('bordeaux').country('fr').execute()

还有:

result = sa.query('bordeaux').country('us').execute()

<强>更新

是否有一些研究和geonames_rdf库没有正确地将边界框参数转换为HTTP / REST参数 - 它应用单个参数&#34;东,西,南,北&#34;什么时候它们都应该是单独的价值观。

要解决此问题,请在c:\ python27 \ lib \ site-packages \ geonames \ adapters \ base.py中更改:

def east_west_north_south_box(self, value):
    return self.set_string_parameter('east,west,north,south', value)

to(适用于我的简单测试):

def east_west_north_south_box(self, value):
    for coord,val in zip(['east','west','north','south'],value):
        self.set_string_parameter(coord, val)
    return self

就个人而言,使用国家名称似乎比相当粗略的边界框更好。