数値地図

国土交通省の国土数値情報ダウンロードサービスを利用して数値地図を取ってきてみた。

データのフォーマットを参考にして北海道の道路のデータを画像にしてみた
礼文島以外は輪郭出てるってことは海岸の道路整備されてるってことですよね。
090813_bf9d7f6b68f23e1ed1be106726e5ee33.png


参考URL:国土交通省国土計画局GISHP【インターネットサービス】



GPSとの連携 - 緯度と経度を得る


さて、地図だけあっても面白くないので地図を使って遊んでみようかなと。
なんとなく思いついたのはカーナビ。
車にカーナビとしてパソコン乗せれば、そのほかのこともいろいろできないものかなーとか思っているしだいであります。

GPSの受信機ですが、ちょうど手元にあったIODATAのPCGPSを利用することにしました。(http://www.iodata.jp/products/gps/pcgps/)

すでに生産終了な上に、ソフトがwindows2000までとのことでしたが、PCカードスロットに挿してみると仮想COMポートとして認識されていました。
「これは・・・」とおもいターミナルで見てみると文字が出てきており、
どうやらNMEA-0183というフォーマットとのこと。

ちなみにそのフォーマットの詳細に関してはこちらへ。
http://bg66.soc.i.kyoto-u.ac.jp/forestgps/nmea.html


GPSとの連携 - 住所を得る


さて、この得られた経度と緯度から住所にできないかなと探してみると
ありました位置参照情報ダウンロードサービス

緯度と経度からその場所の番地までを絞り込むことができます。
町名のついている地域の形状や境界線まではわかりませんが、おおまかな住所までは絞り込むことができそうです。


//@args
//dt:位置参照情報DataTable
private DataRow GetAddress(DataTable dt, double lat, double lng)
{
double region = 0.001;
DataRow[] selectedRow;
int foundRowCount = 0;
string expression = string.Empty;

//緯度と経度である程度絞込み
while (foundRowCount == 0)
{
expression = "緯度< " + (lat + region).ToString() + " AND 緯度> " + (lat - region).ToString()
+ " AND 経度< " + (lng + region).ToString() + " AND 経度> " + (lng - region).ToString();
selectedRow = dt.Select(expression);
foundRowCount = selectedRow.Length;

if (selectedRow.Length == 0)
{
region += 0.001;
}
}

selectedRow = dt.Select(expression);

//絞込み
DataRow latMinRow;
double latMin = double.MaxValue;
for (int i = 0; i < foundRowCount; i++)
{
if (Convert.ToDouble(selectedRow[i]["緯度"]) < latMin)
{
latMin = Convert.ToDouble(selectedRow[i]["緯度"]);
latMinRow = selectedRow[i];
}
}



return (latMinRow);
}



経度と緯度から住所絞り込むコード書いてみた(C#)
結局やってることは入力した緯度・経度とDataTableに登録されてる住所の緯度・経度の誤差が一番小さくなる部分を探してるだけ.なのである町の端っこでは隣の町の名前になったりするかもしれないけどそういうもんだと思って使えば気にならない(笑

ほんと何でもあって便利すぎる。

コメント(0)

コメントを投稿する