SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
電子国土Webを使ってコピペでWebGISを作る	
  
      〜OpenLayers編〜	
  
          Part2
電子国土Webとは?	
                   前回の復習	


WebGISを使って情報を発信しようとすると・・・	
  
   ・GISソフトウェアや背景となる地図の準備が必要	
       それを解
   ・GISソフトの購入や地図データの維持管理に費用がかかる	
       決!     	




あなたが発信する情報と国土地理院が発信する背景地図	
  
        を重ねて表示できる!
電子国土WebのPoint!	
                                      前回の復習	


電子国土を背景地図にした、自作のWebGISが簡単に構築できる	




              電子国土を使っている例(国土地理院)	
  
              h5p://psgsv.gsi.go.jp/koukyou/G-­‐award/list_award1.html	
  
そもそもWebはどのように動いているの?
インターネットとWeb	
概要:1990年代前半、インターネットが商用化され、インターネットの代表的なアプ
リケーションである電子メールをWWW(World	
  Wide	
  Web)が爆発的に普及した。	




    つまり、個々のPCがネットワークでつながり合うことにより、	
  
    「自分の情報を公開できる」⇒もっている“地図情報”を公開できる!
Webの種類	
Webの機能を3つの機能に大別できる	
  
v  読む・・・テキストを読ませる	
  
v  見る・・・写真や映像など見せる	
  
v  使う・・・検索や予約など操作を伴う	
  
                 使う	


             見る	

                         見る	
 読む	


             読む
WebGISではどうなる?	
  WebGISの機能を3つの機能に大別すると・・・	
  
  v  読む・・・テキストを読ませる	
  
  v  見る・・・地図を見せる	
  
  v  使う・・・地図の検索や操作させる	
  
  
  
  
  
  
使う	
  
                                         使う	
  
  
             見る	
                                                   読む	
  
  




             歴史的農業環境閲覧システム	
  
             h5p://habs.dc.affrc.go.jp/habs_map.html?zoom=13&lat=35.68428&lon=139.75339&layers=B0	
  
どうやって動いている?	
これらのWebページの裏側ではHTMLという技術が使われている	
  




              Webページ	




               HTML
どうやって作る?	
人がPCが理解できる言語に変換する	
   HTMLをブラウザと呼ばれる	
  
                      アプリケーションを使って読み込む	
                       読み込む端末	




                                      読み込むアプリ	
  
                                       (ブラウザ)	




                      Webブラウザ	
 =知識・ノウハウ	
  

                      HTML	
 =標準技術	
                      ※HTML以外にもCSSやJavaScript,PHP,DBなどの
                      Web技術のノウハウも必要になってくる。このあ
                      たりの技術は村尾先生の授業にて
電子国土Web.NEXTで使われている技術
電子国土はFOSS4G(オープンソース)	
オープンソースとは、言葉とおりに言えばソフトウェアのソースが公開されているもの。	
  
                              詳しくは	
  
                              h5p://www.opensource.jp/osd/osd-­‐japanese.html を参照	
  




           電子国土は、	
  
                   ・OpenLayers	
  
                   ・PostgreSQL/PostGIS	
  
                   ・Proj4.js	
  
                        などのオープンソースが使われている。	

→ソースが公開されているということは、同じようなWebGISを構築することができ、	
  
さらにソースが共有されていることにより、様々な機能を自分用にカスタマイズできる。	

   OpenStreetMapもOpenLayersの技術が使われている。	
  
   OpenLayersが使われている例:h5p://openlayers.org/dev/examples/	
  
OpenLayersの基本機能から
Chap1.html	

                      HTMLファイルを確認してみる。	
  OpenLayersは基本的にHTMLとJavaScriptで構成されている。	
<html>	
  
      	
  <meta	
  h5p-­‐equiv="Content-­‐Type"	
  content="text/html;	
  charset=uh-­‐8"	
  />	
  	
  
      	
  <head>	
  
      	
           	
  <itle>20130116_地理情報システムⅡ</itle>	
  	
  
      	
           	
  <script	
  src="h5p://www.openlayers.org/api/OpenLayers.js"></script>	
  	
  
      	
           	
  <script>	
  
      	
           	
            	
  funcion	
  init()	
  {	
  
      	
           	
            	
  var	
  map;	
  	
  
      	
           	
            	
  map	
  =	
  new	
  OpenLayers.Map("canvas");	
  	
  
      	
           	
            	
  var	
  mapink	
  =	
  new	
  OpenLayers.Layer.OSM();	
  map.addLayer(mapink);	
  	
  
      	
           	
            	
  //地図の中心に奈良大学を設定

      	
           	
            	
  var	
  lonLat	
  =	
  new	
  OpenLayers.LonLat(135.783162,34.71516).transform(	
  new	
  OpenLayers.Projecion("EPSG:4326"),	
  
      	
           	
            	
  new	
  OpenLayers.Projecion("EPSG:900913"));	
  
      	
           	
            	
  map.setCenter(lonLat,	
  15);	
  
      	
           	
            	
  }	
  	
  
      	
           	
  </script>	
  
      	
  </head>	
  
      	
  <body	
  onload="init();">	
  
      	
           	
  <div	
  id="canvas">mapArea</div>	
  <br	
  />	
  
      	
  </body>	
  
</html>	
  	
  
	
        テキストファイルに記述するだけでOpenLayersの表示が可能。	
  
        >>Chapter1.htmlをテキストエディターで開いてみる。
Chap2.html	
                             他の地図に切り替えてみる	
  
<html>	
  
<meta	
  h5p-­‐equiv="Content-­‐Type"	
  content="text/html;	
  charset=uh-­‐8"	
  />	
  
<head>	
  
<itle>20130116_地理情報システムⅡ</itle>	
  
	
  
                                                                                                                              GoogleMapsに切り替えることもできる	
<script	
  src="h5p://www.openlayers.org/api/OpenLayers.js"></script>	
  
<script	
  src="h5p://maps.google.com/maps/api/js?v=3&amp;sensor=false"></script>	
  
<script>	
  
               	
  funcion	
  init()	
  {	
  
               	
                 	
  var	
  map;	
  
	
                                                                                                                                      ←ここでは地図の選択ツールを呼び出す処理をしている	
               	
                 	
  map	
  =	
  new	
  OpenLayers.Map("canvas");	
  
	
  
               	
                 	
  map.addControl(new	
  OpenLayers.Control.LayerSwitcher());	
  
	
  
               	
                 	
  var	
  mapink	
  =	
  new	
  OpenLayers.Layer.OSM();	
  
               	
                 	
  map.addLayer(mapink);	
  
	
  
               	
                 	
  var	
  gsat	
  =	
  new	
  OpenLayers.Layer.Google("Google	
  Satellite",	
  {	
  
               	
                 	
                      	
  type	
  :	
  google.maps.MapTypeId.SATELLITE,	
  
               	
                 	
                      	
  numZoomLevel	
  :	
  15	
  
               	
                 	
  })	
  
               	
                 	
  map.addLayer(gsat);	
  
	
  
               	
                 	
  var	
  ghyb	
  =	
  new	
  OpenLayers.Layer.Google("Google	
  Hybrid",	
  {	
  
               	
                 	
                      	
  type	
  :	
  google.maps.MapTypeId.HYBRID,	
  
               	
                 	
                      	
  numZoomLevels	
  :	
  22,	
  
               	
                 	
                      	
  visibility	
  :	
  false	
  
               	
                 	
  })	
  
               	
                 	
  map.addLayer(ghyb);	
  
	
  
               	
                 	
  //地図の中心に奈良大学を設定	
              	
                 	
var	
  lonLat	
  =	
  new	
  OpenLayers.LonLat(135.783162,34.71516).transform(	
  new	
  	
  
               	
                 	
                      	
                      	
       	
  OpenLayers.Projecion("EPSG:4326"),	
  
               	
                 	
  new	
  OpenLayers.Projecion("EPSG:900913"));	
  
               	
                 	
  map.setCenter(lonLat,	
  15);	
  
	
  
               	
  }	
  
</script>	
  
</head>	
  
<body	
  onload="init();">	
  
               	
  <div	
  id="canvas">mapArea</div>	
  
               	
  <br	
  />	
  
</body>	
  
</html>	
  
ベースマップ切り替えのタブがでてくる	
  
電子国土に実装できる様々な機能を知る
電子国土ポータルにあるサンプル集を使う	
  
まずは、電子国土ポータルにあるサンプル集を使うことで、WebGISとは何かを知ろう!	




                OpenLayersサンプル集(電子国土ポータルより)	
  
                h5p://portal.cyberjapan.jp/portalsite/sample/index2.html	
  
Chap3.html	

   経度・緯度・ズームレベルを指定して表示する	
  
Chap3.htmlをテキストエディターで開いて以下の部分を探そう!	
 //初期の経度	
 var	
  initCX	
  =	
  138.7313889;	
  
 	
  
 //初期の緯度	
 var	
  initCY	
  =	
  35.3622222;	
  
 	
  
 //初期のズームレベル	
 //※ここで設定するズームレベルはデータセットの最小ズームレベルが0になる	
 //※デフォルトデータセットでは「ズームレベル0」が0になる	
 var	
  initZoomLv	
  =	
  15;	
  




                              奈良大学の場所(10進経緯度)	
  
                              34.714772,135.782948	

 奈良大学の場所を指定するために赤字のように変更して、上書き保存。	
 //初期の経度	
 var	
  initCX	
  =	
  135.782948;	
  
 	
  
 //初期の緯度	
 var	
  initCY	
  =	
  34.714772;	
  
 	
  
 //初期のズームレベル	
 //※ここで設定するズームレベルはデータセットの最小ズームレベルが0になる	
 //※デフォルトデータセットでは「ズームレベル0」が0になる	
 var	
  initZoomLv	
  =	
  15;	
  




  ⇒再度、Internet	
  Explorerで再度Chap3.htmlダブルクリック
Chap3.html	

   経度・緯度・ズームレベルを指定して表示する	
  
Chap3.htmlをテキストエディターで開いて以下の部分を探そう!	
 //初期の経度	
 var	
  initCX	
  =	
  138.7313889;	
  
 	
  
 //初期の緯度	
 var	
  initCY	
  =	
  35.3622222;	
  
 	
  
 //初期のズームレベル	
 //※ここで設定するズームレベルはデータセットの最小ズームレベルが0になる	
 //※デフォルトデータセットでは「ズームレベル0」が0になる	
 var	
  initZoomLv	
  =	
  15;	
  




                              奈良大学の場所(10進経緯度)	
  
                              34.714772,135.782948	

 奈良大学の場所を指定するために赤字のように変更して、上書き保存。	
 //初期の経度	
 var	
  initCX	
  =	
  135.782948;	
  
 	
  
 //初期の緯度	
 var	
  initCY	
  =	
  34.714772;	
  
 	
  
 //初期のズームレベル	
 //※ここで設定するズームレベルはデータセットの最小ズームレベルが0になる	
 //※デフォルトデータセットでは「ズームレベル0」が0になる	
 var	
  initZoomLv	
  =	
  15;	
  




  ⇒再度、Internet	
  Explorerで再度Chap3.htmlダブルクリック
Chap4.html	

       ズームレベルを変更する	
                                                                                                                             わからなかったら	
  
                                                                                                                                                 chap.4.htmlを開く	

Chap3.htmlをテキストエディターで開いて以下の部分を探そう!	
 </script>	
  
 </head>	
  
 <body	
  onload="init();">	
  
 <div	
  id="map"	
  name="map"	
  style="width:500px;height:500px;"></div>	
  
 <!-­‐-­‐	
  これより下に追加 -­‐-­‐>	
  
 	
  
 	
  
 	
  
 <!-­‐-­‐	
  これより上に追加 -­‐-­‐>	
  
 </body>	
  
 </html>	
  


                                                                 <table>	
  
                                                                          	
  <tr><td><input	
  type="bu5on"	
  onclick="changeScale(0)"	
  value="ズームレベル 0"	
  /></td></tr>	
  
                                                                          	
  <tr><td><input	
  type="bu5on"	
  onclick="changeScale(4)"	
  value="ズームレベル 4"	
  /></td></tr>	
  
                                                                          	
  <tr><td><input	
  type="bu5on"	
  onclick="changeScale(8)"	
  value="ズームレベル 8"	
  /></td></tr>	
  
                                                                          	
  <tr><td><input	
  type="bu5on"	
  onclick="changeScale(13)"	
  value="ズームレベル 13"	
  /></td></tr>	
  
                                                                 </table>	
 奈良大学の場所を指定するために赤字のように変更して、上書き保存。	
 </head>	
  
 <body	
  onload="init();">	
  
 <div	
  id="map"	
  name="map"	
  style="width:500px;height:500px;"></div>	
  
 <!-­‐-­‐	
  これより下に追加 -­‐-­‐>	
  
 <table>	
  
                	
  <tr><td><input	
  type="bu5on"	
  onclick="changeScale(0)"	
  value="ズームレベル 0"	
  /></td></tr>	
  
                	
  <tr><td><input	
  type="bu5on"	
  onclick="changeScale(4)"	
  value="ズームレベル 4"	
  /></td></tr>	
  
                	
  <tr><td><input	
  type="bu5on"	
  onclick="changeScale(8)"	
  value="ズームレベル 8"	
  /></td></tr>	
  
                	
  <tr><td><input	
  type="bu5on"	
  onclick="changeScale(13)"	
  value="ズームレベル 13"	
  /></
 td></tr>	
  
 </table>	
  
 <!-­‐-­‐	
  これより上に追加 -­‐-­‐>	
  
 </body>	
  
 </html>	
                                                                                                               このようなボタンが出れば成功!	
  ⇒再度、Internet	
  Explorerで再度Chap3.htmlダブルクリック
応用編:あとは難しいので、ファイルをみて確認していきましょう!
Chap5.html	

距離・面積計測モードを使用する	
  
                                                                                      Chap3.htmlと比較してみよう!	

           こういうコマンドが追加されている。	
           //	
  計測コントロールを作成	
           measureControls	
  =	
  {	
  
           	
  	
  	
  	
  //	
  距離計測	
           	
  	
  	
  	
  line:	
  new	
  OpenLayers.Control.Measure(	
  
           	
  	
  	
  	
  	
  	
  	
  	
  OpenLayers.Handler.Path,	
  {	
  
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  persist:	
  true,	
  
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  handlerOpions:	
  {	
  
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  layerOpions:	
  {styleMap:	
  styleMap}	
  
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
           	
  	
  	
  	
  	
  	
  	
  	
  }	
  
           	
  	
  	
  	
  ),	
  
           	
  
           	
  	
  	
  	
  //	
  面積計測	
           	
  	
  	
  	
  polygon:	
  new	
  OpenLayers.Control.Measure(	
  
           	
  	
  	
  	
  	
  	
  	
  	
  OpenLayers.Handler.Polygon,	
  {	
  
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  persist:	
  true,	
  
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  handlerOpions:	
  {	
  
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  layerOpions:	
  {styleMap:	
  styleMap}	
  
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
           	
  	
  	
  	
  	
  	
  	
  	
  }	
  
           	
  	
  	
  	
  )	
  
           };	
  
           	
  
           //	
  計測コントロールに各種設定を行い、mapに追加	
           var	
  control;	
  
           for(var	
  key	
  in	
  measureControls)	
  {	
  
           	
  	
  	
  	
  control	
  =	
  measureControls[key];	
  
           	
  
           	
  	
  	
  	
  //投影により切り替える	
                                 control.geodesic	
  =	
  true;	
  
           	
  
           	
  	
  	
  	
  //クリックで確定する前にも計測結果を表示し続ける	
                                 control.setImmediate(true);	
  
           	
  
           	
  	
  	
  	
  //	
  イベントを追加	
                                 control.events.on({	
  
           	
  	
  	
  	
  	
  	
  	
  	
  "measure":	
  handleMeasurements,	
  
           	
  	
  	
  	
  	
  	
  	
  	
  "measureparial":	
  handleMeasurements	
  
           	
  	
  	
  	
  });	
  
           	
  	
  	
  	
  map.addControl(control);	
  
           }	
  
           	
  
           //	
  計測して、計測結果を書き出す	
           funcion	
  handleMeasurements(event)	
  {	
  
           	
  	
  	
  	
  var	
  measure	
  =	
  event.measure;	
  	
  //	
  計測結果	
                                 var	
  units	
  =	
  event.units;	
  	
  	
  	
  	
  	
  //	
  単位	
                                 var	
  order	
  =	
  event.order;	
  
           	
  	
  	
  	
  var	
  element	
  =	
  window.document	
  
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  .getElementById('output');	
  
           	
  	
  	
  	
  var	
  out	
  =	
  "";	
  
           	
  	
  	
  	
  if(order	
  ==	
  1)	
  {	
  	
  	
  	
  //	
  距離	
                                                      out	
  +=	
  measure.toFixed(3)	
  +	
  "	
  "	
  +	
  units;	
  
           	
  	
  	
  	
  }	
  else	
  {	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  面積	
                                                      out	
  +=	
  measure.toFixed(3)	
  +	
  "	
  "	
  +	
  units	
  
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  +	
  "<sup>2</sup>";	
  
           	
  	
  	
  	
  }	
  
           	
  	
  	
  	
  element.innerHTML	
  =	
  out;	
  
           }
Chap6.html	
 地図画面中心の座標(経度・緯度)を表示する	
  
                   GISに初期設定があるように	
  
                   OpenLayersにも地図の初期設定を指定できる。	

                                                                                         ←これがあるところまでが	
  
                                                                                         OpenLayersの初期設定のコマンド	

                 ↓こいつを初期表示設定のところに追加	
                           //	
  Mapにmoveイベントを登録し、初期表示のためにイベント起動	
                           map.events.register('move',	
  map,	
  handleMapMove);	
  
                           map.events.triggerEvent('move');	

                 Mapにmoveイベントを登録し、地図画面の内容が変更(移動、拡大・
                 縮小)される毎に、指定した命令を実行するように設定できる。	

                 地図の中心を求めるのは初期設定であ
                 る必要がないので、その下に追加	
                  //	
  moveイベント	
                  funcion	
  handleMapMove()	
  {	
  
                  	
  	
  	
  	
  //	
  地図の中心を取得	
                                        var	
  center	
  =	
  map.getCenter();	
  
                  	
  
                  	
  	
  	
  	
  //	
  地図座標に変換	
                                        center.transform(projecion900913,	
  projecion4326);	
  
                  	
  
                  	
  	
  	
  	
  //	
  「度、分、秒」に変換	
                                        var	
  lon	
  =	
  ToLatLonString(center.lon);	
  
                  	
  	
  	
  	
  var	
  lat	
  =	
  ToLatLonString(center.lat);	
  
                  	
  
                  	
  	
  	
  	
  document.sample.boxLon.value	
  =	
  lon;	
  
                  	
  	
  	
  	
  document.sample.boxLat.value	
  =	
  lat;	
  
                  }	
  
                  	
  
                  //	
  「度」単位から「度、分、秒」の文字列に変換	
                  funcion	
  ToLatLonString(value){	
  
                  	
  	
  	
  	
  var	
  degree	
  =	
  parseInt(value);	
  
                  	
  	
  	
  	
  var	
  minute	
  =	
  parseInt((value-­‐degree)*60);	
  
                  	
  	
  	
  	
  var	
  secondRest	
  =	
  (value-­‐degree-­‐(minute/60))*3600;	
  
                  	
  	
  	
  	
  var	
  second	
  =	
  (Math.round(secondRest));	
  
                  	
  	
  	
  	
  if(second	
  ==	
  60){	
  
                  	
  	
  	
  	
  	
  	
  	
  	
  second	
  =	
  0;	
  
                  	
  	
  	
  	
  	
  	
  	
  	
  minute	
  =	
  minute	
  +	
  1;	
  
                  	
  	
  	
  	
  }	
  
                  	
  	
  	
  	
  if(minute	
  ==	
  60){	
  
                  	
  	
  	
  	
  	
  	
  	
  	
  minute	
  =	
  0;	
  
                  	
  	
  	
  	
  	
  	
  	
  	
  degree	
  =	
  degree	
  +	
  1;	
  
                  	
  	
  	
  	
  }	
  
                  	
  
経緯度表示が追加される!	
    	
  	
  	
  	
  var	
  str	
  =	
  (degree	
  +	
  '度'	
  
                  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  +	
  minute	
  +	
  '分'	
  
                  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  +	
  second	
  +	
  '秒');	
  
Chap7.html	
   クリックした場所の座標を計測する	
  
                                           以下のコマンドで追加機能される。	
                    	
                    //	
  座標計測モードに切り替え	
                    funcion	
  set_mode(){	
  
                                	
//	
  イベントが登録済みか調べる	
                                 	
  var	
  listeners=map.events.listeners['click'];	
  
                                 	
  if(listeners!=null){	
  
                                 	
                      	
  for(var	
  i=0,len=listeners.length;i<len;i++){	
  
                                 	
                      	
                	
  if(listeners[i].obj	
  ==	
  map	
  &&	
  listeners[i].func	
  ==	
  handleMapClick){	
  
                                	
                     	
                 	
              	
//	
  登録済み	
                                 	
                      	
                 	
             	
  return;	
  
                                 	
                      	
                 	
  }	
  
                                 	
                      	
  }	
  
                                 	
  }	
  
                    	
  
                                	
//	
  Mapにクリックイベントを登録	
                                 	
  map.events.register('click',	
  map,	
  handleMapClick);	
  
                    }	
  
                    	
  
                    //	
  座標計測モード終了	
                    funcion	
  end_mode(){	
  
                                	
//	
  Mapからクリックイベントを削除	
                                 	
  map.events.unregister('click',	
  map,	
  handleMapClick);	
  
                    }	
  
                    	
  
                    //	
  clickイベント	
                    funcion	
  handleMapClick(evt)	
  {	
  
                                	
//	
  クリック地点の座標を取得	
                                 	
  var	
  lonlat	
  =	
  map.getLonLatFromViewPortPx(evt.xy);	
  
                    	
  
                                	
//	
  地図座標に変換	
                                 	
  lonlat.transform(projecion900913,	
  projecion4326);	
  
                    	
  
                                	
//	
  「度、分、秒」に変換して表示	
                                 	
  document.sample.boxLon.value	
  =	
  ToLatLonString(lonlat.lon);	
  
                                 	
  document.sample.boxLat.value	
  =	
  ToLatLonString(lonlat.lat);	
  
                    }	
  
                    	
  
                    //	
  「度」単位から「度、分、秒」の文字列に変換	
                    funcion	
  ToLatLonString(value){	
  
                                 	
  var	
  degree	
  =	
  parseInt(value);	
  
                                 	
  var	
  minute	
  =	
  parseInt((value-­‐degree)*60);	
  
                                 	
  var	
  secondRest	
  =	
  (value-­‐degree-­‐(minute/60))*3600;	
  
                                 	
  var	
  second	
  =	
  (Math.round(secondRest));	
  
                                 	
  if(second	
  ==	
  60){	
  
                                 	
                      	
  second	
  =	
  0;	
  
                                 	
                      	
  minute	
  =	
  minute	
  +	
  1;	
  
                                 	
  }	
  
                                 	
  if(minute	
  ==	
  60){	
  
                                 	
                      	
  minute	
  =	
  0;	
  
                                 	
                      	
  degree	
  =	
  degree	
  +	
  1;	
  
                                 	
  }	
  
                    	
  
                                 	
  var	
  str	
  =	
  (degree	
  +	
  '度'	
  +	
  minute	
  +	
  '分'	
  +	
  second	
  +	
  '秒');	
  
                                 	
  return	
  str;	
  
                    }	


                            わからなくても良い!	
  
                  まずは、コピペから機能を追加していこう!!	
  
座標計測モードをクリック!	
   OpenLayersマスターへの道は真似るところから
最難関:先週作成したKML教材を電子国土に載せる
Chap8.html	
例えば、以前作成したアフリカのKMLを載せた例	
  
Chap8.html	
          テキストエディターでKMLを読み込む作業	
  
①Chap8.htmlをテキストエディターで開き、以下の部分を探す。	

 //KMLからレイヤーを作成	
    	
var	
  kmlLayer	
  =	
  new	
  OpenLayers.Layer.Vector(	
  
     	
        	
  "KMLレイヤー",	
  {	
  
     	
        	
         	
  projecion:	
  projecion4326, 	
  //	
  KMLは緯度経度	
    	
        	
         	
strategies:	
  [new	
  OpenLayers.Strategy.Fixed()],	
  
     	
        	
         	
  protocol:	
  new	
  OpenLayers.Protocol.HTTP({	
  
     	
        	
         	
         	
  url:	
  "./test.kml",	
                 ←この部分がKMLを読み込みをおこなっている	
     	
        	
         	
         	
  format:	
  new	
  OpenLayers.Format.KML({	
  
     	
        	
         	
         	
          	
  extractStyles:	
  true,	
  
     	
        	
         	
         	
          	
  extractA5ributes:	
  true,	
  
     	
        	
         	
         	
          	
  maxDepth:	
  2	
  
     	
        	
         	
         	
  })	
  
     	
        	
         	
  })	
  
     	
        	
  }	
  
     	
  );
Chap8.html	
          読み込みたいKMLに変更したあと	
  
②保存しているKMLの名前に変更して保存。(例えば、nara.kmlなら)	

 //KMLからレイヤーを作成	
    	
var	
  kmlLayer	
  =	
  new	
  OpenLayers.Layer.Vector(	
  
     	
        	
  "KMLレイヤー",	
  {	
  
     	
        	
         	
  projecion:	
  projecion4326, 	
  //	
  KMLは緯度経度	
    	
        	
         	
strategies:	
  [new	
  OpenLayers.Strategy.Fixed()],	
  
     	
        	
         	
  protocol:	
  new	
  OpenLayers.Protocol.HTTP({	
  
     	
        	
         	
         	
  url:	
  "./nara.kml",	
                    ←この部分を保存しているKML名に変更	
     	
        	
         	
         	
  format:	
  new	
  OpenLayers.Format.KML({	
  
     	
        	
         	
         	
          	
  extractStyles:	
  true,	
  
     	
        	
         	
         	
          	
  extractA5ributes:	
  true,	
  
     	
        	
         	
         	
          	
  maxDepth:	
  2	
  
     	
        	
         	
         	
  })	
  
     	
        	
         	
  })	
  
     	
        	
  }	
  
     	
  );
Chap8.html	
 読み込むKMLを同じフォルだ内にいれる	
  

Chap8.htmlとnara.kmlが同じフォルダの中にはいっていることを確認する!
Chap8.html	
    最後にchap.htmlを開く	
  




                  表示されればOK!!!	
ダブルクリック!	




                さらに自分で経緯度やズームレベルを設定してみよう!
このスライドに出てくるHTMLファイルは	
  
   以下よりダウンロード可能	
  
   h5p://www.kenyat-­‐geo.org/digitaljapan.zip	
  
                      	




                                   資料に誤りがあれば、ご指摘ください。

Weitere ähnliche Inhalte

Andere mochten auch

大きく進歩したMapServer6の新機能((株)オークニー・丹羽誠様)
大きく進歩したMapServer6の新機能((株)オークニー・丹羽誠様)大きく進歩したMapServer6の新機能((株)オークニー・丹羽誠様)
大きく進歩したMapServer6の新機能((株)オークニー・丹羽誠様)
OSgeo Japan
 
オープンソースの 地理空間情報ソフトFOSS4GとOSGeo財団の紹介 OSC京都2013年
オープンソースの地理空間情報ソフトFOSS4GとOSGeo財団の紹介 OSC京都2013年オープンソースの地理空間情報ソフトFOSS4GとOSGeo財団の紹介 OSC京都2013年
オープンソースの 地理空間情報ソフトFOSS4GとOSGeo財団の紹介 OSC京都2013年
KenichiSAKURAI
 
電子国土を使って観光マップを作成してみる
電子国土を使って観光マップを作成してみる電子国土を使って観光マップを作成してみる
電子国土を使って観光マップを作成してみる
Inoshachu, NPO
 

Andere mochten auch (20)

大規模タイル画像を生成した話((独)農研機構 寺元郁博様)
大規模タイル画像を生成した話((独)農研機構 寺元郁博様)大規模タイル画像を生成した話((独)農研機構 寺元郁博様)
大規模タイル画像を生成した話((独)農研機構 寺元郁博様)
 
大きく進歩したMapServer6の新機能((株)オークニー・丹羽誠様)
大きく進歩したMapServer6の新機能((株)オークニー・丹羽誠様)大きく進歩したMapServer6の新機能((株)オークニー・丹羽誠様)
大きく進歩したMapServer6の新機能((株)オークニー・丹羽誠様)
 
オープンソースの 地理空間情報ソフトFOSS4GとOSGeo財団の紹介 OSC京都2013年
オープンソースの地理空間情報ソフトFOSS4GとOSGeo財団の紹介 OSC京都2013年オープンソースの地理空間情報ソフトFOSS4GとOSGeo財団の紹介 OSC京都2013年
オープンソースの 地理空間情報ソフトFOSS4GとOSGeo財団の紹介 OSC京都2013年
 
電子国土を使って観光マップを作成してみる
電子国土を使って観光マップを作成してみる電子国土を使って観光マップを作成してみる
電子国土を使って観光マップを作成してみる
 
20120126 セミナー 資料
20120126 セミナー 資料20120126 セミナー 資料
20120126 セミナー 資料
 
Map server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 HokkaidoMap server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 Hokkaido
 
20分で語るFOSS4Gの10年
20分で語るFOSS4Gの10年20分で語るFOSS4Gの10年
20分で語るFOSS4Gの10年
 
Foss4 g2014pd xreport
Foss4 g2014pd xreportFoss4 g2014pd xreport
Foss4 g2014pd xreport
 
Foss4g資料西林
Foss4g資料西林Foss4g資料西林
Foss4g資料西林
 
Application insights で行ってみよう
Application insights で行ってみようApplication insights で行ってみよう
Application insights で行ってみよう
 
JavaScript GIS ライブラリ turf.js 入門
JavaScript GIS ライブラリ turf.js 入門JavaScript GIS ライブラリ turf.js 入門
JavaScript GIS ライブラリ turf.js 入門
 
20161030 foss4 g2016_yamakawa
20161030 foss4 g2016_yamakawa20161030 foss4 g2016_yamakawa
20161030 foss4 g2016_yamakawa
 
FOSS4G と北海道地図
FOSS4G と北海道地図FOSS4G と北海道地図
FOSS4G と北海道地図
 
地理空間オープンデータの可視化をオープンソースGISで簡単に!
地理空間オープンデータの可視化をオープンソースGISで簡単に!地理空間オープンデータの可視化をオープンソースGISで簡単に!
地理空間オープンデータの可視化をオープンソースGISで簡単に!
 
FOSS4Gと地理院地図
FOSS4Gと地理院地図FOSS4Gと地理院地図
FOSS4Gと地理院地図
 
地理院地図を手軽に使える オープンソースソフトウェア (FOSS4G) のご紹介
地理院地図を手軽に使えるオープンソースソフトウェア (FOSS4G)のご紹介地理院地図を手軽に使えるオープンソースソフトウェア (FOSS4G)のご紹介
地理院地図を手軽に使える オープンソースソフトウェア (FOSS4G) のご紹介
 
Leaflet初級編 - Web地図サイトを構築してみよう-
Leaflet初級編 - Web地図サイトを構築してみよう-Leaflet初級編 - Web地図サイトを構築してみよう-
Leaflet初級編 - Web地図サイトを構築してみよう-
 
QGIS講習会【印刷編】
QGIS講習会【印刷編】QGIS講習会【印刷編】
QGIS講習会【印刷編】
 
GESTISS_WebGIS_System_v3
GESTISS_WebGIS_System_v3GESTISS_WebGIS_System_v3
GESTISS_WebGIS_System_v3
 
QGIS(v2.2)初級編 さわってみようQGIS
QGIS(v2.2)初級編 さわってみようQGISQGIS(v2.2)初級編 さわってみようQGIS
QGIS(v2.2)初級編 さわってみようQGIS
 

Ähnlich wie 電子国土Part2

自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
Yuki Takei
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
Y Watanabe
 
Jqm20120210
Jqm20120210Jqm20120210
Jqm20120210
cmtomoda
 
Pro aspnetmvc3framework chap11
Pro aspnetmvc3framework chap11Pro aspnetmvc3framework chap11
Pro aspnetmvc3framework chap11
Hideki Hashizume
 
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
AdvancedTechNight
 
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3DプログラミングWebデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Atsushi Tadokoro
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
Ayumi Goto
 
OpenStack + Common Lisp
OpenStack + Common LispOpenStack + Common Lisp
OpenStack + Common Lisp
irix_jp
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
 

Ähnlich wie 電子国土Part2 (20)

Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 
SparqlEPCUが提供するlod開発プラットフォーム
SparqlEPCUが提供するlod開発プラットフォームSparqlEPCUが提供するlod開発プラットフォーム
SparqlEPCUが提供するlod開発プラットフォーム
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
 
WebGL and Three.js
WebGL and Three.jsWebGL and Three.js
WebGL and Three.js
 
Jqm20120210
Jqm20120210Jqm20120210
Jqm20120210
 
Pro aspnetmvc3framework chap11
Pro aspnetmvc3framework chap11Pro aspnetmvc3framework chap11
Pro aspnetmvc3framework chap11
 
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
 
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3DプログラミングWebデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
 
Tamabi media131118
Tamabi media131118Tamabi media131118
Tamabi media131118
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
scala+liftで遊ぼう
scala+liftで遊ぼうscala+liftで遊ぼう
scala+liftで遊ぼう
 
OpenStack + Common Lisp
OpenStack + Common LispOpenStack + Common Lisp
OpenStack + Common Lisp
 
Googleの基盤クローン Hadoopについて
Googleの基盤クローン HadoopについてGoogleの基盤クローン Hadoopについて
Googleの基盤クローン Hadoopについて
 
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
 
LeafletでWebGIS入門
LeafletでWebGIS入門LeafletでWebGIS入門
LeafletでWebGIS入門
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
Googlemaps tutorial
Googlemaps tutorialGooglemaps tutorial
Googlemaps tutorial
 
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoGrails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
 
densan2014-late01
densan2014-late01densan2014-late01
densan2014-late01
 

Mehr von Inoshachu, NPO

20151016 すごい地理教育トーク
20151016 すごい地理教育トーク20151016 すごい地理教育トーク
20151016 すごい地理教育トーク
Inoshachu, NPO
 
QGISを用いた紙地図からデジタルデータへの変換
QGISを用いた紙地図からデジタルデータへの変換QGISを用いた紙地図からデジタルデータへの変換
QGISを用いた紙地図からデジタルデータへの変換
Inoshachu, NPO
 
OpenStreetMap超入門
OpenStreetMap超入門OpenStreetMap超入門
OpenStreetMap超入門
Inoshachu, NPO
 
地理学卒論・修論生のためのQGIS講座_総合編
地理学卒論・修論生のためのQGIS講座_総合編地理学卒論・修論生のためのQGIS講座_総合編
地理学卒論・修論生のためのQGIS講座_総合編
Inoshachu, NPO
 
地理学卒論・修論生のためのQGIS講座_座学編
地理学卒論・修論生のためのQGIS講座_座学編地理学卒論・修論生のためのQGIS講座_座学編
地理学卒論・修論生のためのQGIS講座_座学編
Inoshachu, NPO
 
地理学卒論・修論生のためのQGIS講座_実習編
地理学卒論・修論生のためのQGIS講座_実習編地理学卒論・修論生のためのQGIS講座_実習編
地理学卒論・修論生のためのQGIS講座_実習編
Inoshachu, NPO
 
20130608 電子地図研究会 広島完全版
20130608 電子地図研究会 広島完全版20130608 電子地図研究会 広島完全版
20130608 電子地図研究会 広島完全版
Inoshachu, NPO
 
20121007 日本地理学会商業集積発表
20121007 日本地理学会商業集積発表20121007 日本地理学会商業集積発表
20121007 日本地理学会商業集積発表
Inoshachu, NPO
 
GoogleEarth基礎演習
GoogleEarth基礎演習GoogleEarth基礎演習
GoogleEarth基礎演習
Inoshachu, NPO
 

Mehr von Inoshachu, NPO (16)

地理教育での地理空間情報の活用ポイント
地理教育での地理空間情報の活用ポイント地理教育での地理空間情報の活用ポイント
地理教育での地理空間情報の活用ポイント
 
地理教育でのGoogleMapsの活用ポイント
地理教育でのGoogleMapsの活用ポイント地理教育でのGoogleMapsの活用ポイント
地理教育でのGoogleMapsの活用ポイント
 
地理教育でのGoogle Earthの活用ポイント
地理教育でのGoogle Earthの活用ポイント地理教育でのGoogle Earthの活用ポイント
地理教育でのGoogle Earthの活用ポイント
 
地理教育での地理院地図の活用ポイント
地理教育での地理院地図の活用ポイント地理教育での地理院地図の活用ポイント
地理教育での地理院地図の活用ポイント
 
20151016 すごい地理教育トーク
20151016 すごい地理教育トーク20151016 すごい地理教育トーク
20151016 すごい地理教育トーク
 
20151002_やまぐちGISひろば 第1回GISフォーラム
20151002_やまぐちGISひろば 第1回GISフォーラム20151002_やまぐちGISひろば 第1回GISフォーラム
20151002_やまぐちGISひろば 第1回GISフォーラム
 
QGISを用いた紙地図からデジタルデータへの変換
QGISを用いた紙地図からデジタルデータへの変換QGISを用いた紙地図からデジタルデータへの変換
QGISを用いた紙地図からデジタルデータへの変換
 
OpenStreetMap超入門
OpenStreetMap超入門OpenStreetMap超入門
OpenStreetMap超入門
 
地理学卒論・修論生のためのQGIS講座_総合編
地理学卒論・修論生のためのQGIS講座_総合編地理学卒論・修論生のためのQGIS講座_総合編
地理学卒論・修論生のためのQGIS講座_総合編
 
地理学卒論・修論生のためのQGIS講座_座学編
地理学卒論・修論生のためのQGIS講座_座学編地理学卒論・修論生のためのQGIS講座_座学編
地理学卒論・修論生のためのQGIS講座_座学編
 
地理学卒論・修論生のためのQGIS講座_実習編
地理学卒論・修論生のためのQGIS講座_実習編地理学卒論・修論生のためのQGIS講座_実習編
地理学卒論・修論生のためのQGIS講座_実習編
 
Opentextmap 活用術
Opentextmap 活用術Opentextmap 活用術
Opentextmap 活用術
 
20130608 電子地図研究会 広島完全版
20130608 電子地図研究会 広島完全版20130608 電子地図研究会 広島完全版
20130608 電子地図研究会 広島完全版
 
20121007 日本地理学会商業集積発表
20121007 日本地理学会商業集積発表20121007 日本地理学会商業集積発表
20121007 日本地理学会商業集積発表
 
GoogleEarth基礎演習
GoogleEarth基礎演習GoogleEarth基礎演習
GoogleEarth基礎演習
 
SotM発表スライド
SotM発表スライドSotM発表スライド
SotM発表スライド
 

Kürzlich hochgeladen

The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
koheioishi1
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
YukiTerazawa
 

Kürzlich hochgeladen (8)

東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
 
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
 

電子国土Part2

  • 2. 電子国土Webとは? 前回の復習 WebGISを使って情報を発信しようとすると・・・   ・GISソフトウェアや背景となる地図の準備が必要   それを解 ・GISソフトの購入や地図データの維持管理に費用がかかる 決! あなたが発信する情報と国土地理院が発信する背景地図   を重ねて表示できる!
  • 3. 電子国土WebのPoint! 前回の復習 電子国土を背景地図にした、自作のWebGISが簡単に構築できる 電子国土を使っている例(国土地理院)   h5p://psgsv.gsi.go.jp/koukyou/G-­‐award/list_award1.html  
  • 5. インターネットとWeb 概要:1990年代前半、インターネットが商用化され、インターネットの代表的なアプ リケーションである電子メールをWWW(World  Wide  Web)が爆発的に普及した。 つまり、個々のPCがネットワークでつながり合うことにより、   「自分の情報を公開できる」⇒もっている“地図情報”を公開できる!
  • 6. Webの種類 Webの機能を3つの機能に大別できる   v  読む・・・テキストを読ませる   v  見る・・・写真や映像など見せる   v  使う・・・検索や予約など操作を伴う   使う 見る 見る 読む 読む
  • 7. WebGISではどうなる? WebGISの機能を3つの機能に大別すると・・・   v  読む・・・テキストを読ませる   v  見る・・・地図を見せる   v  使う・・・地図の検索や操作させる             使う   使う       見る 読む     歴史的農業環境閲覧システム   h5p://habs.dc.affrc.go.jp/habs_map.html?zoom=13&lat=35.68428&lon=139.75339&layers=B0  
  • 9. どうやって作る? 人がPCが理解できる言語に変換する HTMLをブラウザと呼ばれる   アプリケーションを使って読み込む 読み込む端末 読み込むアプリ   (ブラウザ) Webブラウザ =知識・ノウハウ   HTML =標準技術 ※HTML以外にもCSSやJavaScript,PHP,DBなどの Web技術のノウハウも必要になってくる。このあ たりの技術は村尾先生の授業にて
  • 11. 電子国土はFOSS4G(オープンソース) オープンソースとは、言葉とおりに言えばソフトウェアのソースが公開されているもの。   詳しくは   h5p://www.opensource.jp/osd/osd-­‐japanese.html を参照   電子国土は、   ・OpenLayers   ・PostgreSQL/PostGIS   ・Proj4.js   などのオープンソースが使われている。 →ソースが公開されているということは、同じようなWebGISを構築することができ、   さらにソースが共有されていることにより、様々な機能を自分用にカスタマイズできる。 OpenStreetMapもOpenLayersの技術が使われている。   OpenLayersが使われている例:h5p://openlayers.org/dev/examples/  
  • 13. Chap1.html HTMLファイルを確認してみる。 OpenLayersは基本的にHTMLとJavaScriptで構成されている。 <html>    <meta  h5p-­‐equiv="Content-­‐Type"  content="text/html;  charset=uh-­‐8"  />      <head>      <itle>20130116_地理情報システムⅡ</itle>        <script  src="h5p://www.openlayers.org/api/OpenLayers.js"></script>        <script>        funcion  init()  {        var  map;          map  =  new  OpenLayers.Map("canvas");          var  mapink  =  new  OpenLayers.Layer.OSM();  map.addLayer(mapink);          //地図の中心に奈良大学を設定
      var  lonLat  =  new  OpenLayers.LonLat(135.783162,34.71516).transform(  new  OpenLayers.Projecion("EPSG:4326"),        new  OpenLayers.Projecion("EPSG:900913"));        map.setCenter(lonLat,  15);        }        </script>    </head>    <body  onload="init();">      <div  id="canvas">mapArea</div>  <br  />    </body>   </html>     テキストファイルに記述するだけでOpenLayersの表示が可能。   >>Chapter1.htmlをテキストエディターで開いてみる。
  • 14. Chap2.html 他の地図に切り替えてみる   <html>   <meta  h5p-­‐equiv="Content-­‐Type"  content="text/html;  charset=uh-­‐8"  />   <head>   <itle>20130116_地理情報システムⅡ</itle>     GoogleMapsに切り替えることもできる <script  src="h5p://www.openlayers.org/api/OpenLayers.js"></script>   <script  src="h5p://maps.google.com/maps/api/js?v=3&amp;sensor=false"></script>   <script>    funcion  init()  {      var  map;     ←ここでは地図の選択ツールを呼び出す処理をしている    map  =  new  OpenLayers.Map("canvas");        map.addControl(new  OpenLayers.Control.LayerSwitcher());        var  mapink  =  new  OpenLayers.Layer.OSM();      map.addLayer(mapink);        var  gsat  =  new  OpenLayers.Layer.Google("Google  Satellite",  {        type  :  google.maps.MapTypeId.SATELLITE,        numZoomLevel  :  15      })      map.addLayer(gsat);        var  ghyb  =  new  OpenLayers.Layer.Google("Google  Hybrid",  {        type  :  google.maps.MapTypeId.HYBRID,        numZoomLevels  :  22,        visibility  :  false      })      map.addLayer(ghyb);        //地図の中心に奈良大学を設定 var  lonLat  =  new  OpenLayers.LonLat(135.783162,34.71516).transform(  new              OpenLayers.Projecion("EPSG:4326"),      new  OpenLayers.Projecion("EPSG:900913"));      map.setCenter(lonLat,  15);      }   </script>   </head>   <body  onload="init();">    <div  id="canvas">mapArea</div>    <br  />   </body>   </html>  
  • 17. 電子国土ポータルにあるサンプル集を使う   まずは、電子国土ポータルにあるサンプル集を使うことで、WebGISとは何かを知ろう! OpenLayersサンプル集(電子国土ポータルより)   h5p://portal.cyberjapan.jp/portalsite/sample/index2.html  
  • 18. Chap3.html 経度・緯度・ズームレベルを指定して表示する   Chap3.htmlをテキストエディターで開いて以下の部分を探そう! //初期の経度 var  initCX  =  138.7313889;     //初期の緯度 var  initCY  =  35.3622222;     //初期のズームレベル //※ここで設定するズームレベルはデータセットの最小ズームレベルが0になる //※デフォルトデータセットでは「ズームレベル0」が0になる var  initZoomLv  =  15;   奈良大学の場所(10進経緯度)   34.714772,135.782948 奈良大学の場所を指定するために赤字のように変更して、上書き保存。 //初期の経度 var  initCX  =  135.782948;     //初期の緯度 var  initCY  =  34.714772;     //初期のズームレベル //※ここで設定するズームレベルはデータセットの最小ズームレベルが0になる //※デフォルトデータセットでは「ズームレベル0」が0になる var  initZoomLv  =  15;   ⇒再度、Internet  Explorerで再度Chap3.htmlダブルクリック
  • 19. Chap3.html 経度・緯度・ズームレベルを指定して表示する   Chap3.htmlをテキストエディターで開いて以下の部分を探そう! //初期の経度 var  initCX  =  138.7313889;     //初期の緯度 var  initCY  =  35.3622222;     //初期のズームレベル //※ここで設定するズームレベルはデータセットの最小ズームレベルが0になる //※デフォルトデータセットでは「ズームレベル0」が0になる var  initZoomLv  =  15;   奈良大学の場所(10進経緯度)   34.714772,135.782948 奈良大学の場所を指定するために赤字のように変更して、上書き保存。 //初期の経度 var  initCX  =  135.782948;     //初期の緯度 var  initCY  =  34.714772;     //初期のズームレベル //※ここで設定するズームレベルはデータセットの最小ズームレベルが0になる //※デフォルトデータセットでは「ズームレベル0」が0になる var  initZoomLv  =  15;   ⇒再度、Internet  Explorerで再度Chap3.htmlダブルクリック
  • 20. Chap4.html ズームレベルを変更する   わからなかったら   chap.4.htmlを開く Chap3.htmlをテキストエディターで開いて以下の部分を探そう! </script>   </head>   <body  onload="init();">   <div  id="map"  name="map"  style="width:500px;height:500px;"></div>   <!-­‐-­‐  これより下に追加 -­‐-­‐>         <!-­‐-­‐  これより上に追加 -­‐-­‐>   </body>   </html>   <table>    <tr><td><input  type="bu5on"  onclick="changeScale(0)"  value="ズームレベル 0"  /></td></tr>    <tr><td><input  type="bu5on"  onclick="changeScale(4)"  value="ズームレベル 4"  /></td></tr>    <tr><td><input  type="bu5on"  onclick="changeScale(8)"  value="ズームレベル 8"  /></td></tr>    <tr><td><input  type="bu5on"  onclick="changeScale(13)"  value="ズームレベル 13"  /></td></tr>   </table> 奈良大学の場所を指定するために赤字のように変更して、上書き保存。 </head>   <body  onload="init();">   <div  id="map"  name="map"  style="width:500px;height:500px;"></div>   <!-­‐-­‐  これより下に追加 -­‐-­‐>   <table>    <tr><td><input  type="bu5on"  onclick="changeScale(0)"  value="ズームレベル 0"  /></td></tr>    <tr><td><input  type="bu5on"  onclick="changeScale(4)"  value="ズームレベル 4"  /></td></tr>    <tr><td><input  type="bu5on"  onclick="changeScale(8)"  value="ズームレベル 8"  /></td></tr>    <tr><td><input  type="bu5on"  onclick="changeScale(13)"  value="ズームレベル 13"  /></ td></tr>   </table>   <!-­‐-­‐  これより上に追加 -­‐-­‐>   </body>   </html>   このようなボタンが出れば成功! ⇒再度、Internet  Explorerで再度Chap3.htmlダブルクリック
  • 22. Chap5.html 距離・面積計測モードを使用する   Chap3.htmlと比較してみよう! こういうコマンドが追加されている。 //  計測コントロールを作成 measureControls  =  {          //  距離計測        line:  new  OpenLayers.Control.Measure(                  OpenLayers.Handler.Path,  {                          persist:  true,                          handlerOpions:  {                                  layerOpions:  {styleMap:  styleMap}                          }                  }          ),            //  面積計測        polygon:  new  OpenLayers.Control.Measure(                  OpenLayers.Handler.Polygon,  {                          persist:  true,                          handlerOpions:  {                                  layerOpions:  {styleMap:  styleMap}                          }                  }          )   };     //  計測コントロールに各種設定を行い、mapに追加 var  control;   for(var  key  in  measureControls)  {          control  =  measureControls[key];            //投影により切り替える control.geodesic  =  true;            //クリックで確定する前にも計測結果を表示し続ける control.setImmediate(true);            //  イベントを追加 control.events.on({                  "measure":  handleMeasurements,                  "measureparial":  handleMeasurements          });          map.addControl(control);   }     //  計測して、計測結果を書き出す funcion  handleMeasurements(event)  {          var  measure  =  event.measure;    //  計測結果 var  units  =  event.units;            //  単位 var  order  =  event.order;          var  element  =  window.document                                                  .getElementById('output');          var  out  =  "";          if(order  ==  1)  {        //  距離 out  +=  measure.toFixed(3)  +  "  "  +  units;          }  else  {                        //  面積 out  +=  measure.toFixed(3)  +  "  "  +  units                                                  +  "<sup>2</sup>";          }          element.innerHTML  =  out;   }
  • 23. Chap6.html 地図画面中心の座標(経度・緯度)を表示する   GISに初期設定があるように   OpenLayersにも地図の初期設定を指定できる。 ←これがあるところまでが   OpenLayersの初期設定のコマンド ↓こいつを初期表示設定のところに追加 //  Mapにmoveイベントを登録し、初期表示のためにイベント起動 map.events.register('move',  map,  handleMapMove);   map.events.triggerEvent('move'); Mapにmoveイベントを登録し、地図画面の内容が変更(移動、拡大・ 縮小)される毎に、指定した命令を実行するように設定できる。 地図の中心を求めるのは初期設定であ る必要がないので、その下に追加 //  moveイベント funcion  handleMapMove()  {          //  地図の中心を取得 var  center  =  map.getCenter();            //  地図座標に変換 center.transform(projecion900913,  projecion4326);            //  「度、分、秒」に変換 var  lon  =  ToLatLonString(center.lon);          var  lat  =  ToLatLonString(center.lat);            document.sample.boxLon.value  =  lon;          document.sample.boxLat.value  =  lat;   }     //  「度」単位から「度、分、秒」の文字列に変換 funcion  ToLatLonString(value){          var  degree  =  parseInt(value);          var  minute  =  parseInt((value-­‐degree)*60);          var  secondRest  =  (value-­‐degree-­‐(minute/60))*3600;          var  second  =  (Math.round(secondRest));          if(second  ==  60){                  second  =  0;                  minute  =  minute  +  1;          }          if(minute  ==  60){                  minute  =  0;                  degree  =  degree  +  1;          }     経緯度表示が追加される!        var  str  =  (degree  +  '度'                                    +  minute  +  '分'                                    +  second  +  '秒');  
  • 24. Chap7.html クリックした場所の座標を計測する   以下のコマンドで追加機能される。 //  座標計測モードに切り替え funcion  set_mode(){   //  イベントが登録済みか調べる  var  listeners=map.events.listeners['click'];    if(listeners!=null){      for(var  i=0,len=listeners.length;i<len;i++){        if(listeners[i].obj  ==  map  &&  listeners[i].func  ==  handleMapClick){   //  登録済み        return;        }      }    }     //  Mapにクリックイベントを登録  map.events.register('click',  map,  handleMapClick);   }     //  座標計測モード終了 funcion  end_mode(){   //  Mapからクリックイベントを削除  map.events.unregister('click',  map,  handleMapClick);   }     //  clickイベント funcion  handleMapClick(evt)  {   //  クリック地点の座標を取得  var  lonlat  =  map.getLonLatFromViewPortPx(evt.xy);     //  地図座標に変換  lonlat.transform(projecion900913,  projecion4326);     //  「度、分、秒」に変換して表示  document.sample.boxLon.value  =  ToLatLonString(lonlat.lon);    document.sample.boxLat.value  =  ToLatLonString(lonlat.lat);   }     //  「度」単位から「度、分、秒」の文字列に変換 funcion  ToLatLonString(value){    var  degree  =  parseInt(value);    var  minute  =  parseInt((value-­‐degree)*60);    var  secondRest  =  (value-­‐degree-­‐(minute/60))*3600;    var  second  =  (Math.round(secondRest));    if(second  ==  60){      second  =  0;      minute  =  minute  +  1;    }    if(minute  ==  60){      minute  =  0;      degree  =  degree  +  1;    }      var  str  =  (degree  +  '度'  +  minute  +  '分'  +  second  +  '秒');    return  str;   } わからなくても良い!   まずは、コピペから機能を追加していこう!!   座標計測モードをクリック! OpenLayersマスターへの道は真似るところから
  • 27. Chap8.html テキストエディターでKMLを読み込む作業   ①Chap8.htmlをテキストエディターで開き、以下の部分を探す。 //KMLからレイヤーを作成 var  kmlLayer  =  new  OpenLayers.Layer.Vector(      "KMLレイヤー",  {        projecion:  projecion4326,  //  KMLは緯度経度 strategies:  [new  OpenLayers.Strategy.Fixed()],        protocol:  new  OpenLayers.Protocol.HTTP({          url:  "./test.kml",   ←この部分がKMLを読み込みをおこなっている        format:  new  OpenLayers.Format.KML({            extractStyles:  true,            extractA5ributes:  true,            maxDepth:  2          })        })      }    );
  • 28. Chap8.html 読み込みたいKMLに変更したあと   ②保存しているKMLの名前に変更して保存。(例えば、nara.kmlなら) //KMLからレイヤーを作成 var  kmlLayer  =  new  OpenLayers.Layer.Vector(      "KMLレイヤー",  {        projecion:  projecion4326,  //  KMLは緯度経度 strategies:  [new  OpenLayers.Strategy.Fixed()],        protocol:  new  OpenLayers.Protocol.HTTP({          url:  "./nara.kml",   ←この部分を保存しているKML名に変更        format:  new  OpenLayers.Format.KML({            extractStyles:  true,            extractA5ributes:  true,            maxDepth:  2          })        })      }    );
  • 30. Chap8.html 最後にchap.htmlを開く   表示されればOK!!! ダブルクリック! さらに自分で経緯度やズームレベルを設定してみよう!
  • 31. このスライドに出てくるHTMLファイルは   以下よりダウンロード可能   h5p://www.kenyat-­‐geo.org/digitaljapan.zip   資料に誤りがあれば、ご指摘ください。