var __map;
var __markerLayer = null;
var __overlay = null; // ポップアップを表示するためのレイヤー
var site = null;
function loadMap() {
// マップの作成
__map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
view: new ol.View({
center: ol.proj.fromLonLat([139.745433,35.658581]),
zoom: 8
})
});
// マーカーの見た目の作成
var style = new ol.style.Style({
image: new ol.style.Icon({
src: 'lib/img/osm_200x200.png',
anchor: [0.5, 0.5],
scale: 0.2
})
});
// 表示するためのレイヤーを作成する
__markerLayer = new ol.layer.Vector({
source: new ol.source.Vector()
});
__map.addLayer(__markerLayer);
// ポップアップを表示するためのオーバーレイを作成する
__overlay = new ol.Overlay({
element: document.getElementById('popup'),
positioning: 'bottom-center'
});
$.when(
$.getJSON("index.json")
).done(function(data) {
site = data.site;
style = new ol.style.Style({
image: new ol.style.Icon({
src: 'lib/img/osm_200x200.png',
anchor: [0.5, 0.5],
scale: 0.2
}),
stroke: new ol.style.Stroke({color: '#ff33ff', width: 10})
});
$(data.list).each(function() {
var feature = new ol.Feature({
geometry: new ol.geom.Point(ol.proj.fromLonLat(this.coordinates)),
code: this.code,
name: this.name
});
feature.information = this;
feature.setStyle(style);
__markerLayer.getSource().addFeature(feature);
});
// 地図のクリックイベントを設定
__map.on('click', function (evt) {
var feature = __map.forEachFeatureAtPixel(
evt.pixel,
function (feature) {
return feature;
}
);
if (feature) {
var coordinates = feature.getGeometry().getCoordinates();
var info = feature.information;
var element = __overlay.getElement();
var descriptionHTML =
"<div>" + info.code + "</div>" +
"<div>" + info.name + "</div>" +
"<div><a href='index2.html?code="+ info.code +"'>" + info.path + "</a></div>";
element.innerHTML = descriptionHTML;
__overlay.setPosition(coordinates);
__map.addOverlay(__overlay);
} else {
__map.removeOverlay(__overlay);
}
});
});
}