All public lights in Berlin.
Source: Geoportal Berlin / Öffentliche Beleuchtung
| license: mit | |
| height: 800 | |
| border: no |
| .DS_Store | |
| node_modules | |
| lights.xml |
| <!DOCTYPE html> | |
| <meta charset="utf-8"> | |
| <style> | |
| </style> | |
| <body> | |
| <canvas width="960" height="800"></canvas> | |
| <script src="//d3js.org/d3.v4.min.js" charset="utf-8"></script> | |
| <script src="//d3js.org/topojson.v2.min.js"></script> | |
| <script> | |
| var canvas = d3.select('canvas'), | |
| context = canvas.node().getContext('2d'), | |
| width = canvas.node().width, | |
| height = canvas.node().height; | |
| canvas | |
| .attr('width', width * window.devicePixelRatio) | |
| .attr('height', height * window.devicePixelRatio) | |
| .style('width', width + 'px') | |
| .style('height', height + 'px'); | |
| context.scale(window.devicePixelRatio, window.devicePixelRatio); | |
| var radius = 0.3; | |
| var tau = 2 * Math.PI; | |
| context.beginPath(); | |
| context.fillStyle = 'rgb(0, 0, 0)'; | |
| context.fillRect(0, 0, width, height); | |
| d3.json('lights.json', function(error, lights) { | |
| if (error) return console.error(error); | |
| context.fillStyle = 'rgba(255, 255, 0, 0.4)'; | |
| topojson.feature(lights, lights.objects.lights).features[0].geometry.coordinates.forEach(function(val, i) { | |
| context.beginPath(); | |
| context.arc(val[0], val[1], radius, 0, tau); | |
| context.fill(); | |
| }); | |
| }); | |
| </script> |
| lights.json: lights_proj.json | |
| ./node_modules/.bin/ndjson-split \ | |
| < $< \ | |
| 'd.features' \ | |
| | ./node_modules/.bin/ndjson-filter \ | |
| 'd.properties.STATUS === "In Betrieb"' \ | |
| | ./node_modules/.bin/ndjson-map \ | |
| 'd.geometry.coordinates' \ | |
| | ./node_modules/.bin/ndjson-reduce \ | |
| 'p.coordinates.push(d), p' \ | |
| '{type: "MultiPoint", coordinates: []}' \ | |
| | ./node_modules/.bin/ndjson-map \ | |
| '{type: "FeatureCollection", features: [{type: "Feature", geometry: d}]}' \ | |
| | ./node_modules/.bin/geo2topo \ | |
| lights=- \ | |
| | ./node_modules/.bin/toposimplify \ | |
| -p 1 -f \ | |
| | ./node_modules/.bin/topo2geo \ | |
| lights=- \ | |
| | ./node_modules/.bin/geo2topo \ | |
| lights=- \ | |
| | ./node_modules/.bin/topoquantize \ | |
| 1e4 \ | |
| > $@ | |
| lights_proj.json: lights.xml | |
| ogr2ogr -f GeoJSON /vsistdout/ $< \ | |
| -s_srs http://spatialreference.org/ref/epsg/25833/ \ | |
| -t_srs http://spatialreference.org/ref/epsg/4326/ \ | |
| | ./node_modules/.bin/ndjson-cat \ | |
| | ./node_modules/.bin/geoproject \ | |
| 'd3.geoConicEqualArea().parallels([50, 55]).rotate([0, 0]).fitSize([960, 800], d)' \ | |
| > $@ | |
| lights.xml: | |
| curl -o $@ 'http://fbinter.stadt-berlin.de/fb/wfs/geometry/senstadt/re_beleuchtung/?service=wfs&request=GetFeature&version=2.0.0&typeNames=fis:re_beleuchtung&outputFormat=gml2' | |
| .PHONY : clean | |
| clean : | |
| -rm lights.xml \ | |
| lights.json |
(Sorry about that, but we can’t show files that are this big right now.)