スレッド:備忘録
備忘録 投稿者:マーシー 投稿日:2015/03/04(Wed) 15:52:35 home No.725
あにねこさん、こんにちは。
先日は、大変お世話になりました。

ホームページの書換も一段落しましたので、
教えて頂いたことを備忘録として投稿させていただきます。

今度「あにねこ電脳覚書」を更新する際には、
いくつか使って頂けるとありがたいです。
Google Map API の改造 投稿者:マーシー 投稿日:2015/03/04(Wed) 15:55:34 home No.726
<国土地理院の地図をGoogleMap API に表示する>

(1) var map = new google.maps.Map  から
scaleControl: true }); までの
コードの替わりに、次のコードを書き込む

var mapOpt = {
zoom: Number(param.zoom),
center: new google.maps.LatLng(param.lat, param.lng),
scaleControl: true,     //スケールを付ける
overviewMapControl: true,  //オーバービュー機能を有効にする
mapTypeId: google.maps.MapTypeId.TERRAIN, //google地形地図がデフォルト
mapTypeControlOptions: {
mapTypeIds: [  //地図の表示順番上から
'地理院地図', //1行は5文字以内で
'地理院淡色', //6文字目以上は改行される
google.maps.MapTypeId.TERRAIN,
google.maps.MapTypeId.ROADMAP,
google.maps.MapTypeId.SATELLITE,
google.maps.MapTypeId.HYBRID
], //地図の選択をドロップダウンメニューにする
style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
}
};

(2) 国土地理院標準地図を定義(prototype.は省略不可)
function stdMap() {
stdMap.prototype.tileSize = new google.maps.Size(256,256);
stdMap.prototype.maxZoom = 17;
stdMap.prototype.name = '地理院地図';
stdMap.prototype.alt = '国土地理院標準地図'; //マウスを重ねたとき表示
stdMap.prototype.getTile = function( tile, zoom, ownerDocument ) {
var tileImg = ownerDocument.createElement('img');
var url= "http://cyberjapandata.gsi.go.jp/xyz/std/"
+ zoom.toString() + "/" + tile.x.toString() + "/"
+ tile.y.toString() + ".png";
tileImg.src = url;
tileImg.style.width = this.tileSize.width + 'px';
tileImg.style.height = this.tileSize.height + 'px';
return tileImg;
};
}

(3) 国土地理院淡色地図も同様に定義 
stdMap → paleMap に全部を替える
地理院地図 → 地理院淡色(例)、また 標準地図 → 淡色地図 に替える
var url= "http://cyberjapandata.gsi.go.jp/xyz/pale/" に替える

(4) 地理院地図をセットし、地理院地図をデフォルトに変更
var mapDiv = document.getElementById('map_canvas');
var map = new google.maps.Map(mapDiv,mapOpt);
map.mapTypes.set( '地理院地図', new stdMap() );
map.mapTypes.set( '地理院淡色', new paleMap() );
map.setMapTypeId( '地理院地図');
});
Google Map API の改造2 投稿者:マーシー 投稿日:2015/03/04(Wed) 15:57:55 home No.727
<地理院地図が表示されるときに、著作権を表示する>

国土地理院シンボルマークは以下のものがあり、
リンク以外で利用する際は、様々な規制があります
(標準カラー版)  http://www.gsi.go.jp/common/000051403.gif
(ロゴ組み合わせ) http://www.gsi.go.jp/common/000051404.png
(モノクロ版)   http://www.gsi.go.jp/common/000051592.gif

(1) 国土地理院ロゴマークを地図の右下に表示し、利用規約とリンクさせる

var gsiLOGO = null; // 国土地理院ロゴマーク
gsiLOGO = document.createElement('div');
gsiLOGO.innerHTML = "<a href='http://www.gsi.go.jp/kikakuchousei/kikakuchousei40182.html' target='_blank'>"
+ "<img src='http://www.gsi.go.jp/common/000051590.png' width='35' height='23' alt='国土地理院利用規約'></a>";
gsiLOGO.style.display = "inline";
map.controls[ google.maps.ControlPosition.BOTTOM_RIGHT ].push( gsiLOGO );

(2) google地図を表示する場合はロゴマークを消す
google.maps.event.addListener( map, 'maptypeid_changed', function() {
var mapTyp = map.getMapTypeId();
if ( mapTyp == '地理院地図' || mapTyp == '地理院淡色') {
gsiLOGO.style.display = "inline";
} else {
gsiLOGO.style.display = "none";
}
});
Google Map API の改造3 投稿者:マーシー 投稿日:2015/03/04(Wed) 15:59:27 home No.728
<中央十字マークを別のレイヤーとして表示する>

(1) 次のコードをたとえば centercross.kml というファイル名で同じフォルダに保存します。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<ScreenOverlay>
<name>Simple crosshairs</name>
<description>This screen overlay uses fractional positioning to put the
image in the exact center of the screen</description>
<Icon> <href>http://developers.google.com/kml/documentation/images/crosshairs.png</href>
</Icon>
<overlayXY x="0.5" y="0.5" xunits="fraction" yunits="fraction"/>
<screenXY x="0.5" y="0.5" xunits="fraction" yunits="fraction"/>
<rotationXY x="0.5" y="0.5" xunits="fraction" yunits="fraction"/>
<size x="0" y="0" xunits="pixels" yunits="pixels"/>
</ScreenOverlay>
</kml>

 上記は Google Earth のKMLチュートリアルのサンプル集にあったもので、
https://developers.google.com/kml/documentation/kml_tut?hl=ja
センターマークは白色なので、好きな色の好きなマークに変更して下さい。
また、<desucption 説明文>は日本語でわかりやすいものに変更して下さい。

 
(2) 次のコードを<head></head>本文に書き加える

var url1 = baseurl + 'centercross.kml';
var crsLayer = new google.maps.KmlLayer(url1, {
preserveViewport: true
});
document.getElementById('crs').onchange = function() {
crsLayer.setMap(this.checked ? map : null);
};

(3) 次のコードを<body></body>に書き加える
 //デフォルトでは非表示にする
<div style="float:left;"><input id="crs" type="checkbox" />中心十字</div>
Google Map API の改造4 投稿者:マーシー 投稿日:2015/03/04(Wed) 16:00:44 home No.729
<軌跡データとウェイポイントを別のレイヤーに表示する>

(1) トラックのみとアイコンのみのKMLファイルを作ります。
 アイコンのみのKMLファイル routemap_icn.kmlを routemap.kmlと差し換える
 トラックのみのKMLファイル routemap_trk.kml (頭は同じ名前)を同じフォルダに入れる 

(2) ctaLayer.setMap(map); の後に次のコードを入れる。

  //変数url0を定義し、アイコンkmlファイル名の語尾を換えて代入する
var url0 = param.url.replace('_icn','_trk');
var trkLayer = new google.maps.KmlLayer(url0, {
preserveViewport: true
});
trkLayer.setMap(map);

document.getElementById('trk').onchange = function() {
trkLayer.setMap(this.checked ? map : null);
};

(3) <body></body>にある「GPSデータ」→「GPStrack」に替え
 その後に次のコードを書き加える

<div style="float:left;"><input id="gps" type="checkbox" checked="checked" />
IconData</div> //デフォルトでは表示する
Re: 備忘録 投稿者:あにねこ 投稿日:2015/03/04(Wed) 19:24:51 No.730
マーシーさん、こんばんは。
備忘録の投稿ありがとうございます。
次回、更新するとすれば、
・Googleマップの航空写真の表示
・OpenLayers V3
などを考えていますが、Google Map API で
地理院地図を表示する方法についても
(余力があれば)検討させて頂きます。
ルート地図の不具合について 投稿者:マーシー 投稿日:2015/03/05(Thu) 09:40:16 home No.731
あにねこさん、あはようございます。

いつもお世話になっています。
質問があったのですが、いいでしょうか。

Google Map APIで軌跡とウェイポイントを分けて表示する場合
アイコンが軌跡の下になってクリックしにくいことがしばしば起こります。
いろいろコードをいじったのですが、原因がわかりません。

修正する方法を教えて頂けないでしょうか。
お時間があるときでいいので、よろしくお願いします。
Re: ルート地図の不具合について 投稿者:あにねこ 投稿日:2015/03/05(Thu) 18:47:46 No.732
マーシーさん、こんばんは。
不具合が確認できるページはどこでしょう?
Re^2: ルート地図の不具合について 投稿者:マーシー 投稿日:2015/03/06(Fri) 09:10:46 home No.733
あにねこさん、おはようございます。

失礼しました。
http://park16.wakwak.com/~marsie/nagano.htm#
現象は<map>のすべてで確認できました。
「富山県の山」の2段目は、軌跡とアイコンを
MAPにセットする順番を替えて見ました。
一見これで成功したようにみえますが、
アイコンが軌跡に隠れてしまうことの方が多いです。

よろしくお願いします。
Re^3: ルート地図の不具合について 投稿者:あにねこ 投稿日:2015/03/06(Fri) 20:02:53 No.734
マーシーさん、こんばんは。

> 「富山県の山」の2段目は、軌跡とアイコンを
> MAPにセットする順番を替えて見ました。
> 一見これで成功したようにみえますが、
> アイコンが軌跡に隠れてしまうことの方が多いです。

IconData を一度チェックを外して、もう一度入れるとうまく行きますね。
やはりレイヤーを表示する順番が関係するのではないかと思います。
Re^4: ルート地図の不具合について 投稿者:マーシー 投稿日:2015/03/07(Sat) 09:46:35 home No.735
あにねこさん、おはようございます。

お忙しい所、ありがとうございました。
その方向で、改良してみます。

- WebForum -