【问题标题】:Receive a WOEID by Lat, Long with Yahoos API使用 Yahoos API 接收 Lat, Long 的 WOEID
【发布时间】:2011-01-06 19:02:14
【问题描述】:

我搜索了一段时间,但什么也没找到,这与我的问题类似。

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

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

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

【问题讨论】:

标签: api yahoo latitude-longitude


【解决方案1】:

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

http://www.weather.com/weather/today/Chicago+IL+USIL0225?lswe=chicago,%20il&from=searchbox_localwx

链接中是 woeid - 即 USIL0225

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

【讨论】:

  • 但问题不在于如何按城市和州获得 woeid。它是纬度和经度。
  • "USIL0225" 不是一个 woeid。 Woeids 是数字。
【解决方案2】:

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

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

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

【讨论】:

  • Geomojo.org 现已消失...您现在必须使用:where.yahooapis.com/…
  • 以上提到的两个站点都无法正常工作。显示消息为“您尝试访问的网站暂时不可用。”
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

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

    其他引用;

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

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

    【讨论】:

      【解决方案5】:

      雅虎不提供通过纬度/经度查找 WOEID 的方法有点荒谬——自 2008 年以来它一直在他们的待办事项列表上——但这就是现状。

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

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

      【讨论】:

      • flickr 对每个 App ID 都有查询限制吗?谢谢。
      • 我从 flickr 得到这个:如果您的应用程序在整个密钥中保持每小时 3600 次查询以下(这意味着您的集成的所有用户的总和),那么您会没事的。如果我们检测到您的密钥被滥用,我们将需要使密钥过期或将其关闭,以便为其他人(包括我们!)保留 Flickr API 功能。
      【解决方案6】:

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

      这是一个指向 YQL 的链接,其中包含用于查找给定纬度/经度的 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】:

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

        【讨论】:

        • 截至 5 年前,Placefinder API 已被弃用。
        【解决方案8】:

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

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

        您可以根据需要使用请求参数,更多信息请参阅Yahoo! PlaceFinder API documentation。 你应该用你的 Yahoo! 替换 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"
                    }
                ]
            }
        }
        

        【讨论】:

        • 这个 API 停止了吗?现在它返回: D/StandardLauncher(11881): Yahoo!天气 - 错误 D/StandardLauncher(11881): Yahoo!天气错误 D/StandardLauncher(11881):找不到城市 D/StandardLauncher(11881):输入无效 /forecastrss?w=null&u=c D/ StandardLauncher(11881): D/StandardLauncher(11881):
        【解决方案9】:

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

        【讨论】:

        • 你能从那个链接中添加一些细节吗?
        【解决方案10】:

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

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

        【讨论】:

          【解决方案11】:

          以前的 Yahoo Weather API 已被弃用。 new Yahoo Weather 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`
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-17
          • 2013-08-05
          • 2011-08-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多