【问题标题】:Geonames bounding box地名边界框
【发布时间】:2017-07-07 02:28:29
【问题描述】:

我使用 geonames API 来验证“字符串”是否是地点/位置。以下是我的代码的sn-p。

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

如您所见,我在搜索时添加了印度尼西亚的边界框。但令我惊讶的是,这段代码的结果是“真”,我们都知道波尔多位于法国。我的代码有问题吗?

【问题讨论】:

  • 您是否尝试过打印结果和结果,看看您所看到的是否有原因?
  • 是的,因此有一个“波尔多”条目。我的意思是这很奇怪。它本来就不应该在那里,因为我放了一个印度尼西亚的边界框。我的理解是,结果中出现的任何东西都应该是印度尼西亚边界的一个地方。显然,在印度尼西亚,我们没有一个叫波尔多的地方。

标签: python geonames


【解决方案1】:

使用国家代码代替坐标边界框,例如:

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 参数 - 当它们都应该是单独的值时,它会应用单个参数“东、西、南、北”。

要解决此问题,请在 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

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

【讨论】:

  • 我已经尝试过使用国家代码并且成功了。但我也收到了一些奇怪的结果,例如:“los”、“warung”等。这就是为什么我要指定一个边界框,以便只返回框中的位置。顺便说一句,您在边界框上的答案非常有效。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-09-12
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多