ENGLISH page is here.
GET DinopSearchBar
サイト内検索:
HOME
VC++ TIPS
ダウンロード
DinopExifReader
DinopSearchBar
DinopSearchBar mini
DinopTabbingBar
for Firefox
大阪湾の生き物
甲子園浜の自然
甲子園浜の干潟
甲子園浜の水中
甲子園浜の野鳥
近畿の山々
植物図鑑
箕面マップ
水中機材
カメラ
ランキング
望遠鏡の世界
顕微鏡の世界
Googleのすべて
GoogleマップAPI
ニュース
読んだ本
日記
変な料理の作り方
遺伝子操作
論文紹介
デイトレード
自動売買でFX
ネットで小遣い稼ぎ
Solaris
電子工作
その他
問い合わせ
VC++用コード集
大阪湾の生き物
水中用機材
since:2000/11/15
dinopcom@gmail.com
www.dinop.comは
だいのっぷ・どっと・こむ
と読んでください。







« クリック位置の経緯度を表示する | メイン | 描いた線の座標を一覧する »

クリックで線を描く




はじめに

 Google Maps(Google Local)のAPIを利用する方法を簡単に紹介しています。今回 は「地図の中に自由に線を描く方法について」です。


スクリプトの変更

 だいぶ前に作成したコードに何行か追加します。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <style type="text/css">
    v\:*
    {
      behavior:url(#default#VML);
    }
    </style>
    <script src="http://maps.google.com/maps?file=api&v=1&key=ABQIAAAAJ2A-EncISppmZHF0oZq2MxSIqVgmEE7Z7jvRqG49DJtM7mV-6xQVluTrLna8DIEesDPeKpUSnejCaA" type="text/javascript"></script>
  </head>
  <body>
    <div id="map" style="width: 500px; height: 400px"></div>
    <script type="text/javascript">
    //<![CDATA[
    
    var map = new GMap(document.getElementById("map"));
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    map.centerAndZoom(new GPoint(135.3659722, 34.72072222), 4);
    
    function AddGMarker(objMap,nLatitude,nLongitude,strHtml)
    {
       var objPoint = new GPoint(nLatitude,nLongitude);
       var objMarker = new GMarker(objPoint);

       GEvent.addListener(objMarker,"click",function(){ objMarker.openInfoWindowHtml(strHtml); });
       objMap.addOverlay(objMarker);
    }

    AddGMarker(map,135.3659722,34.72072222,"<img src=http://www.dinop.com/google/map/use_html_comment_test.gif align=left>甲子園駅<br><br><a href=http://www.hanshintigers.jp/ target=_blank>阪神タイガース</a>の本拠地としても知<br>られる甲子園球場の目の前にあり<br>ます。<br clear=left>");
    AddGMarker(map,135.3585277,34.70730555,"甲子園浜");
    
    var aobjPoints = 
       [
          new GPoint(135.3659722,34.72072222),
          new GPoint(135.3585277,34.70730555)
       ];
    var objLine = new GPolyline(aobjPoints,'#FF0000');
    map.addOverlay(objLine);
    GEvent.addListener(map, 'click', function(objOverlay, objPoint)
       {
          if(objPoint)
          {
             map.removeOverlay(objLine);
             aobjPoints.length++;
             aobjPoints[aobjPoints.length - 1] = new GPoint(objPoint.x,objPoint.y);
             objLine = new GPolyline(aobjPoints,'#FF0000');
             map.addOverlay(objLine);
           }
        });
    
    //]]>
    </script>
  </body>
</html>
 赤字が追加した部分です。クリックしたときの処理が結構複雑です。
 太字の部分はAPI Keyです(人それぞれ異なる値です)。

 実際に動かして地図の中をクリックすると、どんどん線が新しく追加されます。



解説

 今回の変更はちょっと複雑なので以下の部分だけ簡単に解説を入れておきます。
    GEvent.addListener(map, 'click', function(objOverlay, objPoint)
       {
          if(objPoint)
          {
             map.removeOverlay(objLine);
             aobjPoints.length++;
             aobjPoints[aobjPoints.length - 1] = new GPoint(objPoint.x,objPoint.y);
             objLine = new GPolyline(aobjPoints,'#FF0000');
             map.addOverlay(objLine);
           }
        });


 この部分は地図がクリックしたときの処理を定義するものです。地図がクリックされたと きに(処理)が実行されます。
    GEvent.addListener(map, 'click', function(objOverlay, objPoint)
       {
          (処理)
       });


 "地図がクリック"されるのは大きく2通りあります。1つはマーカーなど何かがある場所のクリ ック、そして地図上の"地点"のクリックです。地図上の地点がクリックされたときのみ(処理) が実行されます。
          if(objPoint)
          {
             (処理)
          }


 既存の線を消去するための命令です。これを行わないと同じ位置に何度も何度も線を上書きす ることになってしまいます。
             map.removeOverlay(objLine);


 線を描画する点(経緯度)を追加する部分です。経緯度はaobjPointsという配列に格納してい ます。まずはこの配列のサイズを大きくしてからクリックされた経緯度を追加しています。
             aobjPoints.length++;
             aobjPoints[aobjPoints.length - 1] = new GPoint(objPoint.x,objPoint.y);


 実際に線を描画する部分です。今回は赤い線を描画しています。
             objLine = new GPolyline(aobjPoints,'#FF0000');
             map.addOverlay(objLine);








Copyright (c) 1999-2007 issei. All rights reserved. (運営者情報