使用Yahoos API获得Lat,Long的WOEID

时间:2010-01-19 12:20:47

标签: api yahoo latitude-longitude

我搜索了一段时间但没有发现任何东西,这与我的问题相似。

我正在尝试使用YAHOO Weather API,例如:http://weather.yahooapis.com/forecastrss?w=4097

我不知道我的情况下的WOEID,但我得到了纬度和经度点。

所以我的问题是: 有没有办法通过使用纬度和长点获得一个地方的WOEID?

11 个答案:

答案 0 :(得分:18)

现在可以通过最近发布的PlaceFinder API获得。感谢雅虎!提供地理难题的另一个重要部分。

答案 1 :(得分:11)

雅虎! PlaceFinder API允许您为纬度/经度对找到相应的WOEID。请考虑此示例Web服务方法调用:

http://where.yahooapis.com/geocode?location=37.42,-122.12&flags=J&gflags=R&appid=zHgnBS4m

您可以根据需要使用请求参数,有关详情,请参阅Yahoo! PlaceFinder API documentation。 你应该用你的雅虎取代appid! appid,你可以创建一个here

此请求会返回类似的响应,其中包含许多有用的数据以及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"
            }
        ]
    }
}

答案 2 :(得分:8)

这不是使用雅虎的API,但我发现这篇博文: http://geomojo.org/?p=38

提及此服务: http://www.geomojo.org/cgi-bin/reversegeocoder.cgi?long=-117.699444&lat=35.4775

也许你可以使用它?它解决了我的问题,我希望它有助于解决你的问题。

答案 3 :(得分:3)

雅虎没有通过lat / lon为WOEID提供查找方法有点荒谬 - 自2008年以来它一直在他们的待办事项清单上 - 但这就是状态。

我会提醒您不要使用在Geomojo中实施的建议解决方法。如果它适用于您的数据,那很好,但Geomojo所依赖的Yahoo服务是不可预测的。 Geomojo使用Yahoo的PlaceMaker,它从非结构化文本中提取位置信息以获得WOEID。它通过创建包含lat / lon对的微格式并将其提交给PlaceMaker来实现。但是,由于PlaceMaker返回邮政编码的WOEID,因此会丢失解决方案,有时甚至无法识别提交坐标的城镇。我在美国东海岸有一些example points,其中PlaceMaker WOEID与提交的纬度/经度对不对应。

奇怪的是,正如HD写道,只有Flickr的API为lookup a WOEID from lat/lon提供了一种简单的方法。 Flickr的findByLatLon方法具有很高的分辨率。它通常会返回一个邻域(城镇下一层)作为一对坐标。

答案 4 :(得分:3)

首先使用此代码从lat / long获取城市名称。

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"
      } ]
}

答案 5 :(得分:2)

好像你得到了错误的方法。这是weather.yahoo.com上的URL: weather.yahoo.com/united-states/illinois/chicago-2379574/ 最后一位是芝加哥的WOEID,即2379574

在GeoPlanet文档中描述了WOEID: http://developer.yahoo.com/geo/geoplanet/guide/concepts.html#woeids

答案 6 :(得分:2)

您可以通过YQL使用Flickr的反向地理编码API。

以下是YQL的链接,其中包含一个示例查询,用于查找给定lat / lon的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

答案 7 :(得分:0)

在YDN论坛http://developer.yahoo.net/forum/index.php?showtopic=69

上有关于此问题的主题

看起来它被埋没在待办事项清单中,从2008年开始“将一组经度和纬度坐标映射到WOEID的能力,从中可以得出ZIP和State等信息,已被确定为有价值的功能,它在我们的增强请求列表中。“

其他报价;

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

在本主题中,雅虎开发人员还建议使用http://geomojo.org/?p=38的建议作为临时解决方案。

答案 8 :(得分:0)

而是使用lng& lat,您可以使用当前的在线IP地址获取城市名称,然后使用Yahoo GeoPlanet Web服务获取WOEID。 请按照本教程获取详细信息:http://4rapiddev.com/php/get-woeid-of-a-city-name-from-ip-address-with-php/

答案 9 :(得分:0)

以前的Yahoo Weather API已被弃用。 new Yahoo Weather API需要查询字符串才能获取天气。

使用以下查询字符串按纬度和经度获取天气数据 -
public class op { @GET @Produces(MediaType.TEXT_PLAIN) public String postForm(@QueryParam("operacion") String operacion) { return operacion; } } @GET @Path("/calculadora/suma") public String Suma(@QueryParam("num1") double num1,@QueryParam("num2") double num2) { return Double.toString($Suma(num1,num2)); } double $Suma(double num1,double num2) { op optest = new op(); optest.postForm(operacion); double resultado; resultado = num1 + num2; return resultado; }

例如 - 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

答案 10 :(得分:-2)

Yahoo api实际上使用的是weather.com,所以请访问weather.com并搜索当地的天气。我在芝加哥,所以我进入'芝加哥,伊利诺伊州',这是我的浏览器栏中的链接显示我的天气:

http://www.weather.com/weather/today/Chicago+IL+ USIL0225 lswe =芝加哥,%20il&安培;从= searchbox_localwx

在链接中是woeid - 这是USIL0225

你可以用同样的方式获得你的。