他のWeb地図ライブラリ

  google maps や Yahoo! Map の他にも色々な地図ライブラリ&データがあります。  参考1  参考2  参考3

  1. 他の地図ライブラリ

    google や Yahoo! の地図を利用するには表示制御ライブラリと地図データ(タイル)のセットで利用します
    【地図表示ライブラリ】 参考  比較

    1. leaflet 手軽に使え、使いやすい  実例
       参考:  使い方  O.S.Map+Leaflet  ちょこっと試し  reference  リファレンス  Leaflet Draw
    2. OpenLayers GIS 機能が豊富  実例  OpenStreetMap  
       参考:  OpenLayers入門  使ってみよう  ref. OpenLayers3  OpenLayers5  V2.6 リファレンス
    3. Bing 地図 Microsoft の Serviceです  実例  
       参考:  チュートリアル  サンプルコード
    【地図データ】 参考
    1. 地理院タイル 国土地理院のウェブ地図です  利用規約  地理院地図の利用  色々な地図  白地図
    2. OpenStreetMap 地理空間情報のデータベース  copyright
  2. leaflet.js を使う  色々な実際例  あれこれ描く  Leaflet 入門

     leaflet.js で国土地理院地図タイル及びOpenStreetMapを使う例を示します。参考

    1. leaflet.js を使うには、Leaflet をダウンロード するか、ホスティング(下記タグをheadタグ内に記述)で利用します。
    2. 地図画像(タイル)としては地理院タイルOpenStreetMap などを利用します
    3. ここでは地理院地図を利用するので attribution オプションに「地理院リンク」を付けます
    4. 必要に応じて、マーカやポップアップメッセージ、折れ線(polyline)などが付けられます。
    5. より詳しくは、サイト1などをご参考に
    6. Pluginを使えば住所検索なども利用できます

    html-list

    <!DOCTYPE html>
    <html>
      <head>
      <meta charset="UTF-8">
      <title>地理院地図 on Leaflet</title>
      <link rel="stylesheet" href="https://unpkg.com/leaflet@1.4.0/dist/leaflet.css" />
      <script src="https://unpkg.com/leaflet@1.4.0/dist/leaflet.js"></script>
      <style>
        html, body {height:100%; width:100%; padding: 0; margin:0; }
        #vmap {height:98%; width:98%; margin:auto;}  /* 地図表示要素のスタイルを記述 */
      </style>
    </head>
    <body>
      <div id="vmap">ここに地図を表示</div>
      <script>
        var mymap = L.map('vmap');   // 地図を作成する
        mymap.setView([35.192362,139.026346],15); //図中心: 箱根関所, ズームレベル:15
        L.control.scale({maxWidth:200,position:'bottomright',imperial:false}).addTo(mymap);  // スケールを表示
        var marker1 = L.marker([35.189311,139.024623]).addTo(mymap); // マーカを作成
        marker1.bindPopup("箱根駅伝<br>goal・start"); // クリック時にポップアップを表示
        var marker2 = L.marker([35.196262,139.026013]).addTo(mymap); // マーカを作成
        marker2.bindPopup("箱根恩賜公園"); // クリック時にポップアップを表示
        var route = L.polyline([ [35.189311,139.024623],[35.189052,139.025025],[35.191502,139.027394],[35.192102,139.026511],[35.192273,139.026372],[35.192358,139.026340],[35.193125,139.026308],[35.193779,139.026731],[35.193893,139.026474],[35.194046,139.026544],[35.194112,139.026367],[35.194198,139.026276],[35.194754,139.025702],[35.195276,139.025837],[35.195386,139.025815],[35.195523,139.025654],[35.195637,139.025412],[35.195913,139.025756],[35.196005,139.025627],[35.196073,139.025627],[35.196358,139.025815],[35.196262,139.026013]],{color:"red",weight:3}).addTo(mymap); // polyline データを追加
          //地理院地図の標準地図タイル
          var gsi =L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', 
            {attribution: "<a href='https://maps.gsi.go.jp/development/ichiran.html' target='_blank'>地理院タイル</a>"});    // 地理院タイルの出典情報のリンク
          //地理院地図の写真タイル
          var gsiphoto = L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/seamlessphoto/{z}/{x}/{y}.jpg',
            {attribution: "<a href='http://portal.cyberjapan.jp/help/termsofuse.html' target='_blank'>地理院タイル</a>"});
          //地理院地図の色別標高図
          var relief = L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/relief/{z}/{x}/{y}.png',
            {attribution: "<a href='http://portal.cyberjapan.jp/help/termsofuse.html' target='_blank'>地理院タイル</a>「海域部は海上保安庁海洋情報部の資料を使用して作成」"});
          // オープンストリートマップのタイル
          var osm = L.tileLayer('http://tile.openstreetmap.jp/{z}/{x}/{y}.png',
            {  attribution: "c<a href='http://osm.org/copyright' target='_blank'>OpenStreetMap</a> contributors" });
          var baseMaps = {    // base layers オブジェクトとして、baseMaps を設定
            "地理院地図" : gsi,
            "地理院写真" : gsiphoto,
            "色別標高図" : relief,
            "O.S.Map"  : osm
          };
          var overlays = {    // overlays オブジェクトとして、overlays を設定
            "歩走路": route,
            "箱根恩賜公園": marker2
          };
          // layersコントロールに baseMaps と overlays を設定して地図に追加
          L.control.layers(baseMaps,overlays).addTo(mymap);
          gsi.addTo(mymap);   // gsi "地理院地図" をベースレイヤに設定
      </script>
    </body>
    </html>

    解説

    ( 4行目) このページは、UTF-8 で記述しています
    ( 6,7行)  leaflet.js をホスティングするため leaflet にリンクを貼ります
    (10行目) 地図表示要素のスタイルを記述します
    (14行目) <div id="vmap"> で地図表示領域を設定します
    (15行~) 表示する地図の詳細を具体的に記述します
    (16行目) id='vmap' に表示する地図を変数 mymap に書込む事にします
    (17行目) 表示地図の中心地の緯度,経度とズーム値を指定します
    (18行目) スケールを地図右下に設置します
    (19行目) mymap に marker1 を設置します
    (20行目) marker1 をクリックした時のポップアップ表示を記述します
    (21,22行) 同様に marker2 を設置します
    (23行目) 地図に追記する polyline データを記述し、変数 route とします
    (25,26行) 地理院地図の標準地図タイルを利用可能に設定します
    (28,29行) 地理院地図の写真タイルを利用可能に設定します
    (31,32行) 地理院地図の色別標高図タイルを利用可能に設定します
    (34,35行) OpenStreetMap の地図タイルを利用可能に設定します
    (36-41行) ベース地図タイルのセレクタ baseMaps を記述します
    (42-45行) オーバーレイのセレクタ overlays を記述します
    (47行目) セレクタ baseMaps と overlays を mymap に設置します
    (48行目) mymap に地理院地図の標準地図タイル gsi を初期設定します

  3. OpenLayers を使う  色々な実際例

     OpenLayers で地図を使う例を示します。  参考a  参考b  参考c  参考d

    1. OpenLayers を使うには、ol package 環境をインストール するか、 OpenLayers を Include して利用 (推奨ではない) します。
    2. 後者の方法で OpenLayers を使うには、次のリンク等を記述します。
    3. 地図画像(タイル)としては同じく OpenStreetMap地理院タイルなどが利用出来ます
    4. ここでも利用する地図タイルの出典表示をする必要があります
    5. より詳しくは、参考サイトなどをご参考に
    6. その他   OpenLayers 6  OpenLayers 5

    html-list

    <!DOCTYPE html>
    <html lang="ja">
    <head>
      <meta charset="UTF-8">
      <title>Openlayers 5.3.0</title>
      <link rel="stylesheet" href="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/css/ol.css" type="text/css">
      <script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/build/ol.js"></script>
      <style>
        html, body { height:99%; width: 100%; padding:1px 0; margin: 0; }
        #map {height:98%; width:98%; margin:0 auto;}
        #content { width: 100%; height: 100%; }
        body #content p { margin: 0 0 0 0 ; }
        body .popup {
          left: -36px ; top: -76px ;
          position: relative ; display: inline-block ;
          margin: 1.5em 0 ; padding: 3px 6px ;
          width: 130px ; background: #FFF ;
          box-sizing: border-box ; font-size: 12px ;
          border: solid 1px #555 ; border-radius: 6px;
        }
      </style>
    </head>
    <body>
      <div id="map" class="map"></div>
      <div id="pop_pfq" class="popup">
          <div id="content"> </div>
      </div>
      <script>
        var container = document.getElementById('pop_pfq');
        var content = document.getElementById('content');
        var popupoverlay = new ol.Overlay({ element: container });
        var gsi_raster = new ol.layer.Tile({   // 国土地理院地図タイル設定
          source: new ol.source.XYZ({
            url: "https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png",
            attributions: "<a href='https://openlayers.org/' target='_blank'>Openlayers</a>: <a href='https://maps.gsi.go.jp/development/ichiran.html' target='_blank'>地理院タイル</a>",
            projection: "EPSG:3857"
          })
        });
        var map = new ol.Map({
          target: 'map', 
          layers: [
    //        gsi_raster                                     // 国土地理院地図タイルを使用
            new ol.layer.Tile({ source: new ol.source.OSM() }) // OSM 地図タイルを使用
          ],
          controls: ol.control.defaults({
            attributionOptions: { collapsible: false }  // 地図タイル出典を表示
          }),
          overlays:[popupoverlay],  // 吹き出しオーバーレイを追加
          view: new ol.View({
              center: ol.proj.fromLonLat([142.854154,43.663575]),  // 大雪山 旭岳
              zoom: 9
          })
        });  // map  ------------------------------
     
        var markerStyleA = new ol.style.Style({  // マーカスタイルを作成
          image:new ol.style.Icon({
            anchor: [0.5, 1],
            anchorXUnits: 'fraction',
            anchorYUnits: 'fraction',
            opacity: 0.75,
            src: '../img/mkg.gif'
          })
        });
        var markerA = new ol.Feature({  // Featureオブジェクトとしてマーカを作成
          geometry: new ol.geom.Point(ol.proj.fromLonLat([142.854154,43.663575])),
          name: "大雪山 <a href='../../jtaisetu/taisetu.html#jiki' target='_blank'>旭岳</a>"  // 吹き出し内に表示するコンテンツ
        });
        markerA.setStyle(markerStyleA);
        map.addLayer(new ol.layer.Vector({
          source: new ol.source.Vector({ features: [markerA] })
        }));
        map.on('click', function(evt){   // マーカ(feature)をクリックしたら吹出を表示
          var feature = map.forEachFeatureAtPixel(evt.pixel,function(feature){return feature;});
    	  if(feature){
    		content.innerHTML = '<p>'+feature.get('name')+'</p>'; // コンテンツを書き込む
    		var coordinate = feature.getGeometry().getCoordinates();  // マーカの座標を取得
    		popupoverlay.setPosition(coordinate);  // 吹出オーバーレイの位置に座標を適用
    	  }else{
    		popupoverlay.setPosition(undefined); //マーカ以外の場所をクリックしたら吹出を消す
    	  }
        });
      </script>
    </body>
    </html>

    解説

    ( 1行目) このページは、html5 で記述しています
    ( 4行目) このページは、UTF-8 で記述しています
    ( 6,7行) OpenLayers 5 を利用するため ol.js ファイル等にリンクを貼ります
    ( 8~21行) 地図表示、ポップアップのスタイルを記述します
    (24行目) <div id="vmap"・・・ で地図表示領域を設定します
    (25行目) <div id="pop_pfq"・・・ でポップアップ領域を確保します
    (26行目) ポップアップ要素内のコンテンツ領域を確保します
    (28行~) 地図を表示するためのスクリプトを記述します
    (29行目) ポップアップ要素の内容を var container としました
    (30行目) ポップアップ内のコンテンツを var content としました
    (31行目) container のオーバーレイを var popupoverlay としました
    (32~38行) 国土地理院地図タイルを var gsi_raster と設置しました
    (33行目) XYZ タイプのタイルを呼び出します
    (34行目) 地図タイルの url を記述します
    (35行目) 地図タイルの出典表示をします
    (36行目) EPSG:3857 規格の地図であることを指定します
    (39行目) ol.Map を var map として扱います
    (40行目) var map は id='map' 要素を扱う地図であることを示します
    (41行目) EPSG:3857 規格の地図であることを指定します
    (42行目) 国土地理院の地図タイルを使う場合はこの行を有効にします
    (43行目) ここでは OpenStreetMap の地図を使うのでこの行を有効にします
    (45~47行) 地図の出典を表示するため collapsible:false と記述します
    (48行目) 吹き出し[popupoverlay] をオーバーレイすることを記述しました
    (50,51行) 表示地図の中心経度・緯度、ズーム値を指定します
    (55~63行) マーカスタイル markerStyleA を設定します
    (57行目) アンカの位置を 0.5x(中央), 1y(下端) としました
    (61行目) マーカアイコンの src を指定します
    (64~67行) マーカを Featureオブジェクトとして設定しました
    (65行目) マーカアイコンの設置経度・緯度を指定します
    (66行目) マーカのポップアップに記述する内容を name に書きます
    (68行目) マーカにマーカスタイルをセットします
    (69~71行) map に features: [markerA] を レイヤ付加します
    (72~81行) マーカ(feature) 等をクリックした時にポップアップにコンテンツを表示します
    (75行目) マーカのポップアップに記述する内容を name に書きます
    (76行目) マーカの座標を取得し、
    (77行目) popupoverlay の表示位置をそこに表示します
    (79行目) マーカ以外の場所をクリックしたらポップアップを消します


  4. Bing Maps を使う  実際例  参考  V8 Samples

     Microsoftの地図サービス、Bing Mapsを使うことも出来ます。  チュートリアル  使ってみよう  API Sample

    1. Bing Maps を使うには、「Bing Maps Key」が必要です。 Keyの取得
    2. Bing Maps Keyは、「Bing Maps Developer Center」から取得できます。
    3. 下記のようなソース記述して Map を表示します→
    4. 幾つかの具体例は、こちらをご参考に。
    5. 更には、Code Sample などをご参考に
  5. 関連サイト
    1. 行政サイトの注意事項  行政サイトで使う  使える地図  ハザードマップ
    2. 地理院地図  地理院タイル  地理院地図一覧  簡単につくる  「cyberjapan.jp」停止  住所表を地図表示
    3. Google Maps の代替  openlayersとleaflet  色々な地図を表示
    4. EPSG:3857/EPSG:4326  空間参照系  OpenなGIS
    5. 地図タイルの仕組み  タイル地図入門  地理院タイル  地図タイル  XYZ Tiles  QGISマニュアル
    6. Leafletの使い方  Leaflet Draw  画面連動  Leaflet地図リスト
    7. OpenLayers  Popup  ポリゴンデータを表示
    8. シームレス地質図  座席表
    9. japan-map-js  Jmap jQuery