あにねこ電脳覚書 - サポート掲示板
スレッド:Google地図の追加
Google地図の追加 投稿者:
マーシー 投稿日:2014/10/25(Sat) 08:06:47
No.642
あにねこさん、おはようございます。
BaseLayerにGoogle地図の追加が出来ましたので報告します。
<title>ルート地図</title>の次に挿入する
<script type="text/javascript" src="
http://maps.google.com/maps/api/js?sensor=false"></script>
国土地理院地図の次にGoogle地図を挿入
var gmap_t = new OpenLayers.Layer.Google("Google地図", {
type: google.maps.MapTypeId.TERRAIN,numZoomLevels:16
});
var gmap_s = new OpenLayers.Layer.Google("Google写真", {
type: google.maps.MapTypeId.SATELLITE,numZoomLevels:22
});
BaseLayerに地図を追加する。
map.addLayers([std, pale, gmap_t, gmap_s]);
どこかおかしな動きがする気がします。
最初にGoogle地図に切り替えたとき、一瞬衛星写真になります。
ミスの指摘をお願いします。
次は、中心の十字マークをOverLayに加えたいのですが、
何かいい方法はありませんか?
if (!map.getCenter()) {
map.setCenter(new OpenLayers.LonLat(param.lon, param.lat).transform(proj_4326, proj_900913), param.zoom);
}
を使って"+"を書くだけでもいいかも。
Google Maps APIの他にもいろいろありますが、
マークの呼び出し方が難しくてよくわかりません。
地図と一緒に移動しないって言うのはかえって難しいのですか?
よろしくお願いします。
Re: Google地図の追加 投稿者:
あにねこ 投稿日:2014/10/25(Sat) 22:43:29
No.644
Re^2: Google地図の追加 投稿者:
マーシー 投稿日:2014/10/26(Sun) 07:18:22
No.646
あにねこさん、おはようございます。
返信ありがとうございます。
Google地図だけにすれば問題はありません。
偶然ですが、ご紹介のアドレスは今回の作成に参考にさせて頂きました。
違和感の正体は、+を押すと現れるレイヤー切替の青い四角の幅が変化するだとわかりました.
これは仕様のようですね。他の方のページも確認しました。
もし時間があるときに↑の参照先を確認して頂けたらありがたいです。
国土地理院地図のソースもゆっくり解析してみるつもりでいます。
お忙しい所、ありがとうございました。
Re^2: 中心十字アイコンの追加 投稿者:
マーシー 投稿日:2014/10/27(Mon) 15:41:57
No.648
こんにちは、あにねこさん。
地理院地図のソースはA4で37ページ分あり、関連しそうな部分は
すごい量です。
私にはまだ無理みたいです。すみません別の方法を考えてみます。
Re^3: 中心十字アイコンの追加 投稿者:
あにねこ 投稿日:2014/10/27(Mon) 18:44:17
No.649
マーシーさん、こんばんは。
昔、地理院地図のソースを見て試しに作ったことがあるのを思い出しました。
No.543 の記事をご参照ください。ただし、on/off 機能はついていません。
掲示板上部のメニューから「ワード検索」を選んで、「十字線」を
キーワードにすると出てくると思います。
Re^4: 中心十字アイコンの追加 投稿者:
マーシー 投稿日:2014/10/28(Tue) 08:09:01
No.650
あにねこさん、おはようございます。
中央十字マークできました。ありがとうございました。(参照↑)
画像もダウンロードさせて頂きました。
onoffはできたら報告します。
Re^4: 中心十字アイコンの追加 投稿者:
マーシー 投稿日:2014/10/28(Tue) 22:31:05
No.651
画像(centercross.js)を作って(あにねこさんのを頂きました)、次のコードを挿入する。
<script type="text/javascript" src="centercross.js"></script>
map.addControl(new OpenLayers.Control.LayerSwitcher()); //の次に
map.addControl(new OpenLayers.Control.CenterCross({
crosslength: 32,
bold: 1
})); //を追加する。
function crossOn(){
if (document.map.cross.checked = false) {
map.removeControl(new OpenLayers.Control.CenterCross);
} else {
map.addControl(new OpenLayers.Control.CenterCross({
crosslength: 32,
bold: 1
}));
}
}
<body></body>に次を入れる。
<div style="float:left;margin-left:5px;"><input id="cross" type="checkbox" onclick="crossOn" checked>:中心十字マーク</div>
今のところはうまくいきません。
function のコードがダメのようです。
基本ができていないので、間違いがあったら指摘をお願いできればありがたいです。
Re^5: 中心十字アイコンの追加 投稿者:
あにねこ 投稿日:2014/10/28(Tue) 22:49:08
No.652
マーシーさん、こんばんは。
まず、centercross.js は画像ではなくて、JavaScript で書かれたプログラムです。
ボタン(id='cross')を押して、ある function を起動したい場合は、
document.getElementById('cross').onclick = function() {
// ここにやりたいことを書く
}
のようなコードになります。
gsimaps.html の中に同じようなコードがあるので、
その後ろあたりに追加すれば宜しいかと。
この function の中で、ボタンの状態を調べたい場合は、
document.getElementById('cross').value
の値を見れば良いのではないかと思います。
Re^6: 中心十字アイコンの追加 投稿者:
あにねこ 投稿日:2014/10/28(Tue) 22:52:11
No.653
間違えました。
> document.getElementById('cross').onclick = function() {
check button の on/off で function を起動するには、
onclick ではなく onchange ではないかと思います(うろ覚え)。
Re^6: 中心十字アイコンの追加 投稿者:
マーシー 投稿日:2014/10/29(Wed) 09:37:20
No.654
あにねこさん、おはようございます。
>centercross.js は画像ではなくて、JavaScript で書かれたプログラムです。
すみませんでした。画像だと思い込んでいました。
道理で簡単過ぎると思ったんです。十字マークのクラス設定だったんですね。
一番大事なコードが書かれていました。
最所は十字マーク非表示で、作ってみました。
追加する事はできるのですが、十字マークが消えません。
どこが間違ってるのでしょうか?
document.getElementById('ccross').onchange = function() {
if (!document.getElementById('ccross').checked) {
map.removeControl(OpenLayers.Control.CenterCross);
} else {
map.addControl(new OpenLayers.Control.CenterCross({
crosslength: 32,
bold: 1
}));
}
}
Re^7: 中心十字アイコンの追加 投稿者:
あにねこ 投稿日:2014/10/30(Thu) 01:13:19
No.656
マーシーさん、こんばんは。
> 最所は十字マーク非表示で、作ってみました。
> 追加する事はできるのですが、十字マークが消えません。
> どこが間違ってるのでしょうか?
>
> document.getElementById('ccross').onchange = function() {
> if (!document.getElementById('ccross').checked) {
> map.removeControl(OpenLayers.Control.CenterCross);
> } else {
> map.addControl(new OpenLayers.Control.CenterCross({
> crosslength: 32,
> bold: 1
> }));
> }
> }
removeControl の引数は、
new OpenLayers.Control.CenterCross
で返ってくるオブジェクトを渡すのだと思います。
十字線を表示
var obj = new OpenLayers.Control.CenterCross({crosslength: 32, bold: 1});
map.addControl(obj);
↓
十字線を消去
map.removeControl(obj);
のような流れになると思います。
Re^8: 中心十字アイコンの追加 投稿者:
ヤマトタケル 投稿日:2014/10/30(Thu) 08:37:46
No.657
あにねこさん、マーシーさん、お早うございます。
横スレで失礼します。マーシーさんのリンクを見ました。
地理院地図とGoogleMapの両方見えますね。
自分としては十字線に興味があるのですが、航空写真入りで両方見えるのも便利と思います。
ぜひぜひ完成させてください。掲示板を楽しみにして覗いています。
Re^8: 中心十字アイコンの追加 投稿者:
マーシー 投稿日:2014/10/30(Thu) 09:12:43
No.658
あにねこさん、おはようございます。
1)
http://nanten.sakura.ne.jp/nyanta/js/centercross.js をダウンロードして、同一フォルダに入れる。
<script type="text/javascript" src="centercross.js"></script>を該当箇所に入れる。
2)<div style="float:left;margin-left:5px;"><input id="ccross" type="checkbox" >中心十字マーク</div> //最所は十字マーク非表示
3) document.getElementById('ccross').onchange = function() {
var obj = new OpenLayers.Control.CenterCross({crosslength: 32, bold: 1});
if (document.getElementById('ccross').checked) {
map.addControl(obj); //十字線を表示
} else {
map.removeControl(obj); //十字線を消去
}
} //とした場合は、
□非表示 → ■表示 → □表示 → ■表示 となります。
var obj = new OpenLayers.Control.CenterCross({crosslength: 32, bold: 1}); //をif文の外に出すと、
□非表示 → ■表示 → □非表示 → ■非表示 となります。
最初から十字線を表示させると、
■表示 → □非表示 → ■非表示 → □非表示 となります。
onchange でも onclick でも同じでした。これで満足すべきでしょうか?
ヤマトタケルさん、おはようございます。
ホームページ時々拝見しています。デザインがきれいですね。
あにねこさんのご指導力をお借りして、何とかやってみます。
Re^9: 中心十字アイコンの追加 投稿者:
あにねこ 投稿日:2014/10/30(Thu) 23:38:07
No.659
マーシーさん、こんばんは。
> 3) document.getElementById('ccross').onchange = function() {
> var obj = new OpenLayers.Control.CenterCross({crosslength: 32, bold: 1});
> if (document.getElementById('ccross').checked) {
> map.addControl(obj); //十字線を表示
> } else {
> map.removeControl(obj); //十字線を消去
> }
> } //とした場合は、
ここで定義した無名の関数は、チェックボタンを on/off するたびに
(onchange = 状態が変化するたびに)呼び出されます。
呼び出しと次の呼び出しの間では、変数 obj が保持されている必要があります。
関数の中で var obj とすると、その変数(ローカル変数)の寿命は関数が実行されている間だけです。
なので、次のようにする必要があると思います。
var obj = new OpenLayers.Control.CenterCross({crosslength: 32, bold: 1});
document.getElementById('ccross').onchange = function() {
if (this.checked) {
map.addControl(obj); //十字線を表示
} else {
map.removeControl(obj); //十字線を消去
}
}
なお、this はこの関数の中では、document.getElementById('ccross') を表します。
以上、こちらではテストしていないので違ってるかも知れませんが(その可能性大)、
お試しください。
Re^10: 中心十字アイコンの追加 投稿者:
マーシー 投稿日:2014/10/31(Fri) 09:30:49
No.660
あにねこさん、おはようございます。
いろいろとおせわになっています。
テストページを作りました。
test1) var obj = を関数の手前に置く(今回の試案)
<結果> □無 → ■有 → □無 → ■無
test2) var obj = を関数の中に入れる
<結果> □無 → ■有 → □有 → ■有
test3) var obj = をIF文の中に入れる
<結果> □無 → ■有 → □有 → ■有
test4) var obj = を関数の手前に置き、一度作ってから消す
var obj = new OpenLayers.Control.CenterCross({crosslength: 32, bold: 1});
map.addControl(obj); //十字線を表示
map.removeControl(obj); //十字線を消去
<結果> □無 → ■無 → □無 → ■無
test5) var obj = を関数の手前に置き、表示させる
var obj = new OpenLayers.Control.CenterCross({crosslength: 32, bold: 1});
map.addControl(obj); //十字線を表示
//チェックボックスはチェック済みにする
<結果> ■有 → □無 → ■無 → □無
remove.Controlした後は、関数がクリアされている気がします。
時間がありましたら、参照先のテストページの確認を、よろしくお願いします。
今気になっているのはつぎのブログです。
http://matsup.blogspot.jp/2014/07/gnssgps-openlayers.html
Re^11: 中心十字アイコンの追加 投稿者:
あにねこ 投稿日:2014/10/31(Fri) 19:58:12
No.661
マーシーさん、こんばんは。
すみません、チェックボックスの on/off の状態を調べるのは、
value ではなくて、checked でした。
という訳で、次のようなコードになります。
【JavaScript部分】
var crs = null;
document.getElementById('cross').onchange = function() {
if (this.checked) {
crs = new OpenLayers.Control.CenterCross({
crosslength: 32,
bold: 1
})
map.addControl(crs);
} else {
map.removeControl(crs);
crs.destroy();
}
}
【html部分】
<div style="float:left;margin-left:5px;"><input id="cross" type="checkbox" />十字線</div>
テスト用のページを作成しました。
http://nanten.sakura.ne.jp/nyanta/test.htmlの
gsimaps-cross-sw.html
をクリックしてお試しください。
Re^12: 中心十字アイコンの追加 投稿者:
マーシー 投稿日:2014/10/31(Fri) 21:00:20
No.662
あにねこさん、こんばんは。
貴重な時間を使わせて頂いてありがとうございます。
テストページを拝見しました。完璧です。
でも何が起こったかわからないので、これからゆっくり検証していきたいと思います。
//あにねこさん模範コード
var crs = null;
document.getElementById('cross').onchange = function() {
if (this.checked) {
crs = new OpenLayers.Control.CenterCross({
crosslength: 32,
bold: 1
})
map.addControl(crs);
} else {
map.removeControl(crs);
crs.destroy();
}
}
<div style="float:left;margin-left:5px;"><input id="cross" type="checkbox" />十字線</div>
//マーシー悪戦苦闘コード (test3)
document.getElementById('ccross').onchange = function() {
if (this.checked) {
var obj = new OpenLayers.Control.CenterCross({crosslength: 32, bold: 1});
map.addControl(obj); //十字線を表示
} else { if(obj){
map.removeControl(obj); //十字線を消去
}
obj=null;
}}
<div style="float:left;margin-left:5px;"><input id="ccross" type="checkbox" >中心十字マーク</div>
あにねこさんのおかげで無事完成することができました。
このすばらしい gsimaps をホームページに反映させたいと思います。
ありがとうございました。
- WebForum -