Skip to content

Instantly share code, notes, and snippets.

@Alex-Devoid
Last active January 23, 2020 07:25
Show Gist options
  • Select an option

  • Save Alex-Devoid/e54dc0ea955faeedff397802df9e4cb1 to your computer and use it in GitHub Desktop.

Select an option

Save Alex-Devoid/e54dc0ea955faeedff397802df9e4cb1 to your computer and use it in GitHub Desktop.
Proposed border structures in red
<!DOCTYPE html>
<html>
<head>
<title>Leaflet and D3 Map</title>
<meta charset="utf-8" />
<link
rel="stylesheet"
href="http://cdn.leafletjs.com/leaflet-0.7/leaflet.css"
/>
</head>
<style>
</style>
<body>
<div id="map" style="width:900; height: 600px">
</div>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="https://d3js.org/queue.v1.min.js"></script>
<script
src="http://cdn.leafletjs.com/leaflet-0.7/leaflet.js">
</script>
<script>
var mapLink2 = '<a href="http://www.esri.com/">Esri</a>';
var wholink =
'i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community';
var map = L.map('map').setView([ 31.334044, -110.150749], 10);
var cartoLight = L.tileLayer('http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', {
attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> &copy; <a href="http://cartodb.com/attributions">CartoDB</a>',
subdomains: 'abcd',
maxZoom: 19
});
// var sat = L.tileLayer('https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_Aerosol/default/2014-04-09/GoogleMapsCompatible_Level6/{z}/{x}/{y}.png', {
// attribution:'&copy; '+mapLink2+', '+wholink,
// maxZoom: 19
// });
// var sat = L.tileLayer.wms('http://isse.cr.usgs.gov/arcgis/services/Orthoimagery/USGS_EROS_Ortho_1Foot/ImageServer/WMSServer', {
// layers: '0',
// format: 'image/png',
// version: '1.3.0',
// attribution: '<a href="http://gisdata.usgs.gov/service_access_list.php?serviceid=Dataset_7&dataset=HRO">USGS</a>',
// maxZoom: 19
// });
var sat = L.tileLayer('https://api.mapbox.com/v4/mapbox.satellite/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoiYWRldm9pZDE2IiwiYSI6ImNqeWtpN2xpcDA5YzEza24xd3k4ajd3ZmoifQ.Kk8GtRCZU0nK4bZwu5AnBw', {
attribution: 'Map data &copy; <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
})
// 'http://{s}.tiles.mapbox.com/styles/mapbox/satellite-v9/{z}/{x}/{y}?access_token={pk.eyJ1IjoiYWRldm9pZDE2IiwiYSI6ImNqeWtpN2xpcDA5YzEza24xd3k4ajd3ZmoifQ.Kk8GtRCZU0nK4bZwu5AnBw}.png'
// http://{s}.tiles.mapbox.com/styles/mapbox/satellite-v9/{z}/{x}/{y}.png
// https://api.mapbox.com/styles/mapbox/satellite-v9/tiles/{z}/{x}/{y}?access_token={pk.eyJ1IjoiYWRldm9pZDE2IiwiYSI6ImNqeWtpN2xpcDA5YzEza24xd3k4ajd3ZmoifQ.Kk8GtRCZU0nK4bZwu5AnBw
// 'styles/mapbox/satellite-v9'
//
//
// "https://api.mapbox.com/v4/mapbox.mapbox-streets-v8/1/0/0.mvt?access_token=pk.eyJ1IjoiYWRldm9pZDE2IiwiYSI6ImNqeWtpN2xpcDA5YzEza24xd3k4ajd3ZmoifQ.Kk8GtRCZU0nK4bZwu5AnBw"
cartoLight.addTo(map);
// map.on("zoomend", function(e){
// console.log("Zoom level: ", map.getZoom());
// if(map.getZoom() > 6){ //Level 6 is the treshold
// map.removeLayer(cartoLight);
// sat.addTo(map);
// }else if(map.getZoom() < 7){
// map.removeLayer(sat);
// cartoLight.addTo(map);
// }
// });
map.on("zoomend", function(e){
console.log("Zoom level: ", map.getZoom());
if(map.getZoom() > 10){ //Level 6 is the treshold
map.removeLayer(cartoLight);
sat.addTo(map);
}else if(map.getZoom() <= 10){
map.removeLayer(sat);
cartoLight.addTo(map);
}
});
// Add an SVG element to Leaflet’s overlay pane
var svg = d3.select(map.getPanes().overlayPane).append("svg").style("position", "absolute"),
g = svg.append("g").attr("class", "leaflet-zoom-hide"),
gNew = svg.append("g").attr("class", "leaflet-zoom-hide");
queue()
.defer(d3.json, 'https://gist.githubusercontent.com/Alex-Devoid/80dfd51549d31d4ae9c5a81f919c0515/raw/0b74f2ed6fa114bc1378c4d79fc2b8c6dd6a4cb9/border-fence.geojson')
.defer(d3.json, 'proposed.geojson')
.await(makePlot);
function fenceBar(fence, geoShape){
// create a d3.geo.path to convert GeoJSON to SVG
var transform = d3.geo.transform({point: projectPoint}),
path = d3.geo.path().projection(transform);
var color = d3.scale.linear().domain([1,11])
.range([d3.rgb("#870008"), d3.rgb('#ff4b55')]);
var div = d3.select("#map").append("div")
.attr("class", "datamaps-hoverover")
// .style("position", "absolute")
.style('opacity', 0);
// create path elements for each of the features
var d3_features = g.selectAll(".fence")
.data(fence.features)
.enter().append("path")
.attr("class", 'fence');
var d3_featuresNew = gNew.selectAll(".new")
.data(geoShape.features)
.enter().append("path")
.attr("class", 'new')
.on('mouseover', function(d) {
console.log(d);
console.log(d.properties.project);
// var position = d3.mouse(this);
// console.log(this);
div
.html(d.properties.project)
.style('opacity', .75);
d3_featuresNew.on("mousemove", function() {
return div.style('top', ( (d3.event.pageY)-30) + "px")
.style('left', ( (d3.event.pageX)+5) + "px")
});
}).on('mouseout', function ( d ) {
d3.selectAll('.datamaps-hoverover').style('opacity', 0);
});
map.on("viewreset", reset);
reset();
// fit the SVG element to leaflet's map layer
function reset() {
bounds = path.bounds(fence);
var topLeft = bounds[0],
bottomRight = bounds[1];
svg .attr("width", bottomRight[0] - topLeft[0])
.attr("height", bottomRight[1] - topLeft[1])
.style("left", topLeft[0] + "px")
.style("top", topLeft[1] + "px");
g.attr("transform", "translate(" + -topLeft[0] + ","
+ -topLeft[1] + ")");
gNew.attr("transform", "translate(" + -topLeft[0] + ","
+ -topLeft[1] + ")");
// initialize the path data
d3_features.attr("d", path)
.style("stroke-opacity", 0.9)
.attr("fill", "none")
.attr("stroke", function(d,i){
if (d.properties.gen_type === 'pedestrian') {
return '#000ffd';
//#fdee00
}else if(d.properties.gen_type === 'vehicle') {
return '#000ffd';
}else if(d.properties.gen_type === null) {
// if (d.properties.barrier === 'fence') {
return '#000ffd';
// }else {
console.log(d.properties.barrier);
// }
}else {
console.log("gen_type :" + d.features[i].properties.gen_type);
}
})
.style("stroke-linejoin", "round")
.attr("stroke-width","5px");
d3_featuresNew.attr("d", path)
.style("stroke-opacity", 1)
.attr("fill", "none")
.attr("stroke", "#fd000f")
.attr("stroke-width","5px")
.style("stroke-linejoin", "round");
}
// Use Leaflet to implement a D3 geometric transformation.
function projectPoint(x, y) {
var point = map.latLngToLayerPoint(new L.LatLng(y, x));
this.stream.point(point.x, point.y);
}
}
function makePlot(error, existing, build){
console.log(existing);
// console.log(veh);
// console.log(geoShape);
fenceBar(existing,build)
// vehicleBar(veh)
}
</script>
</body>
</html>
Display the source blob
Display the rendered blob
Raw
{
"type": "FeatureCollection",
"features": [ {
"type": "Feature",
"geometry": {
"type": "MultiLineString",
"coordinates": [
[[-113.331716,32.038278],[-112.850162,31.890032]],
[[-112.76757,31.8648],[ -112.634298,31.823911]]
]
},
"properties": {
"project": "Tucson Project 1"
}
} ,{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[-112.850162,31.88999921],[-112.76757,31.8648]
]
},
"properties": {
"project": "Tucson Project 2"
}
}
,{
"type": "Feature",
"geometry": {
"type": "MultiLineString",
"coordinates": [
[[-110.253863,31.333754 ], [-110.250286, 31.333767]],
[[-110.152548, 31.334154], [-110.147464, 31.334137]],
[[-109.453305, 31.333995], [-109.129344, 31.332759]]
]
},
"properties": {
"project": "Tucson Project 3"
}
},
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[-110.79579,31.333578],[-110.775333,31.333511],
[-110.70545,31.33328],[-110.288665,31.333602]
]
},
"properties": {
"project": "Tucson Project 4"
}
},{
"type": "Feature",
"geometry": {
"type": "MultiLineString",
"coordinates": [
[[-111.473171,31.460175],[-111.471584,31.459673]],
[[-111.450959,31.453091],[-111.440132,31.449633]],
[[-111.412054,31.440683],[-111.40168,31.437351]],
[[-111.358336,31.423471],[-111.355444,31.422541]],
[[-111.354379,31.4221],[ -111.351608,31.421321]],
[[-111.243966,31.386813],[-111.239759,31.385462]]
]
},
"properties": {
"project": "Tucson Project 5"
}
},
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[-114.726013,32.704197],[-114.764632,32.642102]
]
},
"properties": {
"project": "Yuma Project 1"
}
},
{
"type": "Feature",
"geometry": {
"type": "MultiLineString",
"coordinates": [
[[-114.4268201,32.37755528],[-114.3623999,32.3579244]],
[[-114.8011175,32.51419938],[-114.8116619,32.49350559]]
]
},
"properties": {
"project": "Yuma Project 2"
}
},
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[-113.955211,32.232935],[-113.33411,32.039033]
]
},
"properties": {
"project": "Yuma Project 3"
}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment