Как получить WOEID города, если я знаю широту и долготу города, используя YQL?
Yahoo YQL: найти город WOEID по координатам
Ответы (5)
Используя консоль YQL, вы можете искать ближайшее место с «placeTypeName.code» из 7
http://developer.yahoo.com/yql/console/
SELECT * FROM geo.places WHERE text="{$seedLat}, {$seedLong}" AND placeTypeName.code = 7
Запрос REST для этого запроса будет выглядеть примерно так:
http://query.yahooapis.com/v1/public/yql?q=SELECT%20*%20FROM%20geo.places%20WHERE%20text%3D%22{$seedLat}%2C%20{$seedLong}%22%20AND%20placeTypeName.code%20%3D%207&format=json&diagnostics=true&callback=
Очевидно, заменяя $seedLat
и $seedLong
своими координатами :)
Для тех, кто все еще пытается найти WOEID по координатам, другие ответы уже устарели. Используйте таблицу данных geo.placefinder
для поиска широты и долготы, и WOEID будет в возвращаемых результатах.
Через YQL:
SELECT * FROM geo.placefinder WHERE text="{$seedLat}, {$seedLon}" and gflags="R"
Через ОТДЫХ:
http://query.yahooapis.com/v1/public/yql?q=SELECT%20*%20FROM%20geo.placefinder%20WHERE%20text%3D%22{$seedLat}%2C{$seedLon}%22%20and%20gflags%3D%22R%22
SELECT * FROM weather.forecast WHERE woeid IN (SELECT woeid FROM geo.placefinder WHERE text="17.4186947,78.5425238" AND gflags="R")
- person shshaw; 11.05.2015
Tenant 'query_yahooapis_com' access to 'Resource [tenantName=query_yahooapis_com, type=TABLE, name=geo.placefinder, locatorType=FILE, url=/home/y/share/manhattan/application/tenantBundles/yql_query_yahooapis_com_manhattan_v2/YQL-INF/restdefs/geo.placefinder.xml, useUrl=false]' is denied.
- person Layke; 26.01.2016
Вы можете сослаться на официальную веб-страницу: http://developer.yahoo.com/boss/geo/docs/free_YQL.html
Вот пример: выберите * из geo.placefinder, где text="37.416275,-122.025092" и gflags="R"
Похоже, Yahoo сделала таблицу geo.placefinder
закрытой, что означает, что для доступа требуется действительный идентификатор приложения и аутентификация OAuth (см. Бесплатное некоммерческое использование таблицы YQL). Если вам просто нужен WOEID и вы знаете город и штат, вы можете вместо этого использовать таблицу geo.places
:
select * from geo.places where text="Hanover, PA" AND placeTypeName.code = 7
Если результат найден, WOEID будет возвращен как data.query.results.place.woeid
.
Однако это не идеально. В Пенсильвании у нас есть (по крайней мере) три места, которые могут отображаться при поиске «Ганновер» (Ганновер в округе Йорк, городок Ганновер в округе Бивер и городок Ганновер в округе Люцерн). Это может или не может повлиять на ваши результаты при поиске с использованием этого метода. Использование почтового индекса должно повысить точность результатов, и можно отфильтровать результаты по известной широте/долготе, используя свойство boundingBox
:
select * from geo.places where text="Eagle, Wisconsin" AND
boundingBox.southWest.latitude <= 42.9147280 AND
boundingBox.southWest.longitude <= -88.4426340 AND
boundingBox.northEast.latitude >= 42.9147280 AND
boundingBox.northEast.longitude >= -88.4426340 AND
placeTypeName.code = 7
Вам по-прежнему нужно будет предоставить один из нескольких обязательных ключей (text
является действительным обязательным ключом), так что это не квалифицируется как поиск исключительно по географическим координатам, но, надеюсь, это считается вторым лучшим.
Ни один из предыдущих ответов больше не работает, но это работает.
Вам нужно объединить таблицу мерцания в запросе, например так:
select place.woeid from flickr.places where lat="" and lon="" and api_key=""
Получить КЛЮЧ API от Flickr можно мгновенно: https://www.flickr.com/services/apps/create/