2010-01-19 4 views
17

tôi đã tìm kiếm trong một thời gian nhưng không tìm thấy gì, đó là mô phỏng với vấn đề của tôi.Nhận WOEID theo Lat, Long với Yahoo API

tôi đang cố gắng để sử dụng API YAHOO Thời tiết, ví dụ: http://weather.yahooapis.com/forecastrss?w=4097

tôi không biết WOEID trong trường hợp của tôi, nhưng tôi đã nhận vĩ độ và kinh độ điểm.

vì vậy câu hỏi của tôi là: là có cách nào để có được WOEID của một địa điểm bằng cách sử dụng các điểm dài và lat?

+1

Yahoo hiện nay có một API cho việc này: http://developer.yahoo.com/geo/placefinder/ –

Trả lời

18

Điều này hiện khả dụng thông qua số phát hành gần đây PlaceFinder API. Kudos cho Yahoo! để cung cấp một phần quan trọng khác của trò chơi Địa lý.

+0

Tính đến 5 năm trước, API API không được chấp nhận. – Annjawn

-2

Yahoo api sử dụng weather.com thực sự, vì vậy, hãy truy cập weather.com và tìm kiếm thời tiết địa phương của bạn. Tôi đang ở Chicago vì vậy tôi bước vào 'Chicago, IL' và đây là link trên thanh trình duyệt của tôi hiển thị thời tiết của tôi:?

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

Trong liên kết là woeid - đó là USIL0225

Bạn có thể nhận được cùng một cách.

+0

Nhưng câu hỏi không phải là làm thế nào để có được sự khốn khổ của thành phố và tiểu bang. Đó là vĩ độ và kinh độ. –

+1

"USIL0225" không phải là một woeid. Woeids là số. –

7

này không được sử dụng API của Yahoo nhưng tôi tìm thấy bài viết trên blog này: http://geomojo.org/?p=38

Đề cập đến dịch vụ này: http://www.geomojo.org/cgi-bin/reversegeocoder.cgi?long=-117.699444&lat=35.4775

Có lẽ bạn có thể sử dụng? Nó giải quyết vấn đề của tôi, tôi hy vọng nó giúp giải quyết của bạn.

+0

thanks :) tôi nghĩ rằng đây là cách tốt nhất tôi có thể làm điều đó. – choise

+0

Geomojo.org hiện đã biến mất ... Bây giờ bạn phải sử dụng: http://where.yahooapis.com/geocode?q=38.898717,+-77.035974&gflags=R&appid=[yourappidhere] –

+2

Được đề cập ở trên cả hai trang web không hoạt động . Hiển thị thông báo là "Trang web bạn đang cố truy cập tạm thời không khả dụng". – Ganesha

0

có một chủ đề về vấn đề này tại các diễn đàn YDN http://developer.yahoo.net/forum/index.php?showtopic=69

Hình như nó bị chôn vùi trong danh sách công việc phải làm, từ năm 2008 "khả năng để ánh xạ một tập hợp các kinh độ và vĩ độ phối để một WOEID, từ đó các thông tin như ZIP và Tiểu bang có thể được bắt nguồn, đã được xác định là có giá trị và nó nằm trong danh sách yêu cầu nâng cao của chúng tôi. "

Báo giá khác;

"Flickr có phương thức: flickr.places.findByLatLon trả về WOEID nhưng chúng cắt ngắn tọa độ thành ba chữ số thập phân".

Trong chủ đề này, nhà phát triển của Yahoo cũng đề xuất sử dụng lời khuyên tại http://geomojo.org/?p=38 làm giải pháp tạm thời.

3

Có phần vô lý là Yahoo không cung cấp phương pháp tra cứu cho WOEID qua lat/lon - nó nằm trong danh sách việc cần làm của họ kể từ năm 2008 - nhưng đó là trạng thái của mọi thứ.

Tôi sẽ cảnh báo bạn chống lại việc sử dụng giải pháp được đề xuất được triển khai tại Geomojo. Nếu nó hoạt động cho dữ liệu của bạn, tuyệt vời, nhưng dịch vụ Yahoo mà Geomojo dựa vào là không thể đoán trước. Geomojo sử dụng PlaceMaker của Yahoo, trích xuất thông tin vị trí từ văn bản không có cấu trúc để có được một WOEID.Nó thực hiện điều này bằng cách tạo một microformat chứa cặp lat/lon của bạn và gửi nó tới PlaceMaker. Tuy nhiên, kể từ khi PlaceMaker trả về WOEID cho mã zip có mất độ phân giải và đôi khi bạn sẽ không thể xác định ngay cả thị trấn cho các tọa độ đã gửi. Tôi có một số số example points trên bờ biển phía đông của Hoa Kỳ, nơi các WOEID của PlaceMaker không tương ứng với cặp lat/lon đã gửi.

Thật lạ, như HD viết, chỉ API của Flickr cung cấp một cách đơn giản để lookup a WOEID from lat/lon. Phương thức findByLatLon của Flickr có độ phân giải cao. Nó thường sẽ trả về một khu phố (một cấp dưới phố) cho một cặp tọa độ.

+0

Flickr có bất kỳ giới hạn truy vấn nào đối với mọi ID ứng dụng không? Cảm ơn. – herbertD

+0

Tôi nhận được điều này từ flickr: Nếu ứng dụng của bạn vẫn dưới 3600 truy vấn mỗi giờ trên toàn bộ khóa (có nghĩa là tổng hợp của tất cả người dùng tích hợp của bạn), bạn sẽ ổn. Nếu chúng tôi phát hiện lạm dụng trên khóa của bạn, chúng tôi sẽ cần hết hạn khóa hoặc tắt, để bảo toàn chức năng API Flickr cho người khác (bao gồm cả chúng tôi!). – herbertD

2

Bạn có thể sử dụng API mã hóa địa lý đảo ngược của Flickr thông qua YQL.

Dưới đây là một liên kết đến YQL với một truy vấn ví dụ để tìm ra WOEID cho một lat/lon đưa ra: http://developer.yahoo.com/yql/console/#h=select%20place.woeid%20from%20flickr.places%20where%20lat%3D43%20and%20lon%3D-94

Truy vấn trên có thể được gọi trực tiếp từ ứng dụng của bạn với URL này (/ định dạng JSON XML có sẵn): http://query.yahooapis.com/v1/public/yql?q=select%20place.woeid%20from%20flickr.places%20where%20lat%3D43%20and%20lon%3D-94&format=xml

10

Yahoo! API PlaceFinder cho phép bạn tìm WOEID tương ứng cho cặp vĩ độ/kinh độ. Hãy xem xét ví dụ này dịch vụ web gọi phương thức:

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

Bạn có thể chơi với các thông số yêu cầu theo yêu cầu của bạn, xem Yahoo! PlaceFinder API documentation để biết thêm. Và bạn nên thay thế appid bằng tài khoản Yahoo! appid, bạn có thể tạo một here.

Yêu cầu này trả về một phản ứng như thế, trong đó bao gồm rất nhiều dữ liệu hữu ích cùng với 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" 
      } 
     ] 
    } 
} 
+6

API này có bị dừng không? Bây giờ nó trả về: D/StandardLauncher (11881): Yahoo! Thời tiết - Lỗi D/StandardLauncher (11881): Yahoo! Thời tiết Lỗi D/StandardLauncher (11881): Thành phố không tìm thấy D/StandardLauncher (11881): Invalid Input/forecastrss w = null & u = c D/StandardLauncher (11881): D/StandardLauncher (11881): herbertD

+0

Chính xác, điều này không còn hoạt động, xem giải pháp dưới đây ... – jjj

0

Thay vì sử dụng lng & lat, bạn có thể sử dụng hiện tại Địa chỉ IP trực tuyến để có được Tên thành phố sau đó sử dụng dịch vụ web của Yahoo GeoPlanet để lấy WOEID. Làm theo hướng dẫn này để biết chi tiết: http://4rapiddev.com/php/get-woeid-of-a-city-name-from-ip-address-with-php/

+0

Bạn có thể thêm một số chi tiết từ liên kết đó không? – Starx

3

Đầu tiên lấy tên thành phố từ vĩ độ/dài bằng mã này.

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

Sau đó sử dụng cityname rằng trong url bên dưới

https://search.yahoo.com/sugg/gossip/gossip-gl-location/?appid=weather&output=sd1&p2=pt&command=YOURCITYNAME

Ví dụ - https://search.yahoo.com/sugg/gossip/gossip-gl-location/?appid=weather&output=sd1&p2=pt&command=sydney

này sẽ trở lại json và bạn tìm được WOEID trong này ...

{ "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" 
     } ] 
} 
2

Yahoo gần đây đã đóng Geo Placefind của họ er API, để lại nhiều người sử dụng nó cho tìm kiếm WOEID dựa trên vĩ độ & tọa độ kinh độ, xáo trộn cho một giải pháp.

Tiếp theo bài mô tả cách bạn có thể làm điều này bằng cách sử dụng phiên bản mới nhất của API của họ:

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

Tiếp theo mã:

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());