使用雅虎API通过纬度和经度获取WOEID

18

我搜索了一会儿,但没有找到类似我的问题的内容。

我想使用雅虎天气API,例如:http://weather.yahooapis.com/forecastrss?w=4097

我不知道在我的情况下WOEID是什么,但我有纬度和经度坐标。

所以我的问题是: 有没有办法通过使用纬度和经度坐标来获取地方的WOEID?


1
雅虎现在有一个API可以做到这一点:http://developer.yahoo.com/geo/placefinder/ - HD.
11个回答

18

现在可以通过最近发布的PlaceFinder API来实现。感谢Yahoo! 提供了地理拼图中又一个重要的组成部分。


1
五年前,Placefinder API已被弃用。 - Anjan Biswas

11

雅虎地点查找API允许你查找一个纬度/经度对应的WOEID。考虑下面的这个示例Web服务方法调用:

http://where.yahooapis.com/geocode?location=37.42,-122.12&flags=J&gflags=R&appid=zHgnBS4m
你可以根据自己的需求更改请求参数,详见Yahoo! PlaceFinder API文档。同时,你需要用你的Yahoo! appid替换掉appid,你可以在这里创建一个。
这个请求会返回类似下面这样的响应,其中包含大量有用的数据以及WOEID:
{
    "ResultSet": {
        "version": "1.0",
        "Error": 0,
        "ErrorMessage": "No error",
        "Locale": "us_US",
        "Quality": 99,
        "Found": 1,
        "Results": [
            {
                "quality": 99,
                "latitude": "37.420000",
                "longitude": "-122.120000",
                "offsetlat": "37.420000",
                "offsetlon": "-122.120000",
                "radius": 500,
                "name": "37.42,-122.12",
                "line1": "3589 Bryant St",
                "line2": "Palo Alto, CA  94306-4207",
                "line3": "",
                "line4": "United States",
                "house": "3589",
                "street": "Bryant St",
                "xstreet": "",
                "unittype": "",
                "unit": "",
                "postal": "94306-4207",
                "neighborhood": "",
                "city": "Palo Alto",
                "county": "Santa Clara County",
                "state": "California",
                "country": "United States",
                "countrycode": "US",
                "statecode": "CA",
                "countycode": "",
                "hash": "",
                "woeid": 12797284,
                "woetype": 11,
                "uzip": "94306"
            }
        ]
    }
}

6
这个API停止了吗?现在它返回:D/StandardLauncher(11881): <title>Yahoo!天气-错误</title> D/StandardLauncher(11881): <description> Yahoo!天气错误</description> D/StandardLauncher(11881): <item><title>未找到城市</title><description> D/StandardLauncher(11881): 无效的输入 /forecastrss?w=null&u=c D/StandardLauncher(11881): </description></item></channel></rss> D/StandardLauncher(11881): <!-- api5.weather.sg3.yahoo.com 周三 2013年4月3日02:45:25 PST --> - herbertD

8

Geomojo.org现在已经关闭... 您现在必须使用:http://where.yahooapis.com/geocode?q=38.898717,+-77.035974&gflags=R&appid=[yourappidhere] - Myles Gray
2
上述两个网站都无法使用。显示消息为“您尝试访问的网站暂时不可用。” - Ganesha

3

首先使用以下代码从纬度/经度获取城市名称。

CLGeocoder *geocoder = [[CLGeocoder alloc] init] ;
[geocoder reverseGeocodeLocation:location
               completionHandler:^(NSArray *placemarks, NSError *error) {
                   if (error){
                       NSLog(@"Geocode failed with error: %@", error);
                       return;
                   }
                   CLPlacemark *placemark = [placemarks objectAtIndex:0];
                   NSLog(@"cityname - %@",placemark.locality);
               }];

然后在下面的网址中使用该城市名称:https://search.yahoo.com/sugg/gossip/gossip-gl-location/?appid=weather&output=sd1&p2=pt&command=YOURCITYNAME。例如 - https://search.yahoo.com/sugg/gossip/gossip-gl-location/?appid=weather&output=sd1&p2=pt&command=sydney。这将返回json,您可以在其中找到WOEID...
{ "l" : { "gprid" : "eIL89mltSzSfgDWdP7uyBA" },
  "q" : "sydney",
  "r" : [ { "d" : "pt:iso=AU&woeid=1105779&lon=151.021&lat=-33.8563&s=New South Wales&c=Australia&sc=NSW&n=Sydney, Australia",
        "k" : "Sydney"
      } ]
}

3
有点荒谬的是,Yahoo自2008年以来就在待办事项列表上没有提供通过纬度/经度查找WOEID的方法,但这就是现状。
我建议您不要使用Geomojo实施的建议性解决方法。如果适用于您的数据,那很好,但Geomojo依赖的Yahoo服务是不可预测的。Geomojo使用Yahoo的PlaceMaker,从非结构化文本中提取位置信息以获取WOEID。它通过创建一个包含您的纬度/经度对的微格式并将其提交给PlaceMaker来实现此目的。然而,由于PlaceMaker为邮政编码返回WOEID,因此会出现分辨率损失,有时您甚至无法确定提交坐标所在的城镇。我在美国东海岸有许多示例点,其中PlaceMaker WOEID与提交的纬度/经度对不对应。
奇怪的是,正如HD所写,只有Flickr的API提供了一个简单的方法来 查找经纬度对应的 WOEID。 Flickr的findByLatLon方法有很高的分辨率。它通常会返回一对坐标下方的社区(城镇下面的一个级别)。

Flickr每个应用程序ID是否有任何查询限制?谢谢。 - herbertD
我从 Flickr 得到了这个信息:如果你的应用程序在整个密钥范围内(也就是所有集成用户的总和)每小时保持在 3600 次以下的查询,那么你就没问题。如果我们检测到你的密钥被滥用,我们将需要使其过期或关闭,以便为其他人(包括我们自己)保留 Flickr API 的功能。 - herbertD

2
您可以通过YQL使用Flickr的反向地理编码API。
以下是一个链接,其中包含一个示例查询,用于查找给定纬度/经度的WOEID:http://developer.yahoo.com/yql/console/#h=select%20place.woeid%20from%20flickr.places%20where%20lat%3D43%20and%20lon%3D-94 上述查询可以通过此URL直接从您的应用程序调用(XML / JSON格式可用):http://query.yahooapis.com/v1/public/yql?q=select%20place.woeid%20from%20flickr.places%20where%20lat%3D43%20and%20lon%3D-94&format=xml

2

0

你能从那个链接中添加一些细节吗? - Starx

0

在YDN论坛上有一个关于这个问题的主题 http://developer.yahoo.net/forum/index.php?showtopic=69

看起来它被埋在待办列表中,自2008年以来“将一组经纬度坐标映射到WOEID的能力已被确定为一个有价值的特性,并且它在我们的增强请求列表上。”

其他引言;

“Flickr有一种方法:flickr.places.findByLatLon返回WOEID,但它们将坐标截断为三位小数。”

在这个主题中,雅虎公司的开发者还建议使用http://geomojo.org/?p=38上的建议作为临时解决方案。


0

原先的Yahoo天气API已经被弃用。新的Yahoo天气API需要一个查询字符串来获取天气。

使用以下查询字符串通过纬度和经度获取天气数据 -
"https://query.yahooapis.com/v1/public/yql?q=select * from weather.forecast where woeid in (select woeid from geo.places(1) where text=\"(" + latitude + "," + longitude + ")\")&format=json"

例如 - https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text%3D%22(31.63%2C74.87)%22)&format=json


使用Javascript ES6模板文字 - https://query.yahooapis.com/v1/public/yql?q=select * from weather.forecast where woeid in (select woeid from geo.places(1) where text="(${lat},${lon})")&format=json - Shaurya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接