如果我使用YQL了解城市的纬度和经度,如何获得城市的WOEID?
答案 0 :(得分:8)
对于那些仍然试图通过坐标查找WOEID的人来说,其他答案现在已经过时了。使用geo.placefinder
数据表查找纬度和经度,WOEID将在返回的结果中。
通过YQL:
SELECT * FROM geo.placefinder WHERE text="{$seedLat}, {$seedLon}" and gflags="R"
(Test it out on the YQL Console。)
通过REST:
http://query.yahooapis.com/v1/public/yql?q=SELECT%20*%20FROM%20geo.placefinder%20WHERE%20text%3D%22{$seedLat}%2C{$seedLon}%22%20and%20gflags%3D%22R%22
答案 1 :(得分:2)
您可以参考官方网页: http://developer.yahoo.com/boss/geo/docs/free_YQL.html
这是一个例外: 从geo.placefinder中选择*,其中text =“37.416275,-122.025092”和gflags =“R”
答案 2 :(得分:2)
看起来Yahoo已使geo.placefinder
表非公开,这意味着访问需要有效的应用程序ID和OAuth身份验证(请参阅Free Non-Commercial YQL Table Usage)。如果您只想要WOEID并且您知道城市和州,则可以使用geo.places
表来代替:
select * from geo.places where text="Hanover, PA" AND placeTypeName.code = 7
如果找到结果,WOEID将返回data.query.results.place.woeid
。
然而,这并不完美。在宾夕法尼亚州,我们(至少)有三个地方可以在寻找“汉诺威”(约克郡的汉诺威,比弗县的汉诺威镇和卢泽恩县的汉诺威镇)时出现。使用此方法搜索时,这可能会影响您的结果,也可能不会影响您使用邮政编码可以提高结果的准确性,并且可以使用boundingBox
属性按已知的纬度/经度过滤结果:
select * from geo.places where text="Eagle, Wisconsin" AND
boundingBox.southWest.latitude <= 42.9147280 AND
boundingBox.southWest.longitude <= -88.4426340 AND
boundingBox.northEast.latitude >= 42.9147280 AND
boundingBox.northEast.longitude >= -88.4426340 AND
placeTypeName.code = 7
你仍然需要提供几个必需的密钥之一(text
是一个有效的必需密钥),所以这不符合仅按地理坐标搜索的条件,但希望这算是第二好的。
答案 3 :(得分:1)
使用YQL控制台,您可以搜索“placeTypeName.code”为7的最近位置
http://developer.yahoo.com/yql/console/
SELECT * FROM geo.places WHERE text="{$seedLat}, {$seedLong}" AND placeTypeName.code = 7
此查询的REST查询类似于;
http://query.yahooapis.com/v1/public/yql?q=SELECT%20*%20FROM%20geo.places%20WHERE%20text%3D%22{$seedLat}%2C%20{$seedLong}%22%20AND%20placeTypeName.code%20%3D%207&format=json&diagnostics=true&callback=
显然用自己的坐标替换$seedLat
和$seedLong
:)
答案 4 :(得分:0)
以前的答案都无法使用,但是可以。
您需要在查询中组合闪烁表,如下所示:
select place.woeid from flickr.places where lat="" and lon="" and api_key=""
立即从Flickr获取API密钥: https://www.flickr.com/services/apps/create/