地名边界框
Geonames bounding box
我使用 geonames API 来验证 "string" 是否是 place/location。以下是我的代码片段。
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" 我们都知道波尔多位于法国。我的代码有问题吗?
不要使用坐标边界框,而是使用国家/地区代码,例如:
result = sa.query('bordeaux').country('id').execute()
returns 没有结果,而:
result = sa.query('jakarta').country('id').execute()
returns 一些适当的结果,如:
result = sa.query('bordeaux').country('fr').execute()
还有:
result = sa.query('bordeaux').country('us').execute()
更新:
做了一些研究,geonames_rdf 库没有将边界框参数正确转换为 HTTP/REST 参数 - 它应用了一个参数 "east,west,south,north",而它们应该都是单独的值.
要解决此问题,请在 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)
至(适用于我的简单测试):
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
就我个人而言,使用国家名称似乎比相当粗糙的边界框更可取。
我使用 geonames API 来验证 "string" 是否是 place/location。以下是我的代码片段。
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" 我们都知道波尔多位于法国。我的代码有问题吗?
不要使用坐标边界框,而是使用国家/地区代码,例如:
result = sa.query('bordeaux').country('id').execute()
returns 没有结果,而:
result = sa.query('jakarta').country('id').execute()
returns 一些适当的结果,如:
result = sa.query('bordeaux').country('fr').execute()
还有:
result = sa.query('bordeaux').country('us').execute()
更新:
做了一些研究,geonames_rdf 库没有将边界框参数正确转换为 HTTP/REST 参数 - 它应用了一个参数 "east,west,south,north",而它们应该都是单独的值.
要解决此问题,请在 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)
至(适用于我的简单测试):
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
就我个人而言,使用国家名称似乎比相当粗糙的边界框更可取。