Làm thế nào để có được WOEID của thành phố nếu tôi biết vĩ độ và kinh độ của thành phố sử dụng YQL?Yahoo YQL: tìm thành phố WOEID theo tọa độ
Trả lời
Sử dụng YQL console, bạn có thể tìm kiếm địa điểm gần nhất với một 'placeTypeName.code' của 7
http://developer.yahoo.com/yql/console/
SELECT * FROM geo.places WHERE text="{$seedLat}, {$seedLong}" AND placeTypeName.code = 7
Truy vấn REST cho truy vấn này sẽ giống như thế;
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=
Rõ ràng thay thế $seedLat
và $seedLong
với riêng bạn tọa độ :)
Bạn có thể tham khảo trang web chính thức: http://developer.yahoo.com/boss/geo/docs/free_YQL.html
Dưới đây là một exmpale: select * from geo.placefinder trong đó văn bản = "37.416275, -122.025092" và gflags = "R"
Hiện không còn hoạt động nữa. – ZYiOS
Đối với những người vẫn cố tìm kiếm WOEID theo tọa độ, các câu trả lời khác hiện đã lỗi thời ed. Sử dụng dữ liệu geo.placefinder
để có thể tra cứu vĩ độ và kinh độ, và WOEID sẽ nằm trong kết quả trả về.
Via YQL:
SELECT * FROM geo.placefinder WHERE text="{$seedLat}, {$seedLon}" and gflags="R"
(Test it out on the YQL Console.)
Via REST:
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
khi tôi sử dụng truy vấn này, nó cho kết quả là null chọn * từ weather.forecast ở nơi woeid in (chọn woeid từ geo.places (1) nơi text = "{$ 17.4186947}, {$ 78.5425238}" và gflags = "R ") – Navakanth
@Navakanth: Truy vấn của bạn phải là [' SELECT * FROM weather.forecast WHERE woeid IN (SELECT woeid FROM geo.placefinder WHERE text = "17.4186947,78.5425238" AND gflags = "R") '] (http: // developer.yahoo.com/yql/console/?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.placefinder%20where%20text%3D%2217.4186947% 2C78.5425238% 22% 20 và% 20gflags% 3D% 22R% 22)) – shshaw
Điều này không còn hoạt động nữa. Tôi tin rằng YQL đã đóng quyền truy cập dwon vào bảng phân cách. Truy cập 'Người thuê nhà 'truy vấn_yahooapis_com' vào 'Tài nguyên [tenantName = query_yahooapis_com, loại = TABLE, tên = 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] 'bị từ chối.' – Layke
Có vẻ như Yahoo đã làm cho geo.placefinder
bảng ngoài công lập, có nghĩa là truy cập yêu cầu ID ứng dụng hợp lệ và xác thực OAuth (xem Free Non-Commercial YQL Table Usage). Nếu bạn chỉ muốn WOEID và bạn biết thành phố và tiểu bang, bạn có thể sử dụng bảng geo.places
thay vì:
select * from geo.places where text="Hanover, PA" AND placeTypeName.code = 7
Nếu vậy được tìm thấy, các WOEID sẽ được trả lại như data.query.results.place.woeid
.
Tuy nhiên, điều này không hoàn hảo. Ở Pennsylvania, chúng tôi có (ít nhất) ba địa điểm có thể xuất hiện khi tìm kiếm "Hanover" (Hanover ở Quận York, Thị trấn Hanover ở Quận Beaver và Thị trấn Hanover ở Quận Luzerne). Điều này có thể hoặc không ảnh hưởng đến kết quả của bạn khi tìm kiếm bằng phương pháp này. Sử dụng một mã bưu chính nên tăng độ chính xác của các kết quả, và nó có thể lọc kết quả theo vĩ độ tiếng/kinh độ bằng cách sử dụng boundingBox
tài sản:
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
Bạn vẫn sẽ cần phải cung cấp một trong số một số khóa bắt buộc (text
là khóa bắt buộc hợp lệ), do đó, điều này không đủ điều kiện chỉ tìm kiếm theo tọa độ địa lý, nhưng hy vọng điều này được tính là tốt nhất thứ hai.
Bạn có hiển thị cho chúng tôi mẫu URL thực sự đang hoạt động http: // truy vấn hay không.yahooapis.com/v1/public/yql?q=SELECT%20*%20FROM%20geo.places%20WHERE%20text%3D%225%2C%20106%22%20AND%20placeTypeName.code%20%3D%207 doesn ' t làm việc. –
Hãy thử sử dụng số thập phân thay vì số nguyên làm tham số, YQL dường như không thích cả hai được truyền dưới dạng int. – Chaoley
không có gì hiển thị. Hãy cho tôi biết WOEID của SELECT * FROM geo.places WHERE text = "6.0,105.0" AND placeTypeName.code = 7 –