2012-05-23 15 views

Trả lời

1

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$seedLong với riêng bạn tọa độ :)

+0

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. –

+0

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

+0

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 –

8

Đố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 
+0

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

+0

@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

+10

Đ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

2

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 

YQL Console

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 

YQL Console

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.