▶︎ Data source: https://github.com/nabe8726/Hokkaidohackathon_2015Oct
▷ Another version: Leaflet plugin cluster ver. - https://bl.ocks.org/Hirosaji/7c710df82bca6eda2cdc6f73f406c1c6
Built with blockbuilder.org
# leaflet - Images on Map (using D3.js) | |
license: mit |
▶︎ Data source: https://github.com/nabe8726/Hokkaidohackathon_2015Oct
▷ Another version: Leaflet plugin cluster ver. - https://bl.ocks.org/Hirosaji/7c710df82bca6eda2cdc6f73f406c1c6
Built with blockbuilder.org
<!DOCTYPE html> | |
<head> | |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/leaflet.css"/> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/leaflet-src.js"></script> | |
<script src="https://d3js.org/d3.v3.min.js"></script> | |
<link rel="stylesheet" href="style.css"/> | |
</head> | |
<body> | |
<div id="mapid"></div> | |
<script> | |
//Leaflet初期設定 | |
var map = L.map("mapid").setView([43.50, 142.0], 7); | |
var mapLink = '<a href="http://portal.cyberjapan.jp/help/termsofuse.html">国土地理院 地理院地図 標準地図</a>'; | |
//Leafletに用意されたsvgを使う | |
map._initPathRoot(); //ver0.8以降は、L.svg().addTo(map)を使う | |
//Tile Map Serviceの指定 | |
L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token={accessToken}', { | |
attribution: 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://mapbox.com">Mapbox</a>', | |
maxZoom: 18, | |
id: 'mapbox.streets-basic', | |
accessToken: 'pk.eyJ1IjoiaGlyb3NhamkiLCJhIjoiY2phYW1qM2lyMHRzcTMybzd1dzhlaG83NCJ9.2QcsoUxneas4TQFI3F-DyQ' | |
}).addTo(map); | |
// svg要素を選択 | |
var svg = d3.select("#mapid").select("svg"); | |
var g = svg.append("g"); | |
// tooltipの設定 | |
var tooltip = d3.select("body").append("div") | |
.attr("id", "tooltip") | |
.style("opacity", 0); | |
d3.json("onsen.geojson", function(point){ | |
//元データにLeafletのLatLngobjを追加 | |
point.features.forEach(function(d){ | |
d.LatLngObj = new L.LatLng(d.geometry.coordinates[1], d.geometry.coordinates[0]); | |
}); | |
//サークル要素を追加 | |
var image = g.selectAll("image") | |
.data(point.features) | |
.enter() | |
.append("image") | |
.attr({ | |
"href": "onsen_icon.svg", | |
"width": "1%", | |
}) | |
.on("mouseover", function(d){ return tooltip.style("opacity", 1).text(d.properties["温泉名"]); }) | |
.on("mousemove", function(d){ return tooltip.style("top", (event.pageY-20)+"px").style("left",(event.pageX+10)+"px"); }) | |
.on("mouseout", function(d){ return tooltip.style("opacity", 0); }); | |
map.on("viewreset", update); | |
update(); | |
function update() { | |
//サークル要素の位置をアップデート | |
image.attr("transform", function(d) { | |
return "translate("+ | |
map.latLngToLayerPoint(d.LatLngObj).x +","+ | |
map.latLngToLayerPoint(d.LatLngObj).y +")"; | |
}); | |
} | |
}); | |
</script> | |
</body> |
<!--?xml version="1.0" encoding="utf-8"?--> | |
<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |
<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="512px" height="512px" viewBox="0 0 512 512" style="width: 256px; height: 256px; opacity: 1;" xml:space="preserve"> | |
<style type="text/css"> | |
.st0{fill:#4B4B4B;} | |
</style> | |
<g> | |
<path class="st0" d="M506.391,287.074c-3.578-10.219-13.484-22-20.734-29.047c-17.188-16.672-35.688-25-44.75-29.875 | |
c-6.75-4.047-15.313-1.594-19.188,5.484c-3.844,7.063-1.313,15.703,5.219,20.141c42.844,29.234,49.906,64.281,18.906,100.859 | |
c-9.266,10.922-21.641,19.563-39.813,29.75c-29.734,16.656-91.094,31.313-150.031,31.234 | |
c-58.938,0.078-120.297-14.578-150.031-31.234c-18.156-10.188-30.531-18.828-39.813-29.75c-31-36.578-23.938-71.625,18.938-100.859 | |
c6.5-4.438,9.047-13.078,5.188-20.141c-3.844-7.078-12.438-9.531-19.156-5.484c-9.078,4.875-27.594,13.203-44.75,29.875 | |
c-7.281,7.047-17.188,18.828-20.75,29.047C2.047,297.262,0,308.402,0,320.027c0,12.016,2.25,23.766,6.375,34.719 | |
c7.219,19.203,19.766,35.828,35.563,50.047c23.781,21.313,55.188,37.719,91.656,49.219c36.484,11.453,78.125,17.844,122.406,17.844 | |
s85.922-6.391,122.406-17.844c36.469-11.5,67.875-27.906,91.656-49.219c15.797-14.219,28.359-30.844,35.563-50.047 | |
c4.125-10.953,6.391-22.703,6.375-34.719C512.016,308.402,509.953,297.262,506.391,287.074z" style="fill: rgb(223, 86, 86);"></path> | |
<path class="st0" d="M239.5,314.074c7.031,15.563,15.969,25.781,22.75,31.281c6.906,5.516,12.406,7.266,16.656,4.859 | |
c4.281-2.406,5.188-8.484,3.594-17.016c-1.594-8.578-5.156-18.859-7.609-31.172c-2.516-12.188-4.203-27.906-4.203-45.328 | |
c0.063-8.547,0.719-17.094,2.438-25.578c1.688-8.531,4.594-17.016,8.547-27.516c3.953-10.438,8.203-22.75,10.297-35.031 | |
c2.188-12.313,2.531-24.234,1.953-35.094c-1.328-21.406-5.563-40.516-12.594-56.141c-7.016-15.578-15.984-25.781-22.766-31.281 | |
c-6.906-5.516-12.406-7.266-16.656-4.859c-4.281,2.406-5.172,8.5-3.563,17.016c1.594,8.594,5.156,18.859,7.609,31.172 | |
c2.516,12.172,4.203,27.906,4.203,45.313c-0.063,8.547-0.719,17.094-2.438,25.578c-1.688,8.531-4.594,17.016-8.563,27.516 | |
c-3.953,10.453-8.188,22.75-10.281,35.063c-2.188,12.297-2.563,24.219-1.953,35.078C228.234,279.34,232.469,298.449,239.5,314.074z | |
" style="fill: rgb(223, 86, 86);"></path> | |
<path class="st0" d="M329.094,278.465c2.063,8.656,4.938,16.734,8.438,23.719c7.094,14.141,15.938,22.828,22.469,27.266 | |
c6.688,4.453,12,5.531,16.141,2.922s5.016-8.344,3.469-16.063c-1.516-7.781-4.906-16.797-7.109-27.313 | |
c-2.281-10.375-3.781-24-3.563-39.078c0.156-7.359,0.906-14.578,2.625-21.703c1.719-7.172,4.578-14.344,8.594-23.563 | |
c3.969-9.141,8.453-20.219,10.813-31.547c2.438-11.328,3-22.438,2.516-32.438c-0.516-10.047-1.859-19.016-3.922-27.719 | |
c-2.063-8.641-4.938-16.719-8.453-23.703c-7.078-14.156-15.922-22.844-22.469-27.266c-6.688-4.453-12-5.531-16.141-2.922 | |
s-5,8.328-3.469,16.063c1.531,7.766,4.922,16.797,7.125,27.297c2.281,10.375,3.781,24,3.563,39.063 | |
c-0.188,7.359-0.922,14.578-2.656,21.703c-1.719,7.172-4.594,14.344-8.594,23.578c-4,9.141-8.469,20.234-10.813,31.563 | |
c-2.438,11.344-2.984,22.438-2.5,32.422C325.688,260.793,327.031,269.762,329.094,278.465z" style="fill: rgb(223, 86, 86);"></path> | |
<path class="st0" d="M129.625,278.465c2.063,8.656,4.938,16.734,8.469,23.719c7.094,14.141,15.906,22.828,22.469,27.266 | |
c6.688,4.453,12,5.531,16.125,2.922c4.156-2.609,5.016-8.344,3.469-16.063c-1.516-7.766-4.906-16.797-7.125-27.313 | |
c-2.281-10.375-3.781-24-3.563-39.078c0.172-7.359,0.922-14.578,2.656-21.703c1.703-7.172,4.547-14.344,8.578-23.563 | |
c3.984-9.141,8.453-20.219,10.797-31.547c2.453-11.328,3.016-22.438,2.516-32.438c-0.516-10.047-1.859-19-3.891-27.719 | |
c-2.063-8.641-4.969-16.719-8.469-23.703c-7.094-14.141-15.938-22.844-22.469-27.281c-6.688-4.453-12-5.516-16.156-2.906 | |
c-4.125,2.609-5,8.328-3.438,16.063c1.516,7.766,4.891,16.781,7.094,27.297c2.281,10.375,3.781,24,3.563,39.063 | |
c-0.188,7.359-0.922,14.578-2.656,21.703c-1.719,7.172-4.563,14.344-8.594,23.578c-3.969,9.141-8.453,20.234-10.813,31.563 | |
c-2.422,11.328-2.984,22.438-2.484,32.422C126.25,260.793,127.578,269.762,129.625,278.465z" style="fill: rgb(223, 86, 86);"></path> | |
</g> | |
</svg> |
#mapid { height: 500px; } | |
#tooltip { | |
position: absolute; | |
text-align: center; | |
width: auto; | |
padding: 10px; | |
font: 12px sans-serif; | |
font-weight: bold; | |
background: rgba(0, 0, 0, 0.8); | |
color: #fff; | |
border: 0px; | |
border-radius: 4px; | |
pointer-events: none; | |
line-height: 1; | |
box-sizing: border-box; | |
display: inline; | |
} |