| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <title>Testing d3.js in Leaflet.js</title> | |
| <link rel="stylesheet" href="leaflet.css"></link> | |
| <script src="http://mbostock.github.com/d3/d3.v2.js?2.8.1"></script> | |
| <script src="http://code.leafletjs.com/leaflet-0.3.1/leaflet.js"></script> | |
| <style type="text/css"> | |
| path | |
| { | |
| fill: #E02A2A; | |
| stroke: #fff; | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <div id="map" style="width: 600px; height: 600px;position:relative"></div> | |
| <script type="text/javascript"> | |
| var cloudmadeUrl = 'http://{s}.tile.cloudmade.com/BC9A493B41014CAABB98F0471D759707/997/256/{z}/{x}/{y}.png', | |
| cloudmadeAttribution = 'Map data © 2011 OpenStreetMap contributors, Imagery © 2011 CloudMade', | |
| cloudmade = new L.TileLayer(cloudmadeUrl, {maxZoom: 18, attribution: cloudmadeAttribution}); | |
| var map = new L.Map('map', { | |
| center: new L.LatLng( 47.0176,2.3427,6), | |
| zoom: 5, | |
| layers: [cloudmade] | |
| }); | |
| var svg = d3.select(map.getPanes().overlayPane).append("svg"), | |
| g = svg.append("g"); | |
| d3.json("taxa_json.json", function(collection) { | |
| var bounds = d3.geo.bounds(collection), | |
| path = d3.geo.path().projection(project).pointRadius(function (d) {return d.properties.count/50}); | |
| console.warn(path) | |
| var feature = g.selectAll("path") | |
| .data(collection.features) | |
| .enter().append("path"); | |
| map.on("viewreset", reset); | |
| reset(); | |
| // Reposition the SVG to cover the features. | |
| function reset() { | |
| console.warn(bounds) | |
| var bottomLeft = project(bounds[0]), | |
| topRight = project(bounds[1]); | |
| svg .attr("width", topRight[0] - bottomLeft[0]) | |
| .attr("height", bottomLeft[1] - topRight[1]) | |
| .style("margin-left", bottomLeft[0] + "px") | |
| .style("margin-top", topRight[1] + "px").attr("transform", "translate(" + -bottomLeft[0] + "," + -topRight[1] + ")"); | |
| g .attr("transform", "translate(" + -bottomLeft[0] + "," + -topRight[1] + ")"); | |
| feature.attr("d", path) | |
| } | |
| // Use Leaflet to implement a D3 geographic projection. | |
| function project(x) { | |
| var point = map.latLngToLayerPoint(new L.LatLng(x[1], x[0])); | |
| return [point.x, point.y]; | |
| } | |
| }) | |
| </script> | |
| </body> | |
| </html> |
| /* required styles */ | |
| .leaflet-map-pane, | |
| .leaflet-tile, | |
| .leaflet-marker-icon, | |
| .leaflet-marker-shadow, | |
| .leaflet-tile-pane, | |
| .leaflet-overlay-pane, | |
| .leaflet-shadow-pane, | |
| .leaflet-marker-pane, | |
| .leaflet-popup-pane, | |
| .leaflet-overlay-pane svg, | |
| .leaflet-zoom-box, | |
| .leaflet-image-layer { /* TODO optimize classes */ | |
| position: absolute; | |
| } | |
| .leaflet-container { | |
| overflow: hidden; | |
| } | |
| .leaflet-tile-pane { | |
| -webkit-transform: translate3d(0,0,0); | |
| } | |
| .leaflet-tile, | |
| .leaflet-marker-icon, | |
| .leaflet-marker-shadow { | |
| -moz-user-select: none; | |
| -webkit-user-select: none; | |
| user-select: none; | |
| } | |
| .leaflet-marker-icon, | |
| .leaflet-marker-shadow { | |
| display: block; | |
| } | |
| .leaflet-clickable { | |
| cursor: pointer; | |
| // stroke: red; | |
| } | |
| .leaflet-container img { | |
| max-width: auto; | |
| } | |
| .leaflet-tile-pane { z-index: 2; } | |
| .leaflet-overlay-pane { z-index: 3; } | |
| .leaflet-shadow-pane { z-index: 4; } | |
| .leaflet-marker-pane { z-index: 5; } | |
| .leaflet-popup-pane { z-index: 6; } | |
| .leaflet-zoom-box { | |
| width: 0; | |
| height: 0; | |
| } | |
| .leaflet-tile { | |
| visibility: hidden; | |
| } | |
| .leaflet-tile-loaded { | |
| visibility: inherit; | |
| } | |
| a.leaflet-active { | |
| outline: 2px solid orange; | |
| } | |
| /* Leaflet controls */ | |
| .leaflet-control { | |
| position: relative; | |
| z-index: 7; | |
| } | |
| .leaflet-top, | |
| .leaflet-bottom { | |
| position: absolute; | |
| } | |
| .leaflet-top { | |
| top: 0; | |
| } | |
| .leaflet-right { | |
| right: 0; | |
| } | |
| .leaflet-bottom { | |
| bottom: 0; | |
| } | |
| .leaflet-left { | |
| left: 0; | |
| } | |
| .leaflet-control { | |
| float: left; | |
| clear: both; | |
| } | |
| .leaflet-right .leaflet-control { | |
| float: right; | |
| } | |
| .leaflet-top .leaflet-control { | |
| margin-top: 10px; | |
| } | |
| .leaflet-bottom .leaflet-control { | |
| margin-bottom: 10px; | |
| } | |
| .leaflet-left .leaflet-control { | |
| margin-left: 10px; | |
| } | |
| .leaflet-right .leaflet-control { | |
| margin-right: 10px; | |
| } | |
| .leaflet-control-zoom { | |
| padding: 5px; | |
| background: rgba(0, 0, 0, 0.25); | |
| -moz-border-radius: 7px; | |
| -webkit-border-radius: 7px; | |
| border-radius: 7px; | |
| } | |
| .leaflet-control-zoom a { | |
| display: block; | |
| width: 19px; | |
| height: 19px; | |
| background-position: 50% 50%; | |
| background-repeat: no-repeat; | |
| background-color: rgba(255, 255, 255, 0.75); | |
| -moz-border-radius: 4px; | |
| -webkit-border-radius: 4px; | |
| border-radius: 4px; | |
| } | |
| .leaflet-control-zoom a:hover { | |
| background-color: #fff; | |
| } | |
| .leaflet-big-buttons .leaflet-control-zoom a { | |
| width: 27px; | |
| height: 27px; | |
| } | |
| .leaflet-control-zoom-in { | |
| background-image: url(images/zoom-in.png); | |
| margin-bottom: 5px; | |
| } | |
| .leaflet-control-zoom-out { | |
| background-image: url(images/zoom-out.png); | |
| } | |
| .leaflet-container .leaflet-control-attribution { | |
| margin: 0; | |
| padding: 0 5px; | |
| font: 11px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif; | |
| color: #333; | |
| background-color: rgba(255, 255, 255, 0.7); | |
| -moz-box-shadow: 0 0 7px #ccc; | |
| -webkit-box-shadow: 0 0 7px #ccc; | |
| box-shadow: 0 0 7px #ccc; | |
| } | |
| /* Fade animations */ | |
| .leaflet-fade-anim .leaflet-tile { | |
| opacity: 0; | |
| -webkit-transition: opacity 0.2s linear; | |
| -moz-transition: opacity 0.2s linear; | |
| -o-transition: opacity 0.2s linear; | |
| transition: opacity 0.2s linear; | |
| } | |
| .leaflet-fade-anim .leaflet-tile-loaded { | |
| opacity: 1; | |
| } | |
| .leaflet-fade-anim .leaflet-popup { | |
| opacity: 0; | |
| -webkit-transition: opacity 0.2s linear; | |
| -moz-transition: opacity 0.2s linear; | |
| -o-transition: opacity 0.2s linear; | |
| transition: opacity 0.2s linear; | |
| } | |
| .leaflet-fade-anim .leaflet-map-pane .leaflet-popup { | |
| opacity: 1; | |
| } | |
| .leaflet-zoom-anim .leaflet-tile { | |
| -webkit-transition: none; | |
| -moz-transition: none; | |
| -o-transition: none; | |
| transition: none; | |
| } | |
| .leaflet-zoom-anim .leaflet-objects-pane { | |
| visibility: hidden; | |
| } | |
| /* Popup layout */ | |
| .leaflet-popup { | |
| position: absolute; | |
| text-align: center; | |
| -webkit-transform: translate3d(0,0,0); | |
| } | |
| .leaflet-popup-content-wrapper { | |
| padding: 1px; | |
| text-align: left; | |
| } | |
| .leaflet-popup-content { | |
| margin: 19px; | |
| } | |
| .leaflet-popup-tip-container { | |
| margin: 0 auto; | |
| width: 40px; | |
| height: 16px; | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .leaflet-popup-tip { | |
| width: 15px; | |
| height: 15px; | |
| padding: 1px; | |
| margin: -8px auto 0; | |
| -moz-transform: rotate(45deg); | |
| -webkit-transform: rotate(45deg); | |
| -ms-transform: rotate(45deg); | |
| -o-transform: rotate(45deg); | |
| transform: rotate(45deg); | |
| } | |
| .leaflet-popup-close-button { | |
| position: absolute; | |
| top: 9px; | |
| right: 9px; | |
| width: 10px; | |
| height: 10px; | |
| overflow: hidden; | |
| } | |
| .leaflet-popup-content p { | |
| margin: 18px 0; | |
| } | |
| /* Visual appearance */ | |
| .leaflet-container { | |
| background: #ddd; | |
| } | |
| .leaflet-container a { | |
| color: #0078A8; | |
| } | |
| .leaflet-zoom-box { | |
| border: 2px dotted #05f; | |
| background: white; | |
| opacity: 0.5; | |
| } | |
| .leaflet-popup-content-wrapper, .leaflet-popup-tip { | |
| background: white; | |
| box-shadow: 0 1px 10px #888; | |
| -moz-box-shadow: 0 1px 10px #888; | |
| -webkit-box-shadow: 0 1px 14px #999; | |
| } | |
| .leaflet-popup-content-wrapper { | |
| -moz-border-radius: 20px; | |
| -webkit-border-radius: 20px; | |
| border-radius: 20px; | |
| } | |
| .leaflet-popup-content { | |
| font: 12px/1.4 "Helvetica Neue", Arial, Helvetica, sans-serif; | |
| } | |
| .leaflet-popup-close-button { | |
| background: white url(images/popup-close.png); | |
| } |
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment