GoogleMapの色を変えてみた|Google Maps API V3

昨今のGoogleMapはすごいんですね。地図上の要素に対して色が設定できたりするんですね。たとえば白地図みたいにしたり、白地図の中の特定の建造物にのみ色をつけたり、なんてことも自由自在。

まずは下の地図をごらんくださいませ。

これは、東京の地図のベース色を少し変えて、公園に緑色をつけたものです。
こうしてみると割と広い公園あるんだなあ・・・という感じです。

さて、具体的な設置の方法ですが、なんとV3からはAPIキーがいらなくなりました。
ちょっと面倒だったので大変助かります。

コードは以下の通りです。

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
function initialize() {
	var stylez = [
		{
		stylers: [
		{ lightness: 32 },
		{ gamma: 1.91 },
		{ visibility: "simplified" },
		{ saturation: -39 },
		{ hue: "#ff0000" }
		]
		},{
		featureType: "poi.park",
		stylers: [
		{ visibility: "simplified" },
		{ hue: "#00ff33" },
		{ lightness: -49 },
		{ saturation: 98 },
		{ gamma: 0.57 }
		]
		}
	];
	var latlng = new google.maps.LatLng(35.709897,139.81081);
	var myOptions = {
		zoom: 10,
		center: latlng,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

	var styledMapOptions = {
	}
	
	var setMapType =  new google.maps.StyledMapType(stylez,styledMapOptions);
	
	map.mapTypes.set('park', setMapType);
	map.setMapTypeId('park');
}
</script>

1行
api呼んでます。
sensorの値は、設置するだけならfalseでOKです。

3行
全体をfunction化しています。

4行
var stylezから始まっている、スタイルを定義してるらしきあたり。これ、本家が用意したウィザード式のジェネレータがあります。

http://gmaps-samples-v3.googlecode.com/svn/trunk/styledmaps/wizard/index.html

こちらを適当にいじればなんとなーく色々と加工できます。

一通りいい感じなったなーと思ったら、画面右にあるメニューの下にあるshow JSONをクリックすると、このstylezとして定義する値の一群が取得できるので、それをそのままこんな感じでコピペすればOKです。

24行
緯度経度を定義しています。変数は任意のもので、書式はそのまま使います。
自分が求める緯度経度は、ネット上の様々なサイトでうまいこと取得できます。
たとえばこんなところとか。

http://www.geocoding.jp/

それを括弧の中の値らしきところにべたーーっと。

25行
var myOptionsからの記述には諸々の地図のオプションを設定します。割と見たまんまです。
centerに割り当ててる変数は、上で緯度経度を定義した変数です。要は指定した緯度経度の地点を中心にしろ、って定義ですね。

30行
var mapから始まる記述で実際にmapを書き出します。括弧の中に指定するIDは、あらかじめbody内に用意しておきます。今回ヘッダの中では’map_canvas’としているので、body内で以下のような空divを用意しました。

<div id="map_canvas" style="width: 500px; height: 500px"></div>

32行
で、ここまででマップ自体は設置完了なのですが、先に定義したスタイルを当てているのがこの行以下の部分
ほぼそのまま書くだけでOKです。’park’と定義した部分は、任意の名前で37行目と38行目の記述がそろっていればOK。

関数呼び出し
定義した関数を、onloadのタイミングで呼んでやる必要があります。

	window.onload = function() {
		initialize();
	};

取り急ぎ設置できればいいやレベルで書きましたが、おそらくカスタマイズの幅はもっと恐ろしく広いはずです。ポインターアイコンなんかも、自分のサーバにおいた画像に自由に変えられるみたい。

とりあえずはその辺はまた機会に。