スレッド:Google地図の追加
Google地図の追加 投稿者:あにねこ 投稿日:2014/11/05(Wed) 07:41:49 No.680
Google地図を追加した時、地図の切り替えで右上に出てくる青い枠の大きさや
フォントの大きさが変わるという問題がありましたが、
gsimaps.html に以下の2行を追加すると直ります。

<title>ルート地図</title>
<style type="text/css">
html,body { overflow:hidden;height:100%; }
*+html #map_canvas { height:expression(document.documentElement.clientHeight-30+'px'); } /* IE7 */
* html #map_canvas { height:expression(document.body.clientHeight-30+'px'); } /* IE6 */
div.olControlLayerSwitcher { width:200px!important; } ←追加
.layersDiv { font-size: 13px; } ←追加

テストページ:
http://anineco.nyanta.jp/test.html の gsimaps+google.html

ソースファイル(マウス右クリックで保存して下さい):
http://anineco.nyanta.jp/gsimaps+google.html
Re: Google地図の追加 投稿者:マーシー 投稿日:2014/11/05(Wed) 13:33:54 home No.681
あにねこさん、こんにちは。

改良ありがとうございます。
まだ以前の gsimaps のままなので、これから少しずつ試して行こうと思います。
Re^2: Google地図の追加 投稿者:ヤマトタケル 投稿日:2014/11/06(Thu) 07:30:11 home No.682
あにねこさん、おはようございます。

この修正をさっそく私のテストページで試し、すでに自HPに反映させていただきました。
http://homepage3.nifty.com/uyou3po/test141103.htm
#N-3 gsimaps-n3
#Xs1 gsimaps-Xs1

ご報告まで。
Re^2: Google地図の追加 投稿者:マーシー 投稿日:2014/11/07(Fri) 12:57:41 home No.683
あにねこさん、こんにちは。

新バージョンgsimaps 試験的に書き換えに成功しました。
中心十字線、GOOGLEMAPも正常に切り替えできます。
ルート図とアイコンも別々にON/OFFできます。(参照先↑)

var url0 = param.url.replace('_i','_t');  //変数url0を定義し、アイコンkmlファイル名の語尾を換えて代入する
var trkLayer = new OpenLayers.Layer.Vector('ルート軌跡', { //トラックレイヤーを定義する
projection: proj_4326,
strategies: [new OpenLayers.Strategy.Fixed()],
protocol: new OpenLayers.Protocol.HTTP({
url: url0,                 //url は url0 にあります
format: new OpenLayers.Format.KML({
extractStyles: true,
extractAttributes: true,
maxDepth: 2
})
})
});
map.addLayer(trkLayer);  //ルート軌跡のレイヤーを追加する


地図投影法が、旧コードから球面メルカトル替わったんですね。
ありがとうございました。
Re^3: Google地図の追加 投稿者:あにねこ 投稿日:2014/11/08(Sat) 20:35:47 No.686
マーシーさん、こんばんは。

> 地図投影法が、旧コードから球面メルカトル替わったんですね。

投影法は実はよくわかっていないのですが(^^;)、
国土地理院のサンプルコード
http://portal.cyberjapan.jp/help/development/sample.html
がこうなってますので、変更しました。
ベグマンアイコンの追加 投稿者:マーシー 投稿日:2014/11/08(Sat) 17:52:04 home No.684
あにねこさん、こんばんわ。

新バージョンにOverviewMapコントロールを加えてみました。
map.addControl(new OpenLayers.Control.ScaleLine());
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.addControl(new OpenLayers.Control.OverviewMap());


ところで質問なのですが、Overview 画面の地図のズームアウト比率は替えられるのでしょうか?
optionn があるみたいなのですが、難しくてわかりません。

また、Google地図にしたときにベグマンアイコン(ストリート人形)
を地図に入れることは可能でしょうか?
MaxZoomLebel: 15 の次に streetView.Control : true と入れたのですが、
エラーになったようで、地図は表示されませんでした。

ホームページ書換が終わったばかりで大変でしょうが、よろしくお願いします。
Re: ベグマンアイコンの追加 投稿者:あにねこ 投稿日:2014/11/08(Sat) 20:32:12 No.685
マーシーさん、こんばんは。

> 新バージョンにOverviewMapコントロールを加えてみました。
>
> ところで質問なのですが、Overview 画面の地図のズームアウト比率は替えられるのでしょうか?

やったことないので分かりませんが、
http://blog.godo-tys.jp/2013/07/04/2709/
に解説のある minRatio、maxRatio あたりのプロパティではないでしょうか。

> また、Google地図にしたときにベグマンアイコン(ストリート人形)
> を地図に入れることは可能でしょうか?

地理院地図版ルート地図で、Google地図に切り替えたときにストリートビューを表示
したいということでしょうか?
OpenLayers 2.x の API ドキュメント
http://dev.openlayers.org/releases/OpenLayers-2.13.1/doc/apidocs/files/OpenLayers-js.html
を見てもストリートビュー関係のコントロールはなさげなので、できないんじゃないかなと思います。
Re^2: ベグマンアイコンの追加 投稿者:マーシー 投稿日:2014/11/08(Sat) 20:48:52 home No.687

あにねこさん、こんばんわ。
ご紹介して頂いたページは一瞬だけ見ました。頑張って訳してみます。

Google地図も既製にとらわれず、少しずつトライしてみようと思います。
返信して頂きありがとうございました。
Re^2: 、Overview 画面設定 投稿者:マーシー 投稿日:2014/11/11(Tue) 12:59:04 home No.688
あにねこさんこんにちは。

minRatio はオーバービューマップの解像度とマップの解像度の比率の最小値でデフォルトは8、maxRatio は最大値ででふぉるとは32だそうです。
mapOptions にnumZoomLebels 設定があったので、やってみたのですがあまりうまくいかないようです。

map.addControl(new OpenLayers.Control.OverviewMap({mapOptions: {numZoomLevels: 10}}));
書き方はあっているでしょうか?

また。GoogleMap もやってみているのですが、URLは絶対パスのみですか?
param.url = (param.url.slice(0, 5) == 'http:' ? '' : baseurl) + param.url;
の意味を教えていただけますか?
Re^3: 、Overview 画面設定 投稿者:あにねこ 投稿日:2014/11/12(Wed) 19:18:44 No.692
マーシーさん、こんばんは。

> minRatio はオーバービューマップの解像度とマップの解像度の比率の最小値でデフォルトは8、maxRatio は最大値ででふぉるとは32だそうです。
> mapOptions にnumZoomLebels 設定があったので、やってみたのですがあまりうまくいかないようです。
>
> map.addControl(new OpenLayers.Control.OverviewMap({mapOptions: {numZoomLevels: 10}}));
> 書き方はあっているでしょうか?

openlayers overviewmap でググるといろいろ出てきますが、
http://girona-openlayers-workshop.readthedocs.org/en/latest/controls/overview.html
とかを見るとあっていそうな気がします。

> param.url = (param.url.slice(0, 5) == 'http:' ? '' : baseurl) + param.url;

slice は文字列を切り出すJavaScript 関数です。
http://www.tohoho-web.com/js/string.htm#slice
上記のJavaScripの文は、
param.url の0文字目から5文字分を切り出して、それが'http:' ならば、
param.url は http:〜 という文字列なので、絶対URLで、そのまま用います。
そうでなければ、param.url は相対URLとみなして、baseurl と param.url を連結します。
〜 ? 〜 : 〜 はC言語やJavaScript で使われる3項演算子です。
http://www.tohoho-web.com/js/operator.htm#cond
この辺りの話は、JavaScriptの本を一度通読した方が理解が早いと思います。

なお、Googleマップでは、KMLファイルは絶対URLで与える必要があります。
これは、OpenLayers はクライエントサイドで地図レイヤとKMLレイヤを重ね合わせる
(したがって、KMLファイルがローカルにあっても良い)のに対して、
Googleマップでは、サーバで重ね合わせを行なうため、サーバから読み出せるURLに
KMLファイルを置く必要があるためです。
Re^4: Google 切替 投稿者:マーシー 投稿日:2014/11/12(Wed) 22:01:41 home No.693
あにねこさん、こんばんわ。

いろいろとありがとうございます。JavaScriptの本を2冊購入しました。
地理院地図から、Google地図に切り替えできるような試みをしています。(テスト5)

document.getElementById('google').onclick = function() {
url1 = "googlemap.html" + location.search.replace('lon','lng')
window.open(url1, '_blank',"width=640,height=510,resizable=yes");
};

<div style="float:left;margin-left:25px;"><input style="color:red" id="google" type="button" value="StreetView" /></div>

地図を操作して値が変わった場合、緯度経度は「中心点」で求められますが、
zoom の値はi に入っているのですか?
データの値などを引き継ぐのに、何かいい案があったらお願い致します。
Re^5: Google 切替 投稿者:あにねこ 投稿日:2014/11/14(Fri) 23:57:34 No.694
マーシーさん、こんばんは。
なかなか、高度なことをやろうとされていますね。
OpenLayers で現在のズームレベルを知るには、getZoom という関数を使います。
gsimaps.html の中でも、使っています。
Re^6: Google 切替 投稿者:マーシー 投稿日:2014/11/16(Sun) 20:47:33 home No.695
あにねこさん、こんばんは。getZoom関数のアドバイスありがとうございました。

また行き詰まりました。アドバイスをお願いします。

document.getElementById('google').onclick = function() {
center = map.getCenter();
center.transform(proj_3857, proj_4326);
var lat1 = center.lat.toFixed(6);
var lon1 = center.lon.toFixed(6);
var zoom1 = map.getZoom().toFixed();
var url1 = param.url;
var url2 = "googlemap.html?"+"lat="+lat1+"&lng="+lon1+"&zoom="+zoom1+"&url="+url1;

までは、できましたが、ウィンドウサイズの取得はわかりませんでした。(参照↑)
よろしくお願いします。

var box = top.getDimension(); //たぶんこれがダメの原因
var width1 = box.width.toFixed();
var height1 = box.height.toFixed();

window.open(url2, '_blank', "width=width1,height=height1,resizable=yes");
};
Re^7: Google 切替 投稿者:あにねこ 投稿日:2014/11/16(Sun) 22:05:15 No.696
マーシーさん、こんばんは。
JavaScript で現在のウィンドウサイズを取得する方法ですが、
これは私も正確なところは知らないので、
「JavaScript ウィンドウサイズ 取得」などをキーワードにして、
Google先生にご教授頂くしかないです(^^;)
古いIEとモダンブラウザで方法が違ったりして面倒なので、
jQuery の width や height 関数を使った方が簡単かも知れません。
Re^8: Google 切替 投稿者:マーシー 投稿日:2014/11/17(Mon) 15:24:46 home No.697
あにねこさん、こんにちは。

jQueryはまた今度勉強しておきます。
何とか形になりました。ありがとうございました。

StreetViewボタンを押せば、地図の大きさが変わっても、座標や縮尺が変わっても
まったく同じ場所のGoogle地図に切り替わりStreetViewを見ることができます。
document.getElementById('google').onclick = function() {
center = map.getCenter();
center.transform(proj_3857, proj_4326);
var lat1 = center.lat.toFixed(6);
var lon1 = center.lon.toFixed(6);
var zoom1 = map.getZoom().toFixed();
var url1 = param.url;
var url2 = "googlemap2.html?";
url2 = url2.concat("lat=",lat1,"&lng=",lon1,"&zoom=",zoom1,"&url=",url1);
var width1 = window.innerWidth;
var height1 = window.innerHeight;
var box1 = "width=" + width1 + ",height=" + height1 + ",resizable=yes";
window.open(url2, '_blank', box1);
};

<div style="float:left;margin-left:25px;"><input style="color:red" id="google" type="button" value="StreetView" /></div>
Re^8: Google 地図の改造について 投稿者:マーシー 投稿日:2014/11/17(Mon) 16:28:55 home No.698
あにねこさん、こんな感じでいいのでしょうか?

<アイコンとトラックの分離>
var url0 = param.url.replace('_i','_t');  //変数url0を定義し、アイコンkmlファイル名の語尾を換えて代入する

var trkLayer = new google.maps.KmlLayer(url0, {
preserveViewport: true
});
trkLayer.setMap(map);

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

<div style="float:left;"><input id="gps" type="checkbox" checked="checked" />
IconData</div>
<div style="float:left;"><input id="trk" type="checkbox" checked="checked" />
GPStrack</div>
Re^8: Google 地図の改造について 投稿者:マーシー 投稿日:2014/11/17(Mon) 16:32:57 home No.699
十字マークの画像がいいのがなかったです。
これで本当に正確な中心にあるのでしょうか?

<センターマーク>
var crs = null;
document.getElementById('cross').onchange = function() {
if (this.checked) {
var crosshair = {coords:[0,0,0,0],type:'rect'};
crs = new google.maps.Marker({
map: map,
icon: '../logo/cross.gif', //十字マーク画像ファイルの置き場所
shape: crosshair
});
crs.bindTo('position', map, 'center');
crs.setVisible(true);
} else if (crs) {
crs.setVisible(false);
crs.destroy();
}
}
<div style="float:left;margin-left:5px;"><input id="cross" type="checkbox" />中心マーク</div>
Re^9: Google 地図の改造について 投稿者:あにねこ 投稿日:2014/11/17(Mon) 20:54:35 No.700
マーシーさん、こんばんは。
streetview をどうしても表示したいということであれば、
逆に Google Maps API の方から、地理院タイルを呼び出した方が、
すっきりするような気もします。
http://y2web.net/blog/computer/webmap/overlay-gsimap-tiles-on-google-maps-3791/
Re^10: Google 地図の改造について 投稿者:マーシー 投稿日:2014/11/18(Tue) 11:36:35 home No.701
あにねこさん、こんにちは。

Google地図は航空写真以外使わないと思います。
StreetViewは登山口周辺に行くのに、以下のような使い方を考えています。

http://blogs.yahoo.co.jp/tomo317am/40808763.html
Re^11: Google 地図の改造について 投稿者:あにねこ 投稿日:2014/11/18(Tue) 13:34:09 No.702
マーシーさん、こんにちは。
Google地図で航空写真以外を表示しないようにすることはできると思います。
(少なくとも、最初に航空写真を表示させるようにするのは
MapType を TERRAIN から SATELLITE にするだけなので簡単です。)

先に紹介したブログでは、地理院地図を背景地図として表示させて、
その上にペグマンアイコンを乗せると streetview が立ち上がるんですが
(もちろん、航空写真の上に乗せてもOK)、
これが実現したい使い方ではないのでしょうか?
Re^12: Google 地図の改造について 投稿者:マーシー 投稿日:2014/11/18(Tue) 14:10:13 No.703
あにねこさん、こんにちは。

私は、先月あのブログを見て、逆のことができないかと考えたのです。
でも、今度それに挑戦してみたいと思います。
いろいろとありがとうございます。
Re^13: Google 地図の改造について 投稿者:あにねこ 投稿日:2014/11/18(Tue) 14:54:46 No.704
ブログご存知でしたか。逆ということは、
OpenLayers の中で streetview の機能を実現しようということでしょうか?
すみません、何を実現しようとされているのか、いまいち理解できていないので。
Googleマップ版ルート地図でも、地理院地図版ルート地図でやったように、
中心点の十字線をon/offできるようにして、wptとtrkのレイヤーを分けたい、
ということでしたら、streetview とは直接関係ない話ですね。
Re^14: Google 地図の改造について 投稿者:マーシー 投稿日:2014/11/18(Tue) 15:51:43 No.705
3月にあにねこさんのホームページを発見したら、電子国土がなくなってしまいました。
それで地理院地図でと思ったのですが、わからなくていろいろやって現在に至っています。
Google地図で中央マークのオンオフと、アイコンを別表示するのもおもしろくて始めてしまいました。

ご紹介いただいたブログのコードは先月印刷してあり、偶然昨日昼から読み始めていました。
でも難しくて、プログラムの7割ぐらいはまだ理解できなくて放り出していました。
もうすこしがんばってみます。
これからもよろしくお願いします。
Re^15: Google 地図の改造について 投稿者:あにねこ 投稿日:2014/11/18(Tue) 18:34:22 No.706
OpenLayers の中で streetview を実現するのは、
OpenLayers の開発者レベルのスキルがないと難しいと思いますし、
やるにしても OpenLayers からいずれ Google Maps API を呼び出すことになるので、
Google の許諾が得られない限りは「不可能」です
(地図の表示はOKと
http://dev.openlayers.org/releases/OpenLayers-2.13.1/doc/apidocs/files/OpenLayers/Layer/Google-js.html
に書いてあります。)

Googleマップ版ルート地図に中心点の十字線 on/off 機能を追加したり、
トラックとウェイポイントでレイヤーを分ける話は、
このツリーは長くなりすぎてなんの話か判らなくなりましたので、
適宜、新規の記事にして頂けると助かります。宜しくお願い致します。
Re^16: Google 地図の改造について 投稿者:マーシー 投稿日:2014/11/19(Wed) 08:46:39 No.707
あにねこさん、おはようございます。

すみません。
一晩考えたら、あにねこさん推薦の方法がベストだと思い直しました。
次は別のツリーに移動させて頂きます。

- WebForum -