Webサイト作成支援

2014-07-23 更新

 このページでは,シームレス地質図のタイル画像を使って,皆様のWebサイトでシームレス地質図を表示させる方法やサンプルファイルをご紹介します.

概要

 シームレス地質図の表示ページでは,小さな正方形に分割した地質図画像(タイル画像)を使用しています. また,Google社が提供するGoogle Maps JavaScript APIを利用して地質図の操作を行っています. タイル画像は日本シームレス地質図WMTSサービスとして提供しており,表示をカスタマイズしたり,さらにご自身のデータを追加するなどして,独自のWebサイトを作成・公開することが可能です. そのためには,通常はJavaScriptに関する知識が必要であり,習得すれば高機能なサイトも作成可能ですが,簡単なものならここでご紹介するサンプルをダウンロードし,コピー&ペーストして作成することができます.
日本シームレス地質図WMTS試験配信サービス仕様

ライセンス等

 シームレス地質図はクリエイティブコモンズ 表示-改変禁止(CC BY-ND) 2.1 日本ライセンスにの元に提供しています.また,シームレス地質図の画像タイルを利用して,ここに示したサンプルのようなタイルのURLのみを利用したWebサイトを公開する場合,クレジット表記のみで許諾申請等は不要です.

●サンプル1: 最小サンプル,simple.html

 このサンプルは,シームレス地質図のタイルを用いた最もシンプルな例です.  

・表示例

 

・ソースコード

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/static.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta http-equiv="Content-Style-Type" content="text/css" />
  <title>シームレス地質図タイル利用-最小サンプル</title>
</head>
<body>
  <h4>シームレス地質図タイル利用-最小サンプル</h4>
  <div id="map" style="width: 400px; height: 300px;"></div>
  <img src="https://gbank.gsj.jp/seamless/img/aist_logo_l.png" alt="AIST" id="logo"
      onclick="location.href='http://www.aist.go.jp/'" 
      style="width: 50px; height: 18px; opacity: 0.7;" />
  <span style="font-size: small;">
    <img style="width:36px;" src="https://www.gsj.jp/license/images/GSJ_LOGO_200711_bl.png"></img>
    <a href="https://gbank.gsj.jp/seamless/">20万分の1日本シームレス地質図</a>
    <a href="http://creativecommons.org/licenses/by-nd/2.1/jp/">
      <img src="https://www.gsj.jp/common/images/ccbynd_s.png"></img>
    </a>
    基本版を使用 (→<a href="https://gbank.gsj.jp/seamless/legend.html">凡例画像</a>)<br />
    「シームレス地質図<sup>®</sup>」は産業技術総合研究所の登録商標です
  </span>
  <script src="http://maps.google.com/maps/api/js?sensor=false&region=jp"></script>
  <script>

// Webアプリの初期化
function initialize() {
    var _server = 'https://gbank.gsj.jp/seamless/tilemap/';  // 日本シームレス地質図WMTSサービスURL
    var _geolMapType = 'basic';              // 地質図の種類(basic: 基本版, detailed: 詳細版)
    var _layer = 'glfn';                     // レイヤー(glfn: 地質+ライン+断層+凡例番号)
    var _opacity = 0.7;                      // 地質図の不透明度(0-1, 0が完全に透明)
    var _map = new google.maps.Map(document.getElementById('map'), {
        zoom: 11,                            // ズームレベル(5-13, 大きいほど拡大)
        center: new google.maps.LatLng(36.22, 140.13),      // 中心の緯度・経度(360度法十進数)
        mapTypeId: google.maps.MapTypeId.ROADMAP,           // 背景地図の種類
                                             // ROADMAP: 道路地図, SATELLITE: 衛星写真
                                             // HYBRID: 衛星写真+道路, TERRAIN: 地形・植生
        minZoom: 5,
        maxZoom: 13
    } );
    _map.overlayMapTypes.insertAt(0, new google.maps.ImageMapType({
        getTileUrl: function(_coord, _z) {
            return _server+_geolMapType +'/'+_layer +'/'+_z+'/'+_coord.y+'/'+_coord.x+'.png';
        },
        tileSize: new google.maps.Size(256, 256),
        isPng: true,
        opacity: _opacity, 
        minZoom: 8,
        maxZoom: 13
    }));
    var _aistLogo =document.getElementById('logo');
    _map.controls[google.maps.ControlPosition.LEFT_BOTTOM].push(_aistLogo);
};

// windowロード時に initialize関数を呼び出す
google.maps.event.addDomListener(window, 'load', initialize);

</script>
</body>
</html>

・解説

 前半のhtmlの要素の記述部分では,地図(地質図)を表示するためのdiv要素を用意し,id属性に'map',幅と高さをそれぞれ400px, 300pxに設定しています. また,script要素でGoogle Maps JavaScript APIをロードしています.
 後半のJavaScriptのコードでは,まずソースの最後の行で,ウィンドウのロードが終了したとときに呼び出す関数initialize()を指定しています.initialize()では,各種パラメータを設定して,Googleの google.maps.Map()関数を使って地図(地質図)オブジェクトを生成しています.
 そして最後に,map.overlayMapTypes.insertAt()関数を使って,シームレス地質図用のImageMapTypeオブジェクトを作成,挿入しています.
 各パラメータの意味は,ソース中のコメントを参照していただければだいたいわかると思います.
 サンプル2ではこれらのパラメータを変更してみます.

●サンプル2:表示パラメータの変更,bounds.html

 このサンプルは,サンプル1を元に,設定を様々に変更したものです.
 また,Google Maps APIのfitBoudns()関数を用いて範囲を淡路島がちょうど入るように設定しています.  

・表示例

 

・ソースコード(主要部分の抜粋)

function initialize() {
    var _server = 'https://gbank.gsj.jp/seamless/tilemap/';  // 日本シームレス地質図WMTS配信サービスURL
    var _geolMapType = 'detailed';           // 地質図の種類(basic: 基本版, detailed: 詳細版)
    var _layer = 'g';                        // レイヤー(glfn: 地質+ライン+断層+凡例番号)
    var _opacity = 0.5;                      // 地質図の不透明度(0-1, 0が完全に透明)
    var _map = new google.maps.Map(document.getElementById('map'), {
        zoom: 9,                             // ズームレベル(5-13, 大きいほど拡大)
        center: new google.maps.LatLng(34, 135),       // 中心の緯度・経度(360度法十進数)
        mapTypeId: google.maps.MapTypeId.ROADMAP,      // 背景地図の種類
                                             // ROADMAP: 道路地図, SATELLITE: 衛星写真
                                             // HYBRID: 衛星写真+道路, TERRAIN: 地形・植生
        minZoom: 5,
        maxZoom: 13
    } );
    // 地図を合わせる範囲を指定する.この例は淡路島
    _map.fitBounds(new google.maps.LatLngBounds(  
      new google.maps.LatLng(34.19, 134.65),
      new google.maps.LatLng(34.61, 135.03)
    ));
    
    ...(中略)...
    
};

・解説

 このサンプルでは,最初のサンプルのパラメータを以下のように変更しています.
 レイヤーには,'g'(地質のみ)やサンプル1で用いた'glfn'(地質+ポリゴン境界+断層+凡例番号)などが指定可能です. 地質以外はある程度拡大したときにのみ表示されます.
 また,map.fitBounds()関数を使って,地図の描画範囲を淡路島に設定しています.

●サンプル3:マーカーの表示,marker.html

 通常,シームレス地質図を使って新しいWebサイトを作ろうとする場合,独自の情報を載せたいと思います.
 そのための最も簡単な方法は,マーカーやバルーンを使って情報を表示させる方法です.
 このサンプルは,サンプル1を元に筑波山の位置にマーカーとバルーンを表示させたものです.  

・表示例

 

・ソースコード(主要部分の抜粋)

function initialize() {
    
    ...(中略)...
    
    var _marker = new google.maps.Marker({
        position: new google.maps.LatLng(36.23, 140.10),
        map: _map
    });
    var _info =new google.maps.InfoWindow({
        content: '<h4>筑波山</h4>山頂は斑れい岩でできています。<br />' + 
            '<a href="http://www.gsj.jp/Info/100mt/tsukuba/tsuku_dr.html;→地質で語る百名山</a>'
    });
    _info.open(_map, _marker);
    var _aistLogo =document.getElementById('logo');
    _map.controls[google.maps.ControlPosition.LEFT_BOTTOM].push(_aistLogo);
};

・解説

 マーカーオブジェクトはgoogle.maps.Marker()関数を使って生成します.
 バルーン用の情報ウィンドウオブジェクトはgoogle.maps.InfoWindow()関数を使って生成します. このオブジェクトのopne()関数に,先ほどのマーカーオブジェクトを引数として与えると,マーカーの位置にバルーンが表示されます.
 バルーンの中に表示させる内容は,バルーン生成時にcontentパラメータに設定します.このサンプルのようにhtmlを記述できますので,リンクなども含めることができます.
 また,このサンプルでは地質図を表示させる領域を広くしています.この設定は地質図を表示するdiv要素のstyle属性で行っています.

●サンプル4:KMLファイル利用,kml.html

 KMLファイルを利用すると,シームレス地質図上により多様なデータを表示させることができます. KMLはGoogle Earthなどで出力できるフォーマットで,多量なマーカーやポリゴンなども表示させることができます.
 このサンプルは筑波山周辺の地質見学ポイントをKMLで用意し,それをシームレス地質図上に表示させています.  

・表示例

 

・ソースコード(主要部分の抜粋)

function initialize() {
    
    ...(中略)...
    
    var kmlUrl = 'https://gbank.gsj.jp/seamless/sample/geomeister2011_mini.kmz';
    new google.maps.KmlLayer(kmlUrl, {map: _map});
    var _aistLogo =document.getElementById('logo');
    _map.controls[google.maps.ControlPosition.LEFT_BOTTOM].push(_aistLogo);
};
  

・解説

 KMLを表示するためのKMLレイヤーオブジェクトは,google.maps.KmlLyaer()関数を使って,引数にURLと表示するmapオブジェクトを指定して生成します. 読み込むKMLは公開URL(インターネット上でアクセス可能)でなければなりません.このサンプルの例のように,ただ生成するだけですぐに表示されます.
 KMLファイルの作成は,Google Earthや,GIS(地理情報システム)ソフト等で行うことができ,GISは無料のものも公開されています.

●サンプル5:クリック地点の凡例表示,legend.html

 情凡例報取得サービスを利用すると,マウスでクリックした地点の凡例情報を表示させることができます. サンプルの地質図上でマウスをクリックしてみてください.その地点の情報がバルーン状に表示されます.  

・表示例

 

・ソースコード(主要部分の抜粋)

  
var map;          // マップオブジェクト
var clickLatLng;  // クリック位置

// Webアプリの初期化
function initialize() {
    var _server = 'https://gbank.gsj.jp/seamless/tilemap/';  // 日本シームレス地質図WMTSサービスURL
    
    ...(中略)...
    
    google.maps.event.addListener(map, 'click', function(event) {   // 地図クリック時の動作を記述
      clickLatLng = event.latLng;                             // show()関数で利用するためにコピー
      var _ll = event.latLng.lat()+','+event.latLng.lng();
      var _script = document.createElement('script');                      //  sciprt要素を生成
      var _query = _geolMapType + '/g?latlng=' + _ll + '&callback=show';
      _script.setAttribute( 'src', _server + _query );        //凡例情報取得APIを指定
      document.getElementsByTagName('body')[0].appendChild(_script);       // script要素を追加
    });
    var _aistLogo =document.getElementById('logo');
    map.controls[google.maps.ControlPosition.LEFT_BOTTOM].push(_aistLogo);
};

function show(_data) {                              // 凡例情報が取得できたときに呼び出される関数
    var _infoWnd = new google.maps.InfoWindow({     // 情報ウィンドウを生成
        position: clickLatLng,
        content: '<div style="font-size:small;width:300px;">No. '+_data.ID+'<br />'
            +_data.description+'</div>'
        // _dataオブジェクトからは以下のような情報を取得できます
        // ID: 凡例番号,description: 説明,title: タイトル,fill: 色(16進6桁), group: グループ
        // formationAge: 形成年代,lithology: 岩質, partOf:(詳細版のみ)対応する基本版の凡例番号
    });
    _infoWnd.open(map);
}
  

・解説

 地質図をクリックしたときの動作は,google.maps.event.addListener()メソッドを使って,'click'イベントに対する処理として記述します. このメソッド内では,event.latLng()を使って現在位置を取得できます. この位置情報をパラメータとして,凡例情報取得サービス(https://gbank.gsj.jp/seamless/tilemap/{type}/g?)を呼び出します. script要素を生成してsrc属性に凡例情報取得サービスをセットすると,凡例情報が取得できれば結果を処理する関数(この例ではshow()関数)が呼び出されます. 最後にshow()関数の中で情報ウィンドウに表示する中身を組み立てて,情報ウィンドウを生成・表示させています.

●参考資料

・Google Maps APIプログラミング入門

 勝又 雅史著,2010年3月31日,アスキー・メディアワークス,478p

・Google API Expertが解説する Google Maps APIプログラミングガイド

 勝又 雅史・古旗 一浩・石丸 健太郎・安藤 幸央著,2011年12月1日,インプレスジャパン,319p