Подтвердить что ты не робот

Получите WOEID по Lat, Long с API Yahoos

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

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

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

поэтому мой вопрос: есть ли способ получить WOEID места, используя lat и long points?

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 4

Немного смешно, что Yahoo не предоставляет метод поиска для WOEID через lat/lon - он был в списке задач с 2008 года, но это состояние вещей.

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

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

Ответ 5

Сначала введите имя города из 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);
               }];

Затем используйте это имя города в нижнем 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, и вы найдете get 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"
      } ]
}

Ответ 6

Похоже, вы ошиблись. Это 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

Ответ 7

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

Вот ссылка на YQL с примером запроса, чтобы найти WOEID для данного lat/lon: 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

Ответ 8

Yahoo недавно закрыла свой API Geo Placefinder, оставив многих, кто использовал его для поиска в WOEID, на основе координат широты и долготы, скремблирования для решения.

В следующем сообщении описывается, как вы можете это сделать, используя самую последнюю версию своего API:

http://www.joe0.com/2016/03/06/how-to-get-woeid-where-on-earth-identifier-based-on-latitude-longitude/

Следующий код:

String url = "https://query.yahooapis.com/v1/public/yql?q=select%20woeid%20from%20geo.places%20where%20text%3D%22(" + Latitude + "," + Longitude + ")%22%20limit%201&diagnostics=false";    

Document yahooApiResponse = Jsoup.connect(url).timeout(10 * 1000).get();
String xmlString = yahooApiResponse.html();
Document doc = Jsoup.parse(xmlString, "", Parser.xmlParser());

System.out.println(doc.select("woeid").first().text().toString());

Ответ 9

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

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

Другие кавычки

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

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

Ответ 10

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

Ответ 11

Yahoo api использует weather.com на самом деле, поэтому отправляйтесь на weather.com и ищите местную погоду. Я в Чикаго, поэтому я вошел в "Чикаго, Иллинойс", и вот ссылка в моем браузере, показывающая мою погоду:

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

В ссылке находится woeid - которая является USIL0225

Вы можете получить то же самое.