You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
558 lines
28 KiB
HTML
558 lines
28 KiB
HTML
2 weeks ago
|
<!DOCTYPE html>
|
||
|
<html lang="en-US">
|
||
|
<head>
|
||
|
<meta charset="UTF-8">
|
||
|
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
|
||
|
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
|
||
|
<script>
|
||
|
var gaProperty = 'UA-2577926-1';
|
||
|
// Disable tracking if the opt-out cookie exists.
|
||
|
var disableStr = 'ga-disable-' + gaProperty;
|
||
|
if (document.cookie.indexOf(disableStr + '=true') > -1) {
|
||
|
window[disableStr] = true;
|
||
|
}
|
||
|
function gaOptout() {
|
||
|
document.cookie = disableStr + '=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/';
|
||
|
window[disableStr] = true;
|
||
|
}
|
||
|
function gaOptoutRevoke() {
|
||
|
document.cookie = disableStr + '=false; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/';
|
||
|
window[disableStr] = false;
|
||
|
}
|
||
|
</script>
|
||
|
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||
|
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-2577926-1"></script>
|
||
|
<script>
|
||
|
window.dataLayer = window.dataLayer || [];
|
||
|
function gtag(){dataLayer.push(arguments);}
|
||
|
gtag('js', new Date());
|
||
|
gtag('config', 'UA-2577926-1', { 'anonymize_ip': true });
|
||
|
</script>
|
||
|
<link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/cookieconsent.min.css" />
|
||
|
<script src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/cookieconsent.min.js"></script>
|
||
|
<script src="https://unpkg.com/lz-string@1.4.4/libs/lz-string.min.js"></script>
|
||
|
<script>
|
||
|
window.addEventListener("load", function() {
|
||
|
window.cookieconsent.initialise({
|
||
|
'palette': {
|
||
|
'popup': {
|
||
|
'background': '#eaf7f7',
|
||
|
'text': '#5c7291'
|
||
|
},
|
||
|
'button': {
|
||
|
'background': '#56cbdb',
|
||
|
'text': '#ffffff'
|
||
|
}
|
||
|
},
|
||
|
'theme': 'edgeless',
|
||
|
'type': 'opt-out',
|
||
|
'onInitialise': function (status) {
|
||
|
if (!this.hasConsented()) {
|
||
|
gaOptout()
|
||
|
}
|
||
|
},
|
||
|
'onStatusChange': function(status, chosenBefore) {
|
||
|
if (!this.hasConsented()) {
|
||
|
gaOptout()
|
||
|
}
|
||
|
},
|
||
|
'onRevokeChoice': function() {
|
||
|
gaOptoutRevoke()
|
||
|
}
|
||
|
})
|
||
|
});
|
||
|
</script>
|
||
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" type="text/css">
|
||
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" type="text/css">
|
||
|
<link rel="stylesheet" href="./resources/prism/prism-1.20.0.css" type="text/css">
|
||
|
<link rel="stylesheet" href="./css/ol.css" type="text/css">
|
||
|
<link rel="stylesheet" href="./resources/layout.css" type="text/css">
|
||
|
<script src="https://unpkg.com/elm-pep"></script>
|
||
|
<script src="https://cdn.polyfill.io/v3/polyfill.min.js?features=fetch,requestAnimationFrame,Element.prototype.classList,URL,TextDecoder"></script>
|
||
|
|
||
|
|
||
|
<title>Drag-and-Drop</title>
|
||
|
</head>
|
||
|
<body>
|
||
|
|
||
|
<header class="navbar navbar-expand-sm navbar-dark mb-3 py-0" role="navigation">
|
||
|
<a class="navbar-brand" href="https://openlayers.org/"><img src="./resources/logo-70x70.png" alt=""> OpenLayers</a>
|
||
|
|
||
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#olmenu" aria-controls="olmenu" aria-expanded="false" aria-label="Toggle navigation">
|
||
|
<span class="navbar-toggler-icon"></span>
|
||
|
</button>
|
||
|
|
||
|
<!-- menu items that get hidden below 768px width -->
|
||
|
<nav class="collapse navbar-collapse" id="olmenu">
|
||
|
<ul class="nav navbar-nav ml-auto">
|
||
|
<li class="nav-item dropdown">
|
||
|
<a class="nav-link dropdown-toggle" href="#" id="docdropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Docs</a>
|
||
|
<div class="dropdown-menu dropdown-menu-right mb-3" aria-labelledby="docdropdown">
|
||
|
<a class="dropdown-item" href="../doc/">Docs</a>
|
||
|
<div class="dropdown-divider"></div>
|
||
|
<a class="dropdown-item" href="../doc/quickstart.html"><i class="fa fa-check fa-fw mr-2 fa-lg"></i>Quick Start</a>
|
||
|
<a class="dropdown-item" href="../doc/faq.html"><i class="fa fa-question fa-fw mr-2 fa-lg"></i>FAQ</a>
|
||
|
<a class="dropdown-item" href="../doc/tutorials/"><i class="fa fa-book fa-fw mr-2 fa-lg"></i>Tutorials</a>
|
||
|
<a class="dropdown-item" href="/workshop/"><i class="fa fa-graduation-cap fa-fw mr-2 fa-lg"></i>Workshop</a>
|
||
|
<div class="dropdown-divider"></div>
|
||
|
<a class="dropdown-item" href="https://stackoverflow.com/questions/tagged/openlayers"><i class="fa fa-stack-overflow fa-fw mr-2"></i>Ask a Question</a>
|
||
|
</div>
|
||
|
</li>
|
||
|
<li class="nav-item active"><a class="nav-link" href="../examples/">Examples</a></li>
|
||
|
<li class="nav-item"><a class="nav-link" href="../apidoc/"><i class="fa fa-sitemap mr-1"></i>API</a></li>
|
||
|
<li class="nav-item dropdown">
|
||
|
<a class="nav-link dropdown-toggle" href="#" id="codedropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Code</a>
|
||
|
<div class="dropdown-menu dropdown-menu-right mb-3" aria-labelledby="codedropdown">
|
||
|
<a class="dropdown-item" href="https://github.com/openlayers/openlayers"><i class="fa fa-github fa-fw mr-2 fa-lg"></i>Repository</a>
|
||
|
<a class="dropdown-item" href="/download/"><i class="fa fa-download fa-fw mr-2 fa-lg"></i>Download</a>
|
||
|
</div>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</nav>
|
||
|
</header>
|
||
|
|
||
|
<div class="container-fluid line-numbers">
|
||
|
|
||
|
<div id="latest-check" class="alert alert-warning alert-dismissible" role="alert" style="display:none">
|
||
|
<button id="latest-dismiss" type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||
|
This example uses OpenLayers v<span>6.5.0</span>. The <a id="latest-link" href="#" class="alert-link">latest</a> is v<span id="latest-version"></span>.
|
||
|
</div>
|
||
|
|
||
|
|
||
|
<div class="row-fluid">
|
||
|
<a href="#" id="codepen-button" class="btn btn-link float-right">
|
||
|
<i class="fa fa-codepen fa-lg"></i> Edit
|
||
|
</a>
|
||
|
<div class="span12">
|
||
|
<h4 id="title">Drag-and-Drop</h4>
|
||
|
<p class="tags">
|
||
|
<span class="badge-group">
|
||
|
<a
|
||
|
href="./index.html?q=drag-and-drop" class="badge badge-info">drag-and-drop</a
|
||
|
><a
|
||
|
class="badge badge-info tag-modal-toggle text-white"
|
||
|
data-toggle="modal"
|
||
|
data-target="#tag-example-list"
|
||
|
data-title="drag-and-drop"
|
||
|
data-content="
|
||
|
<a class="list-group-item list-group-item-action" href="./drag-and-drop-custom-kmz.html">Custom Drag-and-Drop (KMZ)</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./drag-and-drop-custom-mvt.html">Custom Drag-and-Drop (MVT preview)</a>
|
||
|
<a class="list-group-item list-group-item-action active" href="./drag-and-drop.html">Drag-and-Drop</a>"
|
||
|
tabindex="0"
|
||
|
>3</a>
|
||
|
</span>
|
||
|
<span class="badge-group">
|
||
|
<a
|
||
|
href="./index.html?q=gpx" class="badge badge-info">gpx</a
|
||
|
><a
|
||
|
class="badge badge-info tag-modal-toggle text-white"
|
||
|
data-toggle="modal"
|
||
|
data-target="#tag-example-list"
|
||
|
data-title="gpx"
|
||
|
data-content="
|
||
|
<a class="list-group-item list-group-item-action active" href="./drag-and-drop.html">Drag-and-Drop</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./drag-and-drop-image-vector.html">Drag-and-Drop Image Vector</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./gpx.html">GPX Data</a>"
|
||
|
tabindex="0"
|
||
|
>3</a>
|
||
|
</span>
|
||
|
<span class="badge-group">
|
||
|
<a
|
||
|
href="./index.html?q=geojson" class="badge badge-info">geojson</a
|
||
|
><a
|
||
|
class="badge badge-info tag-modal-toggle text-white"
|
||
|
data-toggle="modal"
|
||
|
data-target="#tag-example-list"
|
||
|
data-title="geojson"
|
||
|
data-content="
|
||
|
<a class="list-group-item list-group-item-action active" href="./drag-and-drop.html">Drag-and-Drop</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./drag-and-drop-image-vector.html">Drag-and-Drop Image Vector</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./geojson.html">GeoJSON</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./geojson-vt.html">geojson-vt integration</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./style-renderer.html">Style renderer</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./vector-labels.html">Vector Labels</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./vector-layer.html">Vector Layer</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./hitdetect-vector.html">Vector Layer Hit Detection</a>"
|
||
|
tabindex="0"
|
||
|
>8</a>
|
||
|
</span>
|
||
|
<span class="badge-group">
|
||
|
<a
|
||
|
href="./index.html?q=igc" class="badge badge-info">igc</a
|
||
|
><a
|
||
|
class="badge badge-info tag-modal-toggle text-white"
|
||
|
data-toggle="modal"
|
||
|
data-target="#tag-example-list"
|
||
|
data-title="igc"
|
||
|
data-content="
|
||
|
<a class="list-group-item list-group-item-action active" href="./drag-and-drop.html">Drag-and-Drop</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./drag-and-drop-image-vector.html">Drag-and-Drop Image Vector</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./igc.html">IGC Data</a>"
|
||
|
tabindex="0"
|
||
|
>3</a>
|
||
|
</span>
|
||
|
<span class="badge-group">
|
||
|
<a
|
||
|
href="./index.html?q=kml" class="badge badge-info">kml</a
|
||
|
><a
|
||
|
class="badge badge-info tag-modal-toggle text-white"
|
||
|
data-toggle="modal"
|
||
|
data-target="#tag-example-list"
|
||
|
data-title="kml"
|
||
|
data-content="
|
||
|
<a class="list-group-item list-group-item-action" href="./drag-and-drop-custom-kmz.html">Custom Drag-and-Drop (KMZ)</a>
|
||
|
<a class="list-group-item list-group-item-action active" href="./drag-and-drop.html">Drag-and-Drop</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./drag-and-drop-image-vector.html">Drag-and-Drop Image Vector</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./earthquake-clusters.html">Earthquake Clusters</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./heatmap-earthquakes.html">Earthquakes Heatmap</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./kml-earthquakes.html">Earthquakes in KML</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./earthquake-custom-symbol.html">Earthquakes with custom symbols</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./kml.html">KML</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./kml-timezones.html">Timezones in KML</a>"
|
||
|
tabindex="0"
|
||
|
>9</a>
|
||
|
</span>
|
||
|
<span class="badge-group">
|
||
|
<a
|
||
|
href="./index.html?q=topojson" class="badge badge-info">topojson</a
|
||
|
><a
|
||
|
class="badge badge-info tag-modal-toggle text-white"
|
||
|
data-toggle="modal"
|
||
|
data-target="#tag-example-list"
|
||
|
data-title="topojson"
|
||
|
data-content="
|
||
|
<a class="list-group-item list-group-item-action active" href="./drag-and-drop.html">Drag-and-Drop</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./drag-and-drop-image-vector.html">Drag-and-Drop Image Vector</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./topojson.html">TopoJSON</a>"
|
||
|
tabindex="0"
|
||
|
>3</a>
|
||
|
</span>
|
||
|
<span class="badge-group">
|
||
|
<a
|
||
|
href="./index.html?q=maptiler" class="badge badge-info">maptiler</a
|
||
|
><a
|
||
|
class="badge badge-info tag-modal-toggle text-white"
|
||
|
data-toggle="modal"
|
||
|
data-target="#tag-example-list"
|
||
|
data-title="maptiler"
|
||
|
data-content="
|
||
|
<a class="list-group-item list-group-item-action" href="./zoom-constrained.html">Constrained Zoom</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./disable-image-smoothing.html">Disable Image Smoothing</a>
|
||
|
<a class="list-group-item list-group-item-action active" href="./drag-and-drop.html">Drag-and-Drop</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./drag-and-drop-image-vector.html">Drag-and-Drop Image Vector</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./full-screen.html">Full Screen Control</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./full-screen-drag-rotate-and-zoom.html">Full Screen Drag, Rotate, and Zoom</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./gpx.html">GPX Data</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./image-filter.html">Image Filters</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./kml.html">KML</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./layer-spy.html">Layer Spy</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./layer-swipe.html">Layer Swipe</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./magnify.html">Magnify</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./mapbox-layer.html">Mapbox-gl Layer</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./feature-move-animation.html">Marker Animation</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./vector-osm.html">OSM XML</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./raster.html">Raster Source</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./region-growing.html">Region Growing</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./side-by-side.html">Shared Views</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./street-labels.html">Street Labels</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./mapbox-style.html">Vector tiles created from a Mapbox Style object</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./vector-tiles-4326.html">Vector tiles in EPSG:4326</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./vector-wfs.html">WFS</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./vector-wfs-getfeature.html">WFS - GetFeature</a>
|
||
|
<a class="list-group-item list-group-item-action" href="./xyz-retina.html">XYZ Retina Tiles</a>"
|
||
|
tabindex="0"
|
||
|
>24</a>
|
||
|
</span>
|
||
|
</p>
|
||
|
<div class="modal modal-tag-example" id="tag-example-list" tabindex="-1" role="dialog" aria-labelledby="tag-example-title" aria-hidden="true">
|
||
|
<div class="modal-dialog modal-dialog-scrollable" role="document">
|
||
|
<div class="modal-content">
|
||
|
<div class="modal-header">
|
||
|
<h5 class="modal-title" id="tag-example-title"></h5>
|
||
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||
|
<span aria-hidden="true">×</span>
|
||
|
</button>
|
||
|
</div>
|
||
|
<div class="modal-body">
|
||
|
<div class="list-group"></div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div id="map" class="map"></div>
|
||
|
<div><label><input type="checkbox" id="extractstyles" checked /> Extract styles from KML</label></div>
|
||
|
<br />
|
||
|
<div>
|
||
|
<a id="download" download></a>
|
||
|
Download samples:
|
||
|
<button id="download-gpx">GPX</button>
|
||
|
|
||
|
<button id="download-geojson">GeoJSON</button>
|
||
|
|
||
|
<button id="download-igc">IGC</button>
|
||
|
|
||
|
<button id="download-kml">KML</button>
|
||
|
|
||
|
<button id="download-topojson">TopoJSON</button>
|
||
|
</div>
|
||
|
<br />
|
||
|
<div id="info"> </div>
|
||
|
|
||
|
</div>
|
||
|
<form method="POST" id="codepen-form" target="_blank" action="https://codesandbox.io/api/v1/sandboxes/define">
|
||
|
<input id="codesandbox-params" type="hidden" name="parameters">
|
||
|
</form>
|
||
|
</div>
|
||
|
|
||
|
<div class="row-fluid">
|
||
|
<div class="span12">
|
||
|
<p id="shortdesc">Example of using the drag-and-drop interaction.</p>
|
||
|
<div id="docs"><p>Example of using the drag-and-drop interaction. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map. There is no projection transform support, so this will only work with data in EPSG:4326 and EPSG:3857.</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<div class="row-fluid">
|
||
|
<h5 class="source-heading">main.js</h5>
|
||
|
<pre><code id="example-js-source" class="language-js">import 'ol/ol.css';
|
||
|
import DragAndDrop from 'ol/interaction/DragAndDrop';
|
||
|
import Map from 'ol/Map';
|
||
|
import View from 'ol/View';
|
||
|
import {GPX, GeoJSON, IGC, KML, TopoJSON} from 'ol/format';
|
||
|
import {Tile as TileLayer, Vector as VectorLayer} from 'ol/layer';
|
||
|
import {Vector as VectorSource, XYZ} from 'ol/source';
|
||
|
|
||
|
var key = 'Get your own API key at https://www.maptiler.com/cloud/';
|
||
|
var attributions =
|
||
|
'<a href="https://www.maptiler.com/copyright/" target="_blank">&copy; MapTiler</a> ' +
|
||
|
'<a href="https://www.openstreetmap.org/copyright" target="_blank">&copy; OpenStreetMap contributors</a>';
|
||
|
|
||
|
var map = new Map({
|
||
|
layers: [
|
||
|
new TileLayer({
|
||
|
source: new XYZ({
|
||
|
attributions: attributions,
|
||
|
url:
|
||
|
'https://api.maptiler.com/tiles/satellite/{z}/{x}/{y}.jpg?key=' + key,
|
||
|
maxZoom: 20,
|
||
|
}),
|
||
|
}) ],
|
||
|
target: 'map',
|
||
|
view: new View({
|
||
|
center: [0, 0],
|
||
|
zoom: 2,
|
||
|
}),
|
||
|
});
|
||
|
|
||
|
var extractStyles = document.getElementById('extractstyles');
|
||
|
var dragAndDropInteraction;
|
||
|
|
||
|
function setInteraction() {
|
||
|
if (dragAndDropInteraction) {
|
||
|
map.removeInteraction(dragAndDropInteraction);
|
||
|
}
|
||
|
dragAndDropInteraction = new DragAndDrop({
|
||
|
formatConstructors: [
|
||
|
GPX,
|
||
|
GeoJSON,
|
||
|
IGC,
|
||
|
// use constructed format to set options
|
||
|
new KML({extractStyles: extractStyles.checked}),
|
||
|
TopoJSON ],
|
||
|
});
|
||
|
dragAndDropInteraction.on('addfeatures', function (event) {
|
||
|
var vectorSource = new VectorSource({
|
||
|
features: event.features,
|
||
|
});
|
||
|
map.addLayer(
|
||
|
new VectorLayer({
|
||
|
source: vectorSource,
|
||
|
})
|
||
|
);
|
||
|
map.getView().fit(vectorSource.getExtent());
|
||
|
});
|
||
|
map.addInteraction(dragAndDropInteraction);
|
||
|
}
|
||
|
setInteraction();
|
||
|
|
||
|
extractStyles.addEventListener('change', setInteraction);
|
||
|
|
||
|
var displayFeatureInfo = function (pixel) {
|
||
|
var features = [];
|
||
|
map.forEachFeatureAtPixel(pixel, function (feature) {
|
||
|
features.push(feature);
|
||
|
});
|
||
|
if (features.length > 0) {
|
||
|
var info = [];
|
||
|
var i, ii;
|
||
|
for (i = 0, ii = features.length; i < ii; ++i) {
|
||
|
info.push(features[i].get('name'));
|
||
|
}
|
||
|
document.getElementById('info').innerHTML = info.join(', ') || '&nbsp';
|
||
|
} else {
|
||
|
document.getElementById('info').innerHTML = '&nbsp;';
|
||
|
}
|
||
|
};
|
||
|
|
||
|
map.on('pointermove', function (evt) {
|
||
|
if (evt.dragging) {
|
||
|
return;
|
||
|
}
|
||
|
var pixel = map.getEventPixel(evt.originalEvent);
|
||
|
displayFeatureInfo(pixel);
|
||
|
});
|
||
|
|
||
|
map.on('click', function (evt) {
|
||
|
displayFeatureInfo(evt.pixel);
|
||
|
});
|
||
|
|
||
|
// Sample data downloads
|
||
|
|
||
|
var link = document.getElementById('download');
|
||
|
|
||
|
function download(fullpath, filename) {
|
||
|
fetch(fullpath)
|
||
|
.then(function (response) {
|
||
|
return response.blob();
|
||
|
})
|
||
|
.then(function (blob) {
|
||
|
if (navigator.msSaveBlob) {
|
||
|
// link download attribuute does not work on MS browsers
|
||
|
navigator.msSaveBlob(blob, filename);
|
||
|
} else {
|
||
|
link.href = URL.createObjectURL(blob);
|
||
|
link.download = filename;
|
||
|
link.click();
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
document.getElementById('download-gpx').addEventListener('click', function () {
|
||
|
download('data/gpx/fells_loop.gpx', 'fells_loop.gpx');
|
||
|
});
|
||
|
|
||
|
document
|
||
|
.getElementById('download-geojson')
|
||
|
.addEventListener('click', function () {
|
||
|
download('data/geojson/roads-seoul.geojson', 'roads-seoul.geojson');
|
||
|
});
|
||
|
|
||
|
document.getElementById('download-igc').addEventListener('click', function () {
|
||
|
download('data/igc/Ulrich-Prinz.igc', 'Ulrich-Prinz.igc');
|
||
|
});
|
||
|
|
||
|
document.getElementById('download-kml').addEventListener('click', function () {
|
||
|
download('data/kml/states.kml', 'states.kml');
|
||
|
});
|
||
|
|
||
|
document
|
||
|
.getElementById('download-topojson')
|
||
|
.addEventListener('click', function () {
|
||
|
download('data/topojson/fr-departments.json', 'fr-departments.json');
|
||
|
});
|
||
|
</code></pre>
|
||
|
</div>
|
||
|
|
||
|
<div class="row-fluid">
|
||
|
<h5 class="source-heading">index.html</h5>
|
||
|
<pre><code id="example-html-source" class="language-markup"><!DOCTYPE html>
|
||
|
<html lang="en">
|
||
|
<head>
|
||
|
<meta charset="UTF-8">
|
||
|
<title>Drag-and-Drop</title>
|
||
|
<!-- Pointer events polyfill for old browsers, see https://caniuse.com/#feat=pointer -->
|
||
|
<script src="https://unpkg.com/elm-pep"></script>
|
||
|
<style>
|
||
|
.map {
|
||
|
width: 100%;
|
||
|
height:400px;
|
||
|
}
|
||
|
</style>
|
||
|
</head>
|
||
|
<body>
|
||
|
<div id="map" class="map"></div>
|
||
|
<div><label><input type="checkbox" id="extractstyles" checked /> Extract styles from KML</label></div>
|
||
|
<br />
|
||
|
<div>
|
||
|
<a id="download" download></a>
|
||
|
Download samples:&nbsp;&nbsp;
|
||
|
<button id="download-gpx">GPX</button>
|
||
|
&nbsp;
|
||
|
<button id="download-geojson">GeoJSON</button>
|
||
|
&nbsp;
|
||
|
<button id="download-igc">IGC</button>
|
||
|
&nbsp;
|
||
|
<button id="download-kml">KML</button>
|
||
|
&nbsp;
|
||
|
<button id="download-topojson">TopoJSON</button>
|
||
|
</div>
|
||
|
<br />
|
||
|
<div id="info">&nbsp;</div>
|
||
|
<script src="main.js"></script>
|
||
|
</body>
|
||
|
</html></code></pre>
|
||
|
</div>
|
||
|
|
||
|
|
||
|
<div class="row-fluid">
|
||
|
<h5 class="source-heading">package.json</h5>
|
||
|
<pre><code id="example-pkg-source" class="language-json">{
|
||
|
"name": "drag-and-drop",
|
||
|
"dependencies": {
|
||
|
"ol": "6.5.0"
|
||
|
},
|
||
|
"devDependencies": {
|
||
|
"parcel": "^2.0.0-beta.1"
|
||
|
},
|
||
|
"scripts": {
|
||
|
"start": "parcel index.html",
|
||
|
"build": "parcel build --public-url . index.html"
|
||
|
}
|
||
|
}</code></pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
|
||
|
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.bundle.min.js"></script>
|
||
|
<script src="./resources/prism/prism-1.20.0.min.js"></script>
|
||
|
<script src="./resources/common.js"></script>
|
||
|
<script src="common.js"></script>
|
||
|
<script src="drag-and-drop.js"></script>
|
||
|
<script>
|
||
|
$('#tag-example-list').on('show.bs.modal', function (event) {
|
||
|
const button = $(event.relatedTarget); // Button that triggered the modal
|
||
|
const title = button.data('title');
|
||
|
const content = button.data('content');
|
||
|
const modal = $(this)
|
||
|
modal.find('.modal-title').text(title);
|
||
|
modal.find('.modal-body').html(content);
|
||
|
});
|
||
|
|
||
|
var packageUrl = 'https://raw.githubusercontent.com/openlayers/openlayers.github.io/build/package.json';
|
||
|
fetch(packageUrl).then(function(response) {
|
||
|
return response.json();
|
||
|
}).then(function(json) {
|
||
|
var latestVersion = json.version;
|
||
|
document.getElementById('latest-version').innerHTML = latestVersion;
|
||
|
var url = window.location.href;
|
||
|
var branchSearch = url.match(/\/([^\/]*)\/examples\//);
|
||
|
var cookieText = 'dismissed=-' + latestVersion + '-';
|
||
|
var dismissed = document.cookie.indexOf(cookieText) != -1;
|
||
|
if (branchSearch && !dismissed && /^v[0-9\.]*$/.test(branchSearch[1]) && '6.5.0' != latestVersion) {
|
||
|
var link = url.replace(branchSearch[0], '/latest/examples/');
|
||
|
fetch(link, {method: 'head'}).then(function(response) {
|
||
|
var a = document.getElementById('latest-link');
|
||
|
a.href = response.status == 200 ? link : '../../latest/examples/';
|
||
|
});
|
||
|
var latestCheck = document.getElementById('latest-check');
|
||
|
latestCheck.style.display = '';
|
||
|
document.getElementById('latest-dismiss').onclick = function() {
|
||
|
latestCheck.style.display = 'none';
|
||
|
document.cookie = cookieText;
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
</script>
|
||
|
</body>
|
||
|
</html>
|