2010-01-19 8 views
17

Ich suchte eine Weile, aber nichts gefunden, das ist ähnlich wie mein Problem.Erhalten Sie eine WOEID von Lat, Long mit Yahoos API

Ich versuche, das YAHOO Wetter API zu verwenden, zum Beispiel: http://weather.yahooapis.com/forecastrss?w=4097

ich die WOEID in meinem Fall nicht wissen, aber ich habe Breiten- und Längen Punkte.

so ist meine Frage: gibt es eine Möglichkeit, die WOEID eines Ortes mit Lat und lange Punkte zu bekommen?

+1

Yahoo jetzt eine API für diese hat: http://developer.yahoo.com/geo/placefinder/ –

Antwort

18

Dies ist jetzt durch die kürzlich veröffentlichte PlaceFinder API verfügbar. Kudos zu Yahoo! um ein weiteres wichtiges Stück des Geo-Puzzles zur Verfügung zu stellen.

+0

Seit 5 Jahren ist die Placefinder-API veraltet. – Annjawn

-2

Yahoo API verwendet weather.com tatsächlich, also gehen Sie zu weather.com und suchen Sie nach Ihrem lokalen Wetter. Ich bin in Chicago so trat ich in 'Chicago, IL' und hier ist der Link in meinem Browser Bar zeigt mein Wetter:

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

In der Link ist die Woeid - das ist USIL0225

Sie können Ihre auf die gleiche Weise erhalten.

+0

Aber die Frage ist nicht, wie man die Woeid durch Stadt und Staat bekommt. Es ist für Breiten- und Längengrad. –

+1

"USIL0225" ist keine Wehe. Woeids sind numerisch. –

7

Dies wird API nicht mit Yahoo, aber ich dieses Blog-Post gefunden: http://geomojo.org/?p=38

diesen Service Erwähnen: http://www.geomojo.org/cgi-bin/reversegeocoder.cgi?long=-117.699444&lat=35.4775

Vielleicht können Sie das verwenden? Es hat mein Problem gelöst, ich hoffe, es hilft dir bei der Lösung deines Problems.

+0

danke :) Ich denke, das ist der beste Weg, ich kann es tun. – choise

+0

Geomojo.org ist jetzt weg ... Sie müssen jetzt verwenden: http://where.yahooapis.com/geocode?q=38.898717,+-77.035974&gflags=R&appid=[yourappedhere] –

+2

Oben erwähnte beide Seiten funktionieren nicht . Die Nachricht wird angezeigt als "Die Website, die Sie erreichen wollten, ist vorübergehend nicht verfügbar." – Ganesha

0

es gibt ein Thema an den YDN Foren zu diesem Thema ist http://developer.yahoo.net/forum/index.php?showtopic=69

ist es in der To-do-Liste begraben Sehen aus wie, aus dem Jahr 2008 „die Fähigkeit, eine Reihe von Länge zu kartieren und Breitengrad-Koordinaten Ein WOEID, aus dem Informationen wie ZIP und State abgeleitet werden können, wurde bereits als wertvoll identifiziert Feature und es ist auf unserer Erweiterungsanfrage Liste. "

Andere Zitate;

"Flickr hat eine Methode: flickr.places.findByLatLon, die eine WOEID zurückgibt, aber sie Koordinaten auf drei Dezimalstellen abgeschnitten."

In diesem Thema schlägt ein Yahoo-Entwickler auch vor, den Hinweis unter http://geomojo.org/?p=38 als eine Übergangslösung zu verwenden.

3

Es ist etwas lächerlich, dass Yahoo keine Lookup-Methode für WOEIDs über lat/lon bietet - es ist seit 2008 auf ihrer Todo-Liste - aber das ist der Stand der Dinge.

Ich würde Sie davor warnen, den vorgeschlagenen Workaround bei Geomojo zu verwenden. Wenn es für Ihre Daten funktioniert, großartig, aber der Yahoo-Dienst, auf den Geomojo angewiesen ist, ist unberechenbar. Geomojo verwendet Yahoos PlaceMaker, der Standortinformationen aus unstrukturiertem Text extrahiert, um eine WOEID zu erhalten.Dazu erstellt man ein Mikroformat, das dein Lat/Lon-Paar enthält und es an PlaceMaker sendet. Da PlaceMaker jedoch WOEIDs für Postleitzahlen zurückgibt, gibt es einen Verlust der Auflösung und Sie werden manchmal nicht einmal in der Lage sein, die Stadt für die gesendeten Koordinaten zu identifizieren. Ich habe eine Nummer von example points an der Ostküste der USA, wo die PlaceMaker WOEIDs nicht den vorgelegten Lat/Lon Paaren entsprechen.

Komischerweise, wie HD schreibt, bietet nur Flickr-API einen einfachen Weg zu lookup a WOEID from lat/lon. Flickrs findByLatLon-Methode hat eine große Auflösung. Es wird normalerweise eine Nachbarschaft (eine Ebene unter der Stadt) für ein Koordinatenpaar zurückgeben.

+0

Hat flickr irgendwelche Einschränkungen für jede App ID? Vielen Dank. – herbertD

+0

Ich bekomme das von flickr: Wenn Ihre Anwendung unter 3600 Abfragen pro Stunde über den gesamten Schlüssel (was die Summe aller Benutzer Ihrer Integration bedeutet) bleibt, werden Sie in Ordnung sein. Wenn wir Missbrauch an Ihrem Schlüssel feststellen, müssen wir den Schlüssel ablaufen lassen oder ihn deaktivieren, um die Flickr-API-Funktionalität für andere (einschließlich uns!) Zu erhalten. – herbertD

2

Sie können Flickrs Reverse-Geocoding-API über YQL verwenden.

Hier ist ein Link auf die YQL mit einem Beispiel Abfrage den WOEID für eine bestimmte lat/lon zu finden: kann http://developer.yahoo.com/yql/console/#h=select%20place.woeid%20from%20flickr.places%20where%20lat%3D43%20and%20lon%3D-94

Die obige Abfrage direkt mit dieser URL (XML/JSON-Formate von Ihrer Anwendung aufgerufen werden verfügbar): 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! Mit der PlaceFinder-API können Sie eine entsprechende WOEID für ein Längen-/Breitenpaar finden. Betrachten Sie dieses Beispiel Web-Service-Methodenaufruf:

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

Sie können mit Anforderungsparameter nach Ihren Bedürfnissen spielen, sehen Yahoo! PlaceFinder API documentation für mehr. Und Sie sollten Appid mit Ihrem Yahoo! Appid, können Sie eine erstellen.

Diese Anfrage gibt eine Antwort wie die, die zusammen mit dem WOEID eine Menge nützlicher Daten beinhalten:

{ 
    "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

Wird diese API gestoppt? Jetzt gibt es zurück: D/StandardLauncher (11881): Yahoo! Wetter - Fehler D/StandardLauncher (11881): Yahoo! Wetter Fehler D/StandardLauncher (11881): Stadt nicht D/StandardLauncher (11881) gefunden: Invalid Input/forecastrss w = null & u = c D/StandardLauncher (11881): D/StandardLauncher (11881): herbertD

+0

Richtig, das funktioniert nicht mehr, siehe mein Lösung unter ... – jjj

3

Zuerst erhalten Stadt Name von lat/lang mit diesem Code.

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

Dann nutzen Sie diesen Städtenamen in folgenden URL

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

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

Dies wird Json zurückgeben und Sie finden WOEID in diesen bekommen ...

{ "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 hat kürzlich seinen Geo-Platz gefunden Er API, viele, die es für WOEID Suche basierend auf Breitengrad & Längenkoordinaten verwendet haben, scrambling für eine Lösung.

Nach Beitrag beschreibt, wie Sie dies die neueste Version ihrer API verwenden können:

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

Code Folgende:

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