Javascript Proj4单张或自定义投影
我已经用这个神奇的插件建立了一个传单地图。在我的地图中,我使用了一个自定义参考系统(EPSG:28533)。将获取并渲染贴图分幅()。但我遇到了瓷砖被转换到错误位置的情况。偏移量约为+9°lat和+7°lng。我预计,我在参考系()的定义中设置了错误的Javascript Proj4单张或自定义投影,javascript,leaflet,gis,proj4js,Javascript,Leaflet,Gis,Proj4js,我已经用这个神奇的插件建立了一个传单地图。在我的地图中,我使用了一个自定义参考系统(EPSG:28533)。将获取并渲染贴图分幅()。但我遇到了瓷砖被转换到错误位置的情况。偏移量约为+9°lat和+7°lng。我预计,我在参考系()的定义中设置了错误的原点 据我所知,原点设置定义了参考系统投影边界的左上角。根据定义,该特定参考系的界限为: 265948.8191, 6421521.2254, 677786.3629, 7288831.7014 我是否使用了错误的方法来确定CRS原点?我已经解决
原点
据我所知,原点设置定义了参考系统投影边界的左上角。根据定义,该特定参考系的界限为:
265948.8191, 6421521.2254, 677786.3629, 7288831.7014
我是否使用了错误的方法来确定CRS原点
?我已经解决了这个问题!正如所料,origin
属性的demination方法出现了问题。我认为参考系的原点
应该等于参考系投影边界的左上角点。但我错了。正确的方法是使用层BBox的左上角。基于服务器的WMTSCapabilities,我能够使用proj4js计算预计的原点。这是我的更新代码():
您的地图分幅(例如)返回一个NOACCESS\u METHOD GetTile
错误,这意味着我们无法正确查看您的代码笔。如果我弄错了,请纠正我,但我想这是因为服务器无法为此扩展提供分幅。0/1/0超出了服务器的最大范围。我看到的唯一解决方案是设置层的边界。但由于偏移,这将导致瓷砖完全不可见。
265948.8191, 6421521.2254, 677786.3629, 7288831.7014
// Proj4js EPSG:25832 definition
var proj4rs25832def = '+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs';
// Calc origin
var orign = proj4(
proj4rs25832def,
// Upper left corner of the tile orign based on the WMTSCapabilities layer BBox
[ 0.105946948013, 56.8478734515 ]
);
// Set resolutions
var resolutions = [ 17471320.7509, 8735660.37545, 4367830.18772, 2183915.09386, 1091957.54693, 545978.773466, 272989.386733, 136494.693366, 68247.3466832, 34123.6733416, 17061.8366708, 8530.9183354, 4265.4591677, 2132.72958385 ];
// Define CRS
var rs25832 = new L.Proj.CRS(
'EPSG:25832',
proj4rs25832def,
{
origin: [ orign[0], orign[1] ],
resolutions: resolutions.map(function (value) {
return value * 0.00028;
})
}
);
// Create layer
var url = 'http://sg.geodatenzentrum.de/wmts_webatlasde/tile/1.0.0/webatlasde/default/DE_EPSG_25832_ADV/{z}/{y}/{x}.png';
var layer = L.tileLayer(
url,
{
continuousWorld: true,
bounds: [[ 45.2375, 0.1059 ],[ 56.8478, 20.4488 ]],
maxZoom: resolutions.length
}
);
// Setup map
var map = L.map('map', {
crs: rs25832,
center: [ 50.8805, 7.3389 ],
zoom: 0,
maxZoom: resolutions.length,
layers: [ layer ]
});
// Setup click hander
map.on('click', function(e) {
alert('lat: ' + e.latlng.lat + ' lng: ' + e.latlng.lng);
console.log(e.latlng);
});