From 8a703640d0a4d62c18988a009fcca5e35966a95d Mon Sep 17 00:00:00 2001 From: tsauerwein Date: Sat, 19 Sep 2015 13:57:54 +0900 Subject: [PATCH] Add example with turf.js --- examples/turf.html | 19 ++++++++++++++++ examples/turf.js | 57 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 examples/turf.html create mode 100644 examples/turf.js diff --git a/examples/turf.html b/examples/turf.html new file mode 100644 index 0000000000..9079368482 --- /dev/null +++ b/examples/turf.html @@ -0,0 +1,19 @@ +--- +template: example.html +title: turf.js Example +shortdesc: Example on how to use turf.js with OpenLayers 3. +docs: > + Example showing the integration of turf.js + with OpenLayers 3. The turf.js function along is used to + display a marker every 200 meters along a street. +tags: "vector, turfjs, along, distance" +resources: + - https://api.tiles.mapbox.com/mapbox.js/plugins/turf/v2.0.0/turf.min.js + + +--- +
+
+
+
+
diff --git a/examples/turf.js b/examples/turf.js new file mode 100644 index 0000000000..78934e843c --- /dev/null +++ b/examples/turf.js @@ -0,0 +1,57 @@ +// NOCOMPILE +// this example uses turf.js for which we don't have an externs file. +goog.require('ol.Feature'); +goog.require('ol.Map'); +goog.require('ol.View'); +goog.require('ol.format.GeoJSON'); +goog.require('ol.layer.Tile'); +goog.require('ol.layer.Vector'); +goog.require('ol.proj'); +goog.require('ol.source.MapQuest'); +goog.require('ol.source.Vector'); + + +var source = new ol.source.Vector(); +$.ajax('data/geojson/roads-seoul.geojson').then(function(response) { + var format = new ol.format.GeoJSON(); + var features = format.readFeatures(response); + var street = features[0]; + + // convert to a turf.js feature + var turfLine = format.writeFeatureObject(street); + + // show a marker every 200 meters + var distance = 0.2; + + // get the line length in kilometers + var length = turf.lineDistance(turfLine, 'kilometers'); + for (var i = 1; i <= length / distance; i++) { + var turfPoint = turf.along(turfLine, i * distance, 'kilometers'); + + // convert the generated point to a OpenLayers feature + var marker = format.readFeature(turfPoint); + marker.getGeometry().transform('EPSG:4326', 'EPSG:3857'); + source.addFeature(marker); + } + + street.getGeometry().transform('EPSG:4326', 'EPSG:3857'); + source.addFeature(street); +}); +var vectorLayer = new ol.layer.Vector({ + source: source +}); + +var rasterLayer = new ol.layer.Tile({ + source: new ol.source.MapQuest({ + layer: 'osm' + }) +}); + +var map = new ol.Map({ + layers: [rasterLayer, vectorLayer], + target: document.getElementById('map'), + view: new ol.View({ + center: ol.proj.fromLonLat([126.980366, 37.526540]), + zoom: 15 + }) +});