2009年09月10日

C#で Google Static Map API ラッパークラスを書いてみたよ

さて、Google Static Mapの仕様がわかったので、それをウィンドウズアプリケーションで利用するためにC#でラッパークラスを作ってみました。

以下コードですが、すべての動作確認はまだしてません。

おかしなところがあったらぜひコメントでご一報を。

拡張機能として、OptionToStringという関数を追加してあります。
これで必要なプロパティをセットしたら、URLオプションが簡単に作成されます。

namespace GoogleMapLapper
{
public class GoogleStatickMapParameters
{
// center (複数のマーカーが存在しない場合は必須) 地図のすべての端から等距離の位置にある地図の中心を定義します。このパラメータは、地球表面の一意の場所を特定するカンマで区切られた {緯度,経度} のペア (例: 「40.714728,-73.998672」) を取ります。詳細については、下記の緯度と経度を参照してください。
public double Latitude = 0;
public double Longitude = 0;
public string Center{
get
{
string s;
s = Latitude.ToString() + "," + Longitude.ToString();
return s;
}
}
// zoom(複数のマーカーが存在しない場合は必須)は地図の拡大レベルを決定する「ズーム レベル」を定義します。このパラメータは、目的の領域のズーム レベルに対応した数値を取ります。詳細については、下記のズーム レベルを参照してください。
// 0-21まで有効 実質は19まで
public int Zoom = 0;
// size(必須)は地図画像の矩形寸法を定義します。このパラメータは、valuexvalue の形式の文字列を取ります。1 つ目の値は横軸のピクセル数を示し、2 つ目の値は縦軸のピクセル数を示します。たとえば、500x400 は幅 500 ピクセル、高さ 400 ピクセルの地図を定義します。幅が 100 ピクセル以下の静的地図を作成すると、「Powered by Google」ロゴは自動的にサイズが縮小されます。
public int SizeX = 500;
public int SizeY = 500;
public string Size { get { return SizeX.ToString() + "x" + SizeY.ToString(); } }
// format(省略可)は作成される画像の形式を定義します。デフォルトでは、Static Maps API で GIF 画像が作成されます。GIF、JPEG、PNG などの形式が作成可能です。どの形式を使用するかは、どのように画像を掲示したいかによって異なります。JPEG は通常、圧縮率が大きく、GIF と PNG はよりよい画質となります。詳細については、画像の形式を参照してください。
public string Format = "GIF";
// maptype(省略可)は作成する地図のタイプを定義します。可能なマップ タイプ値には satellite、terrain、hybrid、mobile などがあります。詳細については、下記の Static Maps API マップ タイプ を参照してください。
public string MapType = "roadmap";
// markers(省略可)は指定された場所の画像に添付する 1 つ以上のマーカーを定義します。このパラメータは、パイプ記号 (|) で区切られたマーカー定義の文字列を取ります。地図に複数のマーカーを添付する場合、center パラメータとzoom パラメータを指定する必要はありません (通常は必須)。詳細については、下記の 静的マップ マーカー を参照してください。
// マーカー宣言のサンプル形式は {latitude},{longitude},{size}{color}{alphanumeric-character} です。特に、文字列のサイズ、色、英数字の値がカンマで区切られていない点に注意してください.

public List Markers;
public void SetMarker(double lat,double lon, string size,string color)
{
GMapMarker g = new GMapMarker();
g.Longitude = lon;
g.Latitude = lat;
if(size != ""){ g.Size = size;}
if (color != "") { g.Color = color; }
Markers.Add(g);
}
public string MarkersToString
{
get
{
if (Markers.Count == 0) { return ""; }
string s = "";
foreach (GMapMarker g in Markers)
{
if (s != "") { s = s + "|"; }
if (g.Latitude * g.Longitude != 0)
{
s = g.Latitude.ToString() + "," + g.Longitude.ToString();
}
s = s + ",";
s = s + g.Size + g.Color;
if (g.AlphanumericCharacter != "")
{
s = s + g.AlphanumericCharacter;
}
}
return s;
}
}

// path(省略可)は、指定された場所で画像にオーバーレイする、2 つ以上のポイントが接続した 1 本の経路を定義します。このパラメータは、パイプ記号 (|) で区切られたポイント定義の文字列を取ります。地図に経路を添付する場合、center パラメータとzoom パラメータを指定する必要はありません (通常は必須)。詳細については、下記の 静的マップ マーカー を参照してください。
public List Path;
public void SetPath(double lat,double lon)
{
GMapPath g = new GMapPath();
g.Latitude = lat;
g.Longitude = lon;

}
public string PathToString
{
get
{
if (Path.Count == 0)
{
return "";
}
string s = "";
foreach (GMapPath g in Path)
{
if (s != "") { s = s + "|"; }
if (g.Latitude * g.Longitude != 0)
{
s = g.Latitude.ToString() + "," + g.Longitude.ToString() + "|";
}
}
if (s.Length != 0)
{
s = s.Substring(0, s.Length - 1);
}
return s;
}
}
// span(省略可)は、緯度と経度の組み合わせで表現される地図画像の最小の「ビューポート」を定義します。静的地図サービスはこの値を受け取って適切なズーム レベルの地図を作成し、地図の中心点から提供される span 値をすべて組み入れます。作成された地図は、地図の矩形の大きさによって、含める緯度または経度の境界が大きくなる場合があります。zoom が指定された場合は、span は無視されます。
public GMapSpan Span = new GMapSpan();

// frame(省略可)は、作成された画像を青い枠線のフレームで囲むかどうかを指定します。このフレームの枠は 5 ピクセルで透明度が 55% の青い枠になります。
public string Frame = "";
// hl(省略可)はマップ タイルのラベルを表示する言語を定義します。このパラメータは限られた国でしかサポートされていません。リクエストされた言語がタイル セットのサポートができていない場合、そのタイル セットのデフォルト言語が使用されます。
public string Hl = "";
// key (必須) は、URL 要求が実行されるドメインに対する Maps API キーを指定します。Maps API キーをまだ取得していない場合は、こちらから取得してください。
public string Key = "";
// sensor (必須) は、静的マップを要求しているアプリケーションがユーザーの位置情報を取得するのにセンサーを用いているかを指定します。このパラメータは現在、すべての静的マップのリクエストに必須となっています。詳細については、下記のセンサーを参照してください。
public String Sensor = "false";


public string OptionToString
{
get
{
string s="";
if (Latitude * Longitude != 0)
{
s = "center=" + Center;
}
if (SizeX > 0 & SizeY > 0)
{
if (s.Length > 0) s = s + "&";
s = s + "size=" + Size;
}
if (Zoom > 0)
{
if (s.Length > 0) s = s + "&";

s = s + "zoom=" + Zoom.ToString();

}
if (Format != "")
{
if (s.Length > 0) s = s + "&";

s = s + "format=" + Format;

}
if (MapType != "")
{
if (s.Length > 0) s = s + "&";
s = s + "maptype=" + MapType;
}
if (Markers != null)
{
if (s.Length > 0) s = s + "&";
s = s + "markers=" + MarkersToString;
}
if (Path != null)
{
if (s.Length > 0) s = s + "&";
s = s + "path=" + PathToString;
}
if (Span.Latitude * Span.Longitude != 0)
{
if (s.Length > 0) s = s + "&";
s = s + "span=" + Span.Latitude.ToString() + "," + Span.Longitude.ToString();

}
if (Frame != "")
{
if (s.Length > 0) s = s + "&";
s = s + "frame=" + Frame;
}
if (Hl != "")
{
if (s.Length > 0) s = s + "&";
s = s + "hl=" + Hl;
}
if (Key != "")
{
if (s.Length > 0) s = s + "&";
s = s + "key=" + Key;
}
if (Sensor != "")
{
if (s.Length > 0) s = s + "&";
s = s + "sensor=" + Sensor;
}
return s;
}
}

}
public class GMapMarker
{
//{latitude} (必須) は、小数点以下 6 桁の精度を持つ緯度の値を指定します。
public double Latitude = 0;
//{longitude} (必須) は、小数点以下 6 桁の精度を持つ経度の値を指定します。
public double Longitude = 0;
//{size}(省略可)は {tiny, mid, small} のセットのマーカーのサイズを指定します。size パラメータが設定されていない場合、マーカーはデフォルト (標準) サイズで表示されます。
public string Size = "mid";
//{color}(省略可)は {black, brown, green, purple, yellow, blue, gray, orange, red, white} のセットから色を指定します。
public string Color = "red";
//{alphanumeric-character}(省略可)は {a〜z、0〜9} のセットから小文字の英数字を 1 文字指定します。alphanumeric-character パラメータが表示できるのは、デフォルトと mid サイズのマーカーだけに限られます。tiny と small のマーカーでは英数字を表示できません。
public string AlphanumericCharacter = "";
}
public class GMapPath
{
//{latitude} (必須) は、小数点以下 6 桁の精度を持つ緯度の値を指定します。
public double Latitude = 0;
//{longitude} (必須) は、小数点以下 6 桁の精度を持つ経度の値を指定します。
public double Longitude = 0;
}
public class GMapSpan
{
//{latitude} (必須) は、小数点以下 6 桁の精度を持つ緯度の値を指定します。
public double Latitude = 0;
//{longitude} (必須) は、小数点以下 6 桁の精度を持つ経度の値を指定します。
public double Longitude = 0;
}
}
posted by (;D)笑男 ◆LeBIz0ZWfs at 19:30| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。