2012-05-23 7 views

Antwort

1

die YQL Konsole verwenden, können Sie für den nächsten Ort mit einem ‚placeTypeName.code‘ von 7

suchen http://developer.yahoo.com/yql/console/

SELECT * FROM geo.places WHERE text="{$seedLat}, {$seedLong}" AND placeTypeName.code = 7 

Die REST-Abfrage für diese Abfrage würde wie etwas aussehen;

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= 

Offensichtlich $seedLat und $seedLong mit Ihrem eigenen Koordinaten zu ersetzen :)

+0

Würden Sie uns mit einem Beispiel der tatsächlichen URL zeigen, die tatsächlich funktioniert http: // query.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 arbeiten. –

+0

Versuchen Sie, Dezimalzahlen anstelle von Ganzzahlen als Parameter zu verwenden. YQL scheint nicht zu mögen, dass beide als Integer übergeben werden. – Chaoley

+0

zeigt sich auch nichts. Sag mir, was die WOEID von SELECT * FROM ist geo.places WHERE text = „6.0,105.0“ AND placeTypeName.code = 7 –

8

Für diejenigen, die immer noch versuchen, die WOEID nach Koordinaten zu suchen, sind die anderen Antworten jetzt outdat ed. Verwenden Sie die Datentabelle geo.placefinder, um den Breiten- und Längengrad nachzuschlagen, und die WOEID wird in den zurückgegebenen Ergebnissen enthalten sein.

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

Wenn ich diese Abfrage verwende gibt es das Ergebnis als null wähle * aus weather.forecast wo woeid in (woeid aus geo.places (1) where text = "{$ 17.4186947}, {$ 78.5425238}" und gflags = "R ": sein [SELECT * FROM weather.forecast WHERE WOEID IN (SELECT WOEID FROM geo.placefinder WHERE text = Ihre Abfrage sollte) – Navakanth

+0

@Navakanth" 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% 20and% 20gflags% 3D% 22R% 22)) – shshaw

+10

Dies funktioniert nicht mehr. Ich glaube, YQL hat den Zugriff auf die Tischfinder-Tabelle beendet. 'Mieter 'query_yahooapis_com den Zugang zu‚Ressource [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] 'wird abgelehnt.' – Layke

2

Es ist wie Yahoo sieht hat die geo.placefinder Tabelle nicht öffentlich gemacht, die Zugangsmittel erfordert eine gültige Anwendungs-ID und OAuth-Authentifizierung (siehe Free Non-Commercial YQL Table Usage). Wenn Sie nur die WOEID wollen und Sie kennen die Stadt und den Staat, können Sie die geo.places Tabelle statt:

select * from geo.places where text="Hanover, PA" AND placeTypeName.code = 7 

YQL Console

Wenn ein Ergebnis gefunden wird, wird die WOEID als data.query.results.place.woeid zurückgegeben werden.

Dies ist jedoch nicht perfekt. In Pennsylvania haben wir (mindestens) drei Orte, die bei der Suche nach "Hannover" (Hannover in York County, Gemeinde von Hannover in Beaver County und Hanover Township in Luzerne County) angezeigt werden können. Dies kann sich auf Ihre Ergebnisse auswirken, wenn Sie mit dieser Methode suchen. eine Postleitzahl verwenden, sollte die Genauigkeit der Ergebnisse zu erhöhen, und es ist möglich, die Ergebnisse durch die bekannte Breite/Länge mit der boundingBox Eigenschaft zu filtern:

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

Sie noch brauchen, um einen von mehreren erforderlichen Schlüsseln zur Verfügung stellen (text ist ein gültiger erforderlicher Schlüssel), so dass dies nicht als Suche ausschließlich nach geographischen Koordinaten gilt, aber hoffentlich zählt dies als zweitbeste.