Patrick Sperneder

AstronomyLib Part 2

Um die Bibliothek zielführend einsetzen zu können, benötigen wir des weiteren einen Webservice mithilfe dessen wir die Koordinaten ( Latitude und Longitude ) ermitteln. Diese Daten holen wir uns vom Webservice Yahoo GeoCode.

Bevor wir nun aber zur Tat schreiten können um Daten von dem Dienst Yahoo GeoCode zu erhalten, müssen wir einen Developer Account bei Yahoo einrichten. Dies ist relativ unkompliziert und kostet auch nichts, ist dieser Account nun erstellt, müssen wir einen APP ID Code für unsere Abfragen beantragen. Mit diesem Code ist es möglich 50.000 Abfragen pro Tag auf obgenannten Service zu machen.

Die Abfrage für einen bestimmten Ort des GeoCode Service ist ein Uri  in dem die Parameter der Abfrage integriert sind.

z.B.: für Graz : http://local.yahooapis.com/MapsService/V1/geocode?appid=XYZ…….&city=Graz .

 

Für diesen Zweck erstellen wir uns eine statische Klasse die die Abfragen mittels einem System.Net.WebClient löst. Der zurückgegeben Wert einer solchen Abfrage ist ein XML Fragment mit den entsprechenden Elementen und Attributen also Werten.

Auch für die Rückgabewerte erstellen wir uns eine Klasse die diese Eigenschaften kapselt um sie nachher komfortabel in der Anwendung nutzen zu können.

ACHTUNG !

Der Code enthält keinerlei Fehlerbehandlungsroutinen und blockiert die Oberfläche der Anwendung (wegen dem direkten Aufruf des WebClients aus dem UIThread !) , es soll lediglich die Vorgehensweise verdeutlicht werden. Diese Vorgehensweise entspricht keinesfalls irgendwelchen Design Richtlinien.

 

Die statische Klasse YahooGeoCodeAPIWrapper :

  1. public static class YahooGeoCodeAPIWrapper
  2.     {
  3.         /// <summary>
  4.         /// Gets the geo data for the given city name.
  5.         /// </summary>
  6.         /// <param name="API_CODE">The API  CODE.</param>
  7.         /// <param name="CityName">Name of the city.</param>
  8.         /// <returns></returns>
  9.         public static YahooGeoCodeResult GetGeoDataForCityName(string API_CODE, string CityName)
  10.         {
  11.             using (WebClient client = new WebClient())
  12.             {
  13.                 // Abfrage Uri erstellen ...
  14.                 string uri = "http://local.yahooapis.com/MapsService/V1/geocode?appid=" + API_CODE + "&city=" + CityName;
  15.                 byte[] bytes = client.DownloadData(uri);
  16.                 return new YahooGeoCodeResult(Encoding.ASCII.GetString(bytes));
  17.             }
  18.         }
  19.     }

 

Die Klasse die die Ergebnisse der Abfrage kapselt :

  1. /// <summary>
  2.     /// Stellt eine Antwort auf eine Abfrage des Yahoo GeoCode Webservices dar.
  3.     /// </summary>
  4.     public sealed class YahooGeoCodeResult
  5.     {
  6.         #region ctor
  7.         public YahooGeoCodeResult(string xmlfragment)
  8.         {
  9.             XmlDocument doc = new XmlDocument();
  10.             doc.LoadXml(xmlfragment);
  11.             Latitude = Double.Parse(doc.DocumentElement.ChildNodes[0].ChildNodes[0].InnerText );
  12.             Longitude = Double.Parse(doc.DocumentElement.ChildNodes[0].ChildNodes[1].InnerText );
  13.             City = doc.DocumentElement.ChildNodes[0].ChildNodes[3].InnerText;
  14.             State = doc.DocumentElement.ChildNodes[0].ChildNodes[4].InnerText ;
  15.         }
  16.         #endregion
  17.         #region props
  18.         public double Latitude { get; set; }
  19.         public double Longitude { get; set; }
  20.         public string State { get; set; }
  21.         public string City { get; set; }
  22.         #endregion
  23.     }

Kommentare

Keine Kommentare

Kommentar abgeben

(verpflichtend) 

(verpflichtend) 

(optional)

(verpflichtend)