緯度、経度より標高を返す web service を発見。
とりあえず、Windows Formsで作ってみた。
Compact Framework 5.0 で、ネームスペースサポートされているのかな・・・
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
using System.Web;
using System.Diagnostics;
using System.Xml;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
using System.Web;
using System.Diagnostics;
using System.Xml;
namespace Uchukamen.WZero3
{
class Altitude
{
private const string webServiceUrl = "http://lab.uribou.net/ll2h/";
{
class Altitude
{
private const string webServiceUrl = "http://lab.uribou.net/ll2h/";
public static float GetAltitude(string latitude, string longitude)
{
string encodedUrl = GetEncodedUrl(latitude, longitude);
{
string encodedUrl = GetEncodedUrl(latitude, longitude);
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(encodedUrl);
req.Method = "GET";
req.Method = "GET";
float height = 0F;
int err = 0;
string msg = "";
int err = 0;
string msg = "";
// レスポンスの取得と読み込み
WebResponse res = req.GetResponse();
using (Stream resStream = res.GetResponseStream())
using (XmlTextReader reader = new XmlTextReader(resStream))
{
while (!reader.EOF)
{
if (reader.IsStartElement("height"))
height = reader.ReadElementContentAsFloat();
else if (reader.IsStartElement("error"))
err = reader.ReadElementContentAsInt();
else if (reader.IsStartElement("message"))
msg = reader.ReadElementString("message");
else
reader.Read();
}
if (err != 0)
throw (new Exception(msg));
}
return height;
}
WebResponse res = req.GetResponse();
using (Stream resStream = res.GetResponseStream())
using (XmlTextReader reader = new XmlTextReader(resStream))
{
while (!reader.EOF)
{
if (reader.IsStartElement("height"))
height = reader.ReadElementContentAsFloat();
else if (reader.IsStartElement("error"))
err = reader.ReadElementContentAsInt();
else if (reader.IsStartElement("message"))
msg = reader.ReadElementString("message");
else
reader.Read();
}
if (err != 0)
throw (new Exception(msg));
}
return height;
}
private static string GetEncodedUrl(string latitude, string longitude)
{
string url = webServiceUrl + "?ll="
+ latitude + "," + longitude;
string encodedUrl = HttpUtility.HtmlEncode(url);
return encodedUrl;
}
}
}
{
string url = webServiceUrl + "?ll="
+ latitude + "," + longitude;
string encodedUrl = HttpUtility.HtmlEncode(url);
return encodedUrl;
}
}
}
呼び出し
textBoxAltitude.Text= Altitude.GetAltitude(textBoxLatitude.Text, textBoxLongitude.Text).ToString();
textBoxAltitude.Text= Altitude.GetAltitude(textBoxLatitude.Text, textBoxLongitude.Text).ToString();
>Compact Framework 5.0 で、ネームスペースサポートされているのかな・・・
ゲッ、System.Web がない。
HttpUtility.HtmlEncodeしか使ってなくてよかった。
using System;using System.Collections.Generic;using System.Text;using System.Net;using System.IO;using System.Diagnostics;using System.Xml;namespace Uchukamen.WZero3{ class Altitude { private const string webServiceUrl = "http://lab.uribou.net/ll2h/"; public static float GetAltitude(string latitude, string longitude) { string encodedUrl = webServiceUrl + "/?ll=" + latitude + "," + longitude; HttpWebRequest req = (HttpWebRequest)WebRequest.Create(encodedUrl); req.Method = "GET"; float height = 0F; int err = 0; string msg = ""; // レスポンスの取得と読み込み WebResponse res = req.GetResponse(); using (Stream resStream = res.GetResponseStream()) using (XmlTextReader reader = new XmlTextReader(resStream)) { while (!reader.EOF) { if (reader.IsStartElement("height")) height = reader.ReadElementContentAsFloat(); else if (reader.IsStartElement("error")) err = reader.ReadElementContentAsInt(); else if (reader.IsStartElement("message")) msg = reader.ReadElementString("message"); else reader.Read(); } if (err != 0) throw (new Exception(msg)); } return height; } }}
WGS84形式で標高を取得する方法が判りました。ありがとうございます。同じく、コードを含め教えて欲しいのですが、移動前:緯度a、経度a、高度a移動先:緯度b、経度b、高度bが判るとします。この移動前-移動先の距離 これを算出したいのですが、どのようにやればいいのかわかりません。国土地理院もみましたが、数式が難しく、ちっともわかりません。GPSでデータ計測をしてますので、5~10sec毎に1pointを取得した情報データにこの処理をしたいと思っています。すいませんが、教えてください。