Получите WOEID от Lat, Long с Yahoos API - PullRequest
18 голосов
/ 19 января 2010

Я некоторое время искал, но ничего не нашел, это похоже на мою проблему.

Я пытаюсь использовать API погоды YAHOO, например: http://weather.yahooapis.com/forecastrss?w=4097

Не знаюЯ знаю WOEID в моем случае, но я получил точки широты и долготы.

, поэтому мой вопрос: есть ли способ получить WOEID места, используя точки широты и долготы?

Ответы [ 11 ]

18 голосов
/ 28 июня 2010

Теперь доступно через недавно выпущенный PlaceFinder API . Слава Yahoo! за предоставление еще одной важной части головоломки Geo.

11 голосов
/ 01 июня 2011

Yahoo! PlaceFinder API позволяет найти соответствующий WOEID для пары широта / долгота. Рассмотрим этот пример вызова метода веб-службы:

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

Вы можете играть с параметрами запроса в соответствии с вашими потребностями, см. Yahoo! Документация PlaceFinder API для более. И вы должны заменить appid своим Yahoo! 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"
            }
        ]
    }
}
8 голосов
/ 21 января 2010

Это не использует API Yahoo, но я нашел это сообщение в блоге: http://geomojo.org/?p=38

Упоминание об этой услуге: http://www.geomojo.org/cgi-bin/reversegeocoder.cgi?long=-117.699444&lat=35.4775

Возможно, вы можете использовать это?Это решило мою проблему, надеюсь, это поможет решить вашу.

3 голосов
/ 13 января 2014

Сначала получите название города от широты / долготы, используя этот код.

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);
               }];

Затем используйте это название города в приведенном ниже URL-адресе

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 голосов
/ 13 февраля 2010

Несколько нелепо, что Yahoo не предоставляет метод поиска для WOEID через широту / долготу - он находится в их списке задач с 2008 года - но это так.

Я бы предостерегВы против использования предложенного обходного пути, реализованного в Geomojo.Если это работает для ваших данных, прекрасно, но сервис Yahoo, на который полагается Geomojo, непредсказуем.Geomojo использует Yahoo PlaceMaker, который извлекает информацию о местоположении из неструктурированного текста, чтобы получить WOEID.Это делается путем создания микроформата, содержащего вашу пару широта / долгота, и отправки его в PlaceMaker.Тем не менее, поскольку PlaceMaker возвращает WOEID для почтовых индексов, происходит потеря разрешения, и иногда вы не сможете определить даже город по представленным координатам.У меня есть несколько примеров точек на восточном побережье США, где идентификаторы PlaceMaker WOEID не соответствуют представленным парам широта / долгота.

Как ни странно, как пишет HD, только API Flickrпредоставляет простой способ поиска WOEID из широты / долготы .Метод Flickr findByLatLon имеет большое разрешение.Обычно он возвращает район (на один уровень ниже города) для пары координат.

2 голосов
/ 22 марта 2010

Вы можете использовать API обратного геокодирования Flickr через YQL.

Вот ссылка на 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

2 голосов
/ 21 января 2010

Похоже, вы ошиблись.Это URL на weather.yahoo.com: weather.yahoo.com/united-states/illinois/chicago-2379574/ Последний бит - это WOEID для Чикаго, т.е. 2379574

WOEID описаны в GeoPlanetдокументы: http://developer.yahoo.com/geo/geoplanet/guide/concepts.html#woeids

0 голосов
/ 29 апреля 2018

Прежний API погоды Yahoo устарел.Для нового 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

0 голосов
/ 19 июля 2011

Вместо использования lng & lat вы можете использовать текущий онлайн-IP-адрес для получения названия города, а затем использовать веб-сервис Yahoo GeoPlanet для получения WOEID.Следуйте этому руководству, чтобы получить подробную информацию: http://4rapiddev.com/php/get-woeid-of-a-city-name-from-ip-address-with-php/

0 голосов
/ 26 января 2010

На форуме YDN есть тема по этому вопросу http://developer.yahoo.net/forum/index.php?showtopic=69

Похоже, что он скрыт в списке дел, начиная с 2008 г. "Возможность сопоставить набор координат долготы и широты с WOEID, из которого может быть получена такая информация, как ZIP и State, уже определена полезная функция, и она есть в нашем списке запросов на улучшение. "

Другие цитаты;

"У Flickr есть метод: flickr.places.findByLatLon, который возвращает WOEID, но они усекают координаты до трех десятичных знаков."

В этой теме разработчик Yahoo также предлагает использовать совет на http://geomojo.org/?p=38 в качестве временного решения.

...