ちょっとまじめな話。。。
Android + Windows(サーバー)という組み合わせで、いろいろな方法を模索しています。
この所、GPSから受信した経緯度を使って、MapViewにピンを打ってみたりしていましたが、
ただ、これでは、自分が移動しないとピンも移動してくれないんですよね。。。
そこで今回は、直接、Android とつなげる訳ではありませんが、MapViewに自動的に移動する物体を表示させる事を、最終目標としています。
方法としては、
1) Google Maps API WebService を利用して、移動物の経路情報を取得する。
2) 経路情報をデコードし、SQL Server に保存する。
3) 移動物用のテーブルを用意し、一時間に50km進む移動物を、2秒間隔で更新する。
という方法をとりたいと思います。
で、第一回目の今回は、
1) Google Maps API WebService を利用して、移動物の経路情報を取得する。
を実施してみようと思います。
まずは、Google Maps API WebService を呼び出す所です。
string origin = System.Web.HttpUtility.UrlEncode(textBox1.Text, Encoding.UTF8);
string destination = System.Web.HttpUtility.UrlEncode(textBox2.Text, Encoding.UTF8);
string mode = "driving";
string url = "http://maps.googleapis.com/maps/api/directions/xml?"
+ "origin=" + origin + "&destination=" + destination + "&mode=" + mode + "&sensor=false";
※textBox1, textBox2 にはそれぞれ、出発地・目的地を入れます。
Google Maps API WebService を呼び出すときに注意する点としては、、、
・C#で扱いやすいように、xmlで返るようにしています。
・検索条件(出発地・目的地)には、住所やランドマークなどを日本語で入力すると思いますので、URL Encode しています。
・URLの一番最後の「sensor」は必須オプションです。※おまじないだと思ってください。
これを、 XmlDocument を使って呼び出します。
XmlDocument doc = new XmlDocument(); doc.Load(url);
取得した doc を確認すると、返信されたxmlが返ってきます。
あとは、XPath を使って、データを取得しましょう。
私は直接、要素をしていする方法を取りました。
string status = doc.DocumentElement.SelectSingleNode("/DirectionsResponse/status").InnerText;
if (status != "OK")
{
textBox3.Text = status;
}
else
{
string polyline = doc.DocumentElement.SelectSingleNode("/DirectionsResponse/route/overview_polyline", nmr).InnerText;
}
経路検索が行えなかった場合には、「status」に OK 以外が返ってきますので、必ずハンドリングするようにしましょう。
サンプルは、今後使用する、「overview_polyline」を取得する方法を記載しています。
次回は、overview_polyline をデコードします。
