「Leaflet #007 – GeoJSONでマーカー表示」ではscript.jsに直接GeoJSONを記述していましたが、データ量が多くなると汎用性が悪くなるので別ファイルにGeoJSONを保存して外部から読み込む方法を記載します。
GeoJSONのデータを用意するための方法は「Leaflet #007 – GeoJSONでマーカー表示」を参照。
外部から読み込む方法を色々と試してみましたが、なかなかうまくいかず最終的に「jQuery」を利用する方法で落ち着きました。
jQueryとは、JavaScriptをより容易に記述できるようにするために設計された軽量なJavaScriptライブラリです。
尚、GeoJSONのオブジェクトはサーバーにアップロードしないと表示されないようです。
Leafletで外部ファイルのGeoJSONでマーカー表示するためには下記のように記述します。
index.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample</title>
<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" />
<script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
<script src="http://maps.google.com/maps/api/js?v=3.2&sensor=false"></script>
<script src="http://matchingnotes.com/javascripts/leaflet-google.js"></script>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<link href="stylesheet.css" rel="stylesheet" />
</head>
<body>
<div id="map"></div>
<script src="script.js"></script>
</body>
</html>
stylesheet.css
html, body {
width: 100%;
height: 100%;
}
#map {
width: 100%;
height: 100%;
}
.leaflet-map-pane {
z-index: 2 !important;
}
.leaflet-google-layer {
z-index: 1 !important;
}
sample.geojson
{"type":"FeatureCollection","features":[
{"type":"Feature","properties":{},"geometry":{"type":"Point","coordinates":[139.76712226867676,35.68107370561057]}},
{"type":"Feature","properties":{},"geometry":{"type":"Point","coordinates":[139.70030307769775,35.69045025639499]}},
{"type":"Feature","properties":{},"geometry":{"type":"Point","coordinates":[139.7512435913086,35.707283453190406]}}]}
script.js
var t_std = new L.tileLayer('http://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: "<a href='http://www.gsi.go.jp/kikakuchousei/kikakuchousei40182.html' target='_blank'>国土地理院</a>"
});
var t_pale = new L.tileLayer('http://cyberjapandata.gsi.go.jp/xyz/pale/{z}/{x}/{y}.png', {
attribution: "<a href='http://www.gsi.go.jp/kikakuchousei/kikakuchousei40182.html' target='_blank'>国土地理院</a>"
});
var t_ort = new L.tileLayer('http://cyberjapandata.gsi.go.jp/xyz/ort/{z}/{x}/{y}.jpg', {
attribution: "<a href='http://www.gsi.go.jp/kikakuchousei/kikakuchousei40182.html' target='_blank'>国土地理院</a>"
});
var o_std = new L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
});
var g_roadmap = new L.Google('ROADMAP');
var g_satellite = new L.Google('SATELLITE');
var g_hybrid = new L.Google('HYBRID');
var Map_b = {
"地理院地図 標準": t_std,
"地理院地図 淡色": t_pale,
"地理院地図 オルソ": t_ort,
"OpenStreetMap 標準": o_std,
"GoogleMap 標準": g_roadmap,
"GoogleMap オルソ": g_satellite,
"GoogleMap ハイブリッド": g_hybrid,
};
var map = L.map('map', {
center: [35.6910766, 139.7350616],
zoom: 14,
layers: [t_pale]
});
L.control.scale({ maxWidth: 250, imperial: false }).addTo(map);
L.control.layers(Map_b, null, { collapsed: false }).addTo(map);
$.getJSON("sample.geojson", function (data) {
L.geoJson(data).addTo(map);
});
index.htmlを実行すると下記のようにブラウザで表示されます。 ※「この地図は、国土地理院長の承認を得て、同院発行の電子地形図(タイル)を複製したものである。 (承認番号 平27情複、 第224号)」
表示させるファイルを変更したい場合: $.getJSON~の部分の記述を変更します。
$.getJSON("sample2.geojson", function (data) {
L.geoJson(data).addTo(map);
});
- 参考文献
Leaflet
nofuture.tv