底部是 Javascript 代码,它设法在荷兰坐标系 (Rijksdriehoekstelsel) 中添加地图。我试图在 R 的 Leaflet 中重新制作它,但由于某种原因,我只得到一个灰屏......
这些选项中的大多数都适用于我拥有的这个不同的 Tilelayer,但是那个在某些分辨率 lvl 上很古怪,所以我真的需要让这个工作。
resolutions <- c(3440.640, 1720.320, 860.160, 430.080, 215.040, 107.520, 53.760, 26.880, 13.440, 6.720, 3.360, 1.680, 0.840, 0.420)
epsg28992 <- leafletCRS(crsClass = 'L.CRS.Simple', code = 'EPSG:28992',
proj4def = '+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +towgs84=565.4171,50.3319,465.5524,1.9342,-1.6677,9.1019,4.0725 +units=m +no_defs ',
resolutions = resolutions,
projectedBounds = c(-285401.92, 22598.08, 595401.9199999999, 903401.9199999999))
leaflet(options = leafletOptions( infinite=FALSE,
crs = epsg28992,
maxZoom =14)) %>%
setView(5.389,52, zoom = 5) %>%
addTiles('http://geodata.nationaalgeoregister.nl/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=opentopoachtergrondkaart&TILEMATRIXSET=EPSG:28992&TILEMATRIX=EPSG:28992:{z}&TILEROW={y}&TILECOL={x}&FORMAT=image/png',
tileOptions(minZoom=0,maxZoom=14))
proj4def、分辨率、平铺、平铺选项、投影边界、crsClass 和代码都是相同的......唯一不同的是 Project Unproject 部分,但我不知道 R 中的等价物是什么,我也不知道认为这很重要。
<pre>var kaart = L.map("kaart", {
crs: L.CRS.RD,
});</pre>
<div id="rd_kaart" style="width: 100%; height: 450px"></div>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.0.1/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet@1.0.1/dist/leaflet.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.3.15/proj4.js"></script>
<script type="text/javascript">
var def = '+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +towgs84=565.4171,50.3319,465.5524,1.9342,-1.6677,9.1019,4.0725 +units=m +no_defs ';
var proj4RD = proj4('WGS84', def);
var maxZoom = 16; // Alleen de schalen t/m 14 zijn officieel vastgesteld
var scale = 3440.640;
var scales = []
for (var i = 0; i <= maxZoom; i++) {
scales.push(1 / scale);
scale /= 2;
};
L.Projection.RD = {
project: function(latlng) {
var point = proj4RD.forward([latlng.lng, latlng.lat]);
return new L.Point(point[0], point[1]);
},
unproject: function(point) {
var latlng = proj4RD.inverse([point.x, point.y]);
return L.latLng(latlng[1], latlng[0]);
},
bounds: L.bounds([482.06, 308914.15], [275902.39, 636381.86]), // Begrenzing in RD(?)
proj4def: def
};
L.CRS.RD = L.extend({}, L.CRS.Simple, {
code: 'EPSG:28992',
infinite: false,
projection: L.Projection.RD,
transformation: new L.Transformation(1, 285401.920, -1, 903401.920),
scale: function(zoom) {
return scales[zoom];
},
zoom: function(scale) {
return scales.indexOf(scale);
},
});
</script>
<script type="text/javascript">
var kaart = L.map("rd_kaart", {
center: [52.156, 5.389],
zoom: 5,
crs: L.CRS.RD
});
var openbasiskaart = L.tileLayer('http://geodata.nationaalgeoregister.nl/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=opentopoachtergrondkaart&TILEMATRIXSET=EPSG:28992&TILEMATRIX=EPSG:28992:{z}&TILEROW={y}&TILECOL={x}&FORMAT=image/png', {
maxZoom: 14,
minZoom: 0,
attribution: 'Kaartgegevens: Instituut Fysieke Veiligheid, bijdragers OpenStreetMap en NLExtract'
}).addTo(kaart);
</script>