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.

711 lines
34 KiB
HTML

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

<!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>Raster Reprojection</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="">&nbsp;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">&times;</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">Raster Reprojection</h4>
<p class="tags">
<span class="badge-group">
<a
href="./index.html?q=reprojection" class="badge badge-info">reprojection</a
><a
class="badge badge-info tag-modal-toggle text-white"
data-toggle="modal"
data-target="#tag-example-list"
data-title="reprojection"
data-content="
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./disable-image-smoothing.html&quot;&gt;Disable Image Smoothing&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./reprojection-image.html&quot;&gt;Image Reprojection&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./reprojection-wgs84.html&quot;&gt;OpenStreetMap Reprojection&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./scaleline-indiana-east.html&quot;&gt;OpenStreetMap Reprojection with ScaleLine Control&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action active&quot; href=&quot;./reprojection.html&quot;&gt;Raster Reprojection&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./reprojection-by-code.html&quot;&gt;Reprojection with EPSG.io Search&lt;/a&gt;"
tabindex="0"
>6</a>
</span>
<span class="badge-group">
<a
href="./index.html?q=projection" class="badge badge-info">projection</a
><a
class="badge badge-info tag-modal-toggle text-white"
data-toggle="modal"
data-target="#tag-example-list"
data-title="projection"
data-content="
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wms-custom-proj.html&quot;&gt;Custom Tiled WMS&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./reprojection-image.html&quot;&gt;Image Reprojection&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./reprojection-wgs84.html&quot;&gt;OpenStreetMap Reprojection&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./scaleline-indiana-east.html&quot;&gt;OpenStreetMap Reprojection with ScaleLine Control&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action active&quot; href=&quot;./reprojection.html&quot;&gt;Raster Reprojection&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./reprojection-by-code.html&quot;&gt;Reprojection with EPSG.io Search&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wms-image-custom-proj.html&quot;&gt;Single Image WMS with Proj4js&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./sphere-mollweide.html&quot;&gt;Sphere Mollweide&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wms-no-proj.html&quot;&gt;WMS without Projection&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./zoomify.html&quot;&gt;Zoomify&lt;/a&gt;"
tabindex="0"
>10</a>
</span>
<span class="badge-group">
<a
href="./index.html?q=proj4js" class="badge badge-info">proj4js</a
><a
class="badge badge-info tag-modal-toggle text-white"
data-toggle="modal"
data-target="#tag-example-list"
data-title="proj4js"
data-content="
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./reprojection-image.html&quot;&gt;Image Reprojection&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action active&quot; href=&quot;./reprojection.html&quot;&gt;Raster Reprojection&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./reprojection-by-code.html&quot;&gt;Reprojection with EPSG.io Search&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wms-image-custom-proj.html&quot;&gt;Single Image WMS with Proj4js&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./sphere-mollweide.html&quot;&gt;Sphere Mollweide&lt;/a&gt;"
tabindex="0"
>5</a>
</span>
<span class="badge-group">
<a
href="./index.html?q=osm" class="badge badge-info">osm</a
><a
class="badge badge-info tag-modal-toggle text-white"
data-toggle="modal"
data-target="#tag-example-list"
data-title="osm"
data-content="
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./full-screen-source.html&quot;&gt;Full Screen Control with extended source element&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./osm-vector-tiles.html&quot;&gt;OSM Vector Tiles&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action active&quot; href=&quot;./reprojection.html&quot;&gt;Raster Reprojection&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./semi-transparent-layer.html&quot;&gt;Semi-Transparent Layer&lt;/a&gt;"
tabindex="0"
>4</a>
</span>
<span class="badge-group">
<a
href="./index.html?q=wms" class="badge badge-info">wms</a
><a
class="badge badge-info tag-modal-toggle text-white"
data-toggle="modal"
data-target="#tag-example-list"
data-title="wms"
data-content="
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wms-custom-proj.html&quot;&gt;Custom Tiled WMS&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action active&quot; href=&quot;./reprojection.html&quot;&gt;Raster Reprojection&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wms-image.html&quot;&gt;Single Image WMS&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wms-image-custom-proj.html&quot;&gt;Single Image WMS with Proj4js&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wms-tiled.html&quot;&gt;Tiled WMS&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wms-tiled-wrap-180.html&quot;&gt;Tiled WMS Wrapping&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wms-custom-tilegrid-512x256.html&quot;&gt;WMS 512x256 Tiles&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wms-capabilities.html&quot;&gt;WMS Capabilities Parsing&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wms-getlegendgraphic.html&quot;&gt;WMS GetLegendGraphic&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wms-time.html&quot;&gt;WMS Time&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wms-no-proj.html&quot;&gt;WMS without Projection&lt;/a&gt;"
tabindex="0"
>11</a>
</span>
<span class="badge-group">
<a
href="./index.html?q=wmts" class="badge badge-info">wmts</a
><a
class="badge badge-info tag-modal-toggle text-white"
data-toggle="modal"
data-target="#tag-example-list"
data-title="wmts"
data-content="
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wmts-hidpi.html&quot;&gt;High DPI WMTS&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wmts-ign.html&quot;&gt;IGN WMTS&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action active&quot; href=&quot;./reprojection.html&quot;&gt;Raster Reprojection&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wmts.html&quot;&gt;WMTS&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wmts-capabilities.html&quot;&gt;WMTS Capabilities Parsing&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wmts-layer-from-capabilities.html&quot;&gt;WMTS Layer from Capabilities&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wmts-dimensions.html&quot;&gt;WMTS Tile Transitions&lt;/a&gt;"
tabindex="0"
>7</a>
</span>
<span class="badge-group">
<a
href="./index.html?q=hidpi" class="badge badge-info">hidpi</a
><a
class="badge badge-info tag-modal-toggle text-white"
data-toggle="modal"
data-target="#tag-example-list"
data-title="hidpi"
data-content="
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./wmts-hidpi.html&quot;&gt;High DPI WMTS&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action active&quot; href=&quot;./reprojection.html&quot;&gt;Raster Reprojection&lt;/a&gt;
&lt;a class=&quot;list-group-item list-group-item-action&quot; href=&quot;./xyz-retina.html&quot;&gt;XYZ Retina Tiles&lt;/a&gt;"
tabindex="0"
>3</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">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="list-group"></div>
</div>
</div>
</div>
</div>
<div id="map" class="map"></div>
<form class="form-inline">
<div class="col-md-3">
<label for="base-layer">Base map:</label>
<select id="base-layer">
<option value="osm">OSM (EPSG:3857)</option>
<option value="wms4326">WMS (EPSG:4326)</option>
</select>
</div>
<div class="col-md-4">
<label for="overlay-layer">Overlay map:</label>
<select id="overlay-layer">
<option value="bng">British National Grid (EPSG:27700)</option>
<option value="wms21781">Swisstopo WMS (EPSG:21781)</option>
<option value="wmts3413">NASA Arctic WMTS (EPSG:3413)</option>
<option value="states">United States (EPSG:3857)</option>
</select>
</div>
<div class="col-md-5">
<label for="view-projection">View projection:</label>
<select id="view-projection">
<option value="EPSG:3857">Spherical Mercator (EPSG:3857)</option>
<option value="EPSG:4326">WGS 84 (EPSG:4326)</option>
<option value="ESRI:54009">Mollweide (ESRI:54009)</option>
<option value="EPSG:27700">British National Grid (EPSG:27700)</option>
<option value="EPSG:23032">ED50 / UTM zone 32N (EPSG:23032)</option>
<option value="EPSG:2163">US National Atlas Equal Area (EPSG:2163)</option>
<option value="EPSG:3413">NSIDC Polar Stereographic North (EPSG:3413)</option>
<option value="EPSG:5479">RSRGD2000 / MSLC2000 (EPSG:5479)</option>
</select>
</div>
<label>
Render reprojection edges
<input type="checkbox" id="render-edges">
</label>
</form>
</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">Demonstrates client-side raster reprojection between various projections.</p>
<div id="docs"><p>This example shows client-side raster reprojection between various projections.</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 Map from &#x27;ol/Map&#x27;;
import TileGrid from &#x27;ol/tilegrid/TileGrid&#x27;;
import TileLayer from &#x27;ol/layer/Tile&#x27;;
import View from &#x27;ol/View&#x27;;
import WMTS, {optionsFromCapabilities} from &#x27;ol/source/WMTS&#x27;;
import WMTSCapabilities from &#x27;ol/format/WMTSCapabilities&#x27;;
import proj4 from &#x27;proj4&#x27;;
import {OSM, TileImage, TileWMS} from &#x27;ol/source&#x27;;
import {getCenter, getWidth} from &#x27;ol/extent&#x27;;
import {get as getProjection, transformExtent} from &#x27;ol/proj&#x27;;
import {register} from &#x27;ol/proj/proj4&#x27;;
proj4.defs(
&#x27;EPSG:27700&#x27;,
&#x27;+proj&#x3D;tmerc +lat_0&#x3D;49 +lon_0&#x3D;-2 +k&#x3D;0.9996012717 &#x27; +
&#x27;+x_0&#x3D;400000 +y_0&#x3D;-100000 +ellps&#x3D;airy &#x27; +
&#x27;+towgs84&#x3D;446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 &#x27; +
&#x27;+units&#x3D;m +no_defs&#x27;
);
proj4.defs(
&#x27;EPSG:23032&#x27;,
&#x27;+proj&#x3D;utm +zone&#x3D;32 +ellps&#x3D;intl &#x27; +
&#x27;+towgs84&#x3D;-87,-98,-121,0,0,0,0 +units&#x3D;m +no_defs&#x27;
);
proj4.defs(
&#x27;EPSG:5479&#x27;,
&#x27;+proj&#x3D;lcc +lat_1&#x3D;-76.66666666666667 +lat_2&#x3D;&#x27; +
&#x27;-79.33333333333333 +lat_0&#x3D;-78 +lon_0&#x3D;163 +x_0&#x3D;7000000 +y_0&#x3D;5000000 &#x27; +
&#x27;+ellps&#x3D;GRS80 +towgs84&#x3D;0,0,0,0,0,0,0 +units&#x3D;m +no_defs&#x27;
);
proj4.defs(
&#x27;EPSG:21781&#x27;,
&#x27;+proj&#x3D;somerc +lat_0&#x3D;46.95240555555556 &#x27; +
&#x27;+lon_0&#x3D;7.439583333333333 +k_0&#x3D;1 +x_0&#x3D;600000 +y_0&#x3D;200000 +ellps&#x3D;bessel &#x27; +
&#x27;+towgs84&#x3D;674.4,15.1,405.3,0,0,0,0 +units&#x3D;m +no_defs&#x27;
);
proj4.defs(
&#x27;EPSG:3413&#x27;,
&#x27;+proj&#x3D;stere +lat_0&#x3D;90 +lat_ts&#x3D;70 +lon_0&#x3D;-45 +k&#x3D;1 &#x27; +
&#x27;+x_0&#x3D;0 +y_0&#x3D;0 +datum&#x3D;WGS84 +units&#x3D;m +no_defs&#x27;
);
proj4.defs(
&#x27;EPSG:2163&#x27;,
&#x27;+proj&#x3D;laea +lat_0&#x3D;45 +lon_0&#x3D;-100 +x_0&#x3D;0 +y_0&#x3D;0 &#x27; +
&#x27;+a&#x3D;6370997 +b&#x3D;6370997 +units&#x3D;m +no_defs&#x27;
);
proj4.defs(
&#x27;ESRI:54009&#x27;,
&#x27;+proj&#x3D;moll +lon_0&#x3D;0 +x_0&#x3D;0 +y_0&#x3D;0 +datum&#x3D;WGS84 &#x27; + &#x27;+units&#x3D;m +no_defs&#x27;
);
register(proj4);
var proj27700 &#x3D; getProjection(&#x27;EPSG:27700&#x27;);
proj27700.setExtent([-650000, -150000, 1350000, 1450000]);
var proj23032 &#x3D; getProjection(&#x27;EPSG:23032&#x27;);
proj23032.setExtent([-1206118.71, 4021309.92, 1295389.0, 8051813.28]);
var proj5479 &#x3D; getProjection(&#x27;EPSG:5479&#x27;);
proj5479.setExtent([6825737.53, 4189159.8, 9633741.96, 5782472.71]);
var proj21781 &#x3D; getProjection(&#x27;EPSG:21781&#x27;);
proj21781.setExtent([485071.54, 75346.36, 828515.78, 299941.84]);
var proj3413 &#x3D; getProjection(&#x27;EPSG:3413&#x27;);
proj3413.setExtent([-4194304, -4194304, 4194304, 4194304]);
var proj2163 &#x3D; getProjection(&#x27;EPSG:2163&#x27;);
proj2163.setExtent([-8040784.5135, -2577524.921, 3668901.4484, 4785105.1096]);
var proj54009 &#x3D; getProjection(&#x27;ESRI:54009&#x27;);
proj54009.setExtent([-18e6, -9e6, 18e6, 9e6]);
var layers &#x3D; {};
layers[&#x27;osm&#x27;] &#x3D; new TileLayer({
source: new OSM(),
});
layers[&#x27;wms4326&#x27;] &#x3D; new TileLayer({
source: new TileWMS({
url: &#x27;https://ahocevar.com/geoserver/wms&#x27;,
crossOrigin: &#x27;&#x27;,
params: {
&#x27;LAYERS&#x27;: &#x27;ne:NE1_HR_LC_SR_W_DR&#x27;,
&#x27;TILED&#x27;: true,
},
projection: &#x27;EPSG:4326&#x27;,
}),
});
layers[&#x27;wms21781&#x27;] &#x3D; new TileLayer({
source: new TileWMS({
attributions:
&#x27;© &lt;a href&#x3D;&quot;https://shop.swisstopo.admin.ch/en/products/maps/national/lk1000&quot;&#x27; +
&#x27;target&#x3D;&quot;_blank&quot;&gt;Pixelmap 1:1000000 / geo.admin.ch&lt;/a&gt;&#x27;,
crossOrigin: &#x27;anonymous&#x27;,
params: {
&#x27;LAYERS&#x27;: &#x27;ch.swisstopo.pixelkarte-farbe-pk1000.noscale&#x27;,
&#x27;FORMAT&#x27;: &#x27;image/jpeg&#x27;,
},
url: &#x27;https://wms.geo.admin.ch/&#x27;,
projection: &#x27;EPSG:21781&#x27;,
}),
});
var parser &#x3D; new WMTSCapabilities();
layers[&#x27;wmts3413&#x27;] &#x3D; new TileLayer();
var urlA &#x3D;
&#x27;https://map1.vis.earthdata.nasa.gov/wmts-arctic/&#x27; +
&#x27;wmts.cgi?SERVICE&#x3D;WMTS&amp;request&#x3D;GetCapabilities&#x27;;
fetch(urlA)
.then(function (response) {
return response.text();
})
.then(function (text) {
var result &#x3D; parser.read(text);
var options &#x3D; optionsFromCapabilities(result, {
layer: &#x27;OSM_Land_Mask&#x27;,
matrixSet: &#x27;EPSG3413_250m&#x27;,
});
options.crossOrigin &#x3D; &#x27;&#x27;;
options.projection &#x3D; &#x27;EPSG:3413&#x27;;
options.wrapX &#x3D; false;
layers[&#x27;wmts3413&#x27;].setSource(new WMTS(options));
});
layers[&#x27;bng&#x27;] &#x3D; new TileLayer();
var urlB &#x3D;
&#x27;https://tiles.arcgis.com/tiles/qHLhLQrcvEnxjtPr/arcgis/rest/services/OS_Open_Raster/MapServer/WMTS&#x27;;
fetch(urlB)
.then(function (response) {
return response.text();
})
.then(function (text) {
var result &#x3D; parser.read(text);
var options &#x3D; optionsFromCapabilities(result, {
layer: &#x27;OS_Open_Raster&#x27;,
});
options.attributions &#x3D;
&#x27;Contains OS data © Crown Copyright and database right &#x27; +
new Date().getFullYear();
options.crossOrigin &#x3D; &#x27;&#x27;;
options.projection &#x3D; &#x27;EPSG:27700&#x27;;
options.wrapX &#x3D; false;
layers[&#x27;bng&#x27;].setSource(new WMTS(options));
});
var startResolution &#x3D; getWidth(getProjection(&#x27;EPSG:3857&#x27;).getExtent()) / 256;
var resolutions &#x3D; new Array(22);
for (var i &#x3D; 0, ii &#x3D; resolutions.length; i &lt; ii; ++i) {
resolutions[i] &#x3D; startResolution / Math.pow(2, i);
}
layers[&#x27;states&#x27;] &#x3D; new TileLayer({
source: new TileWMS({
url: &#x27;https://ahocevar.com/geoserver/wms&#x27;,
crossOrigin: &#x27;&#x27;,
params: {&#x27;LAYERS&#x27;: &#x27;topp:states&#x27;},
serverType: &#x27;geoserver&#x27;,
tileGrid: new TileGrid({
extent: [-13884991, 2870341, -7455066, 6338219],
resolutions: resolutions,
tileSize: [512, 256],
}),
projection: &#x27;EPSG:3857&#x27;,
}),
});
var map &#x3D; new Map({
layers: [layers[&#x27;osm&#x27;], layers[&#x27;bng&#x27;]],
target: &#x27;map&#x27;,
view: new View({
projection: &#x27;EPSG:3857&#x27;,
center: [0, 0],
zoom: 2,
}),
});
var baseLayerSelect &#x3D; document.getElementById(&#x27;base-layer&#x27;);
var overlayLayerSelect &#x3D; document.getElementById(&#x27;overlay-layer&#x27;);
var viewProjSelect &#x3D; document.getElementById(&#x27;view-projection&#x27;);
var renderEdgesCheckbox &#x3D; document.getElementById(&#x27;render-edges&#x27;);
var renderEdges &#x3D; false;
function updateViewProjection() {
var newProj &#x3D; getProjection(viewProjSelect.value);
var newProjExtent &#x3D; newProj.getExtent();
var newView &#x3D; new View({
projection: newProj,
center: getCenter(newProjExtent || [0, 0, 0, 0]),
zoom: 0,
extent: newProjExtent || undefined,
});
map.setView(newView);
// Example how to prevent double occurrence of map by limiting layer extent
if (newProj.isGlobal()) {
layers[&#x27;bng&#x27;].setExtent(
transformExtent(proj27700.getExtent(), proj27700, newProj, 2)
);
} else {
layers[&#x27;bng&#x27;].setExtent(undefined);
}
}
/**
* Handle change event.
*/
viewProjSelect.onchange &#x3D; function () {
updateViewProjection();
};
updateViewProjection();
var updateRenderEdgesOnLayer &#x3D; function (layer) {
if (layer instanceof TileLayer) {
var source &#x3D; layer.getSource();
if (source instanceof TileImage) {
source.setRenderReprojectionEdges(renderEdges);
}
}
};
/**
* Handle change event.
*/
baseLayerSelect.onchange &#x3D; function () {
var layer &#x3D; layers[baseLayerSelect.value];
if (layer) {
layer.setOpacity(1);
updateRenderEdgesOnLayer(layer);
map.getLayers().setAt(0, layer);
}
};
/**
* Handle change event.
*/
overlayLayerSelect.onchange &#x3D; function () {
var layer &#x3D; layers[overlayLayerSelect.value];
if (layer) {
layer.setOpacity(0.7);
updateRenderEdgesOnLayer(layer);
map.getLayers().setAt(1, layer);
}
};
/**
* Handle change event.
*/
renderEdgesCheckbox.onchange &#x3D; function () {
renderEdges &#x3D; renderEdgesCheckbox.checked;
map.getLayers().forEach(function (layer) {
updateRenderEdgesOnLayer(layer);
});
};
</code></pre>
</div>
<div class="row-fluid">
<h5 class="source-heading">index.html</h5>
<pre><code id="example-html-source" class="language-markup">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;title&gt;Raster Reprojection&lt;/title&gt;
&lt;!-- Pointer events polyfill for old browsers, see https://caniuse.com/#feat=pointer --&gt;
&lt;script src="https://unpkg.com/elm-pep"&gt;&lt;/script&gt;
&lt;style&gt;
.map {
width: 100%;
height:400px;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id&#x3D;&quot;map&quot; class&#x3D;&quot;map&quot;&gt;&lt;/div&gt;
&lt;form class&#x3D;&quot;form-inline&quot;&gt;
&lt;div class&#x3D;&quot;col-md-3&quot;&gt;
&lt;label for&#x3D;&quot;base-layer&quot;&gt;Base map:&lt;/label&gt;
&lt;select id&#x3D;&quot;base-layer&quot;&gt;
&lt;option value&#x3D;&quot;osm&quot;&gt;OSM (EPSG:3857)&lt;/option&gt;
&lt;option value&#x3D;&quot;wms4326&quot;&gt;WMS (EPSG:4326)&lt;/option&gt;
&lt;/select&gt;
&lt;/div&gt;
&lt;div class&#x3D;&quot;col-md-4&quot;&gt;
&lt;label for&#x3D;&quot;overlay-layer&quot;&gt;Overlay map:&lt;/label&gt;
&lt;select id&#x3D;&quot;overlay-layer&quot;&gt;
&lt;option value&#x3D;&quot;bng&quot;&gt;British National Grid (EPSG:27700)&lt;/option&gt;
&lt;option value&#x3D;&quot;wms21781&quot;&gt;Swisstopo WMS (EPSG:21781)&lt;/option&gt;
&lt;option value&#x3D;&quot;wmts3413&quot;&gt;NASA Arctic WMTS (EPSG:3413)&lt;/option&gt;
&lt;option value&#x3D;&quot;states&quot;&gt;United States (EPSG:3857)&lt;/option&gt;
&lt;/select&gt;
&lt;/div&gt;
&lt;div class&#x3D;&quot;col-md-5&quot;&gt;
&lt;label for&#x3D;&quot;view-projection&quot;&gt;View projection:&lt;/label&gt;
&lt;select id&#x3D;&quot;view-projection&quot;&gt;
&lt;option value&#x3D;&quot;EPSG:3857&quot;&gt;Spherical Mercator (EPSG:3857)&lt;/option&gt;
&lt;option value&#x3D;&quot;EPSG:4326&quot;&gt;WGS 84 (EPSG:4326)&lt;/option&gt;
&lt;option value&#x3D;&quot;ESRI:54009&quot;&gt;Mollweide (ESRI:54009)&lt;/option&gt;
&lt;option value&#x3D;&quot;EPSG:27700&quot;&gt;British National Grid (EPSG:27700)&lt;/option&gt;
&lt;option value&#x3D;&quot;EPSG:23032&quot;&gt;ED50 / UTM zone 32N (EPSG:23032)&lt;/option&gt;
&lt;option value&#x3D;&quot;EPSG:2163&quot;&gt;US National Atlas Equal Area (EPSG:2163)&lt;/option&gt;
&lt;option value&#x3D;&quot;EPSG:3413&quot;&gt;NSIDC Polar Stereographic North (EPSG:3413)&lt;/option&gt;
&lt;option value&#x3D;&quot;EPSG:5479&quot;&gt;RSRGD2000 / MSLC2000 (EPSG:5479)&lt;/option&gt;
&lt;/select&gt;
&lt;/div&gt;
&lt;label&gt;
Render reprojection edges
&lt;input type&#x3D;&quot;checkbox&quot; id&#x3D;&quot;render-edges&quot;&gt;
&lt;/label&gt;
&lt;/form&gt;
&lt;script src="main.js"&gt;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
</div>
<div class="row-fluid">
<h5 class="source-heading">package.json</h5>
<pre><code id="example-pkg-source" class="language-json">{
&quot;name&quot;: &quot;reprojection&quot;,
&quot;dependencies&quot;: {
&quot;ol&quot;: &quot;6.5.0&quot;,
&quot;proj4&quot;: &quot;2.6.3&quot;
},
&quot;devDependencies&quot;: {
&quot;parcel&quot;: &quot;^2.0.0-beta.1&quot;
},
&quot;scripts&quot;: {
&quot;start&quot;: &quot;parcel index.html&quot;,
&quot;build&quot;: &quot;parcel build --public-url . index.html&quot;
}
}</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="reprojection.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>