Javascript OpenLayers:Map不';t使用非';标准&x27;EPSG码

Javascript OpenLayers:Map不';t使用非';标准&x27;EPSG码,javascript,openlayers,projection,epsg,Javascript,Openlayers,Projection,Epsg,我在使用EPSG 3031中的地图时遇到问题 从我的研究中,我已经了解到投影的参数必须在javascript文件中定义,因此在我的脚本中epsg.io可以很好地工作 但当我在新创建的视图和变换的中心使用实际的EPSG:3031时,贴图不会渲染。 它工作的唯一方法是选择EPSG:4326或3857,中间[0,0]实际上没有任何意义 我的javascript如下所示: //寄存器EPSG 项目定义(“EPSG:3031”,“+proj=stere+lat_0=-90+lat_ts=-71+lon_

我在使用EPSG 3031中的地图时遇到问题

从我的研究中,我已经了解到投影的参数必须在javascript文件中定义,因此在我的脚本中epsg.io可以很好地工作

但当我在新创建的视图和变换的中心使用实际的EPSG:3031时,贴图不会渲染。 它工作的唯一方法是选择EPSG:4326或3857,中间[0,0]实际上没有任何意义

我的javascript如下所示:

//寄存器EPSG
项目定义(“EPSG:3031”,“+proj=stere+lat_0=-90+lat_ts=-71+lon_0=0+k=1+x_0=0+y_0=0+datum=WGS84+units=m+no_defs”);
//集合投影
var proj3031=ol.proj.get('EPSG:3031');
//测试坐标变换是否正常工作
var center2=ol.proj.transform([0,-80],'EPSG:4326','EPSG:3031');
;
var baseMapLayer=新建ol.layer.Tile({
来源:new ol.source.OSM()
});
var esriArctic=新的ol.layer.Tile({
标题:“ESRI图像”,
类型:'base',
zIndex:0,
来源:new ol.source.XYZ({
属性:[新ol.属性({
html:“Tiles©;”
})],
网址:'https://server.arcgisonline.com/ArcGIS/rest/services/Polar/Antarctic_Imagery/MapServer/tile/{z} /{y}/{x}',
wrapX:错,
})
});
var map=新ol.map({
目标:“地图”,
层:[esriArctic],
//图层:[baseMapLayer],
视图:新ol.view({
//投影:“EPSG:4326”,
投影:proj3031,
//中心:[0,0],
中心:中心2,
缩放:5//初始缩放级别
})

});请查看以下代码片段:

proj4.defs(“EPSG:3031”,“+proj=stere+lat_0=-90+lat_ts=-71+lon_0=0+k=1+x_0=0+y_0=0+datum=WGS84+units=m+no_defs”);
ol.proj.proj4.寄存器(proj4);
var proj3031=ol.proj.get('EPSG:3031');
var esriArctic=新的ol.layer.Tile({
标题:“ESRI图像”,
类型:'base',
zIndex:0,
来源:new ol.source.XYZ({
网址:'https://services.arcgisonline.com/arcgis/rest/services/Polar/Antarctic_Imagery/MapServer/tile/{z} /{y}/{x}'
})
});
var map=新ol.map({
目标:“地图”,
层:[esriArctic],
视图:新ol.view({
中心:Lonlat的其他项目([0,-80],项目3031),
缩放:3
})
})
html,
身体,
#地图{
宽度:100%;
身高:100%;
溢出:隐藏;
}

非全局投影中的Arcgis源具有非标准瓦片栅格@如果可以添加正确的tilegrid,RalphL的方法将起作用,但是可以通过将其定义为TileArcGisTest源自动完成。如果您想使用OSM作为基础层,则EPSG:3857等无法到达极坐标极点的重投影会导致OpenLayers无法处理的错误并崩溃。我通过定义转换函数来解决这个问题,转换函数通过中间投影,让代码捕捉任何错误

function reprojectionErrorHandler(投影,opt_中间){
var intermediate=opt|u intermediate |'EPSG:4269';
函数转换(projA、projB){
返回函数(输入、选择输出、选择维度){
变量长度=input.length;
变量维度=选择维度!==未定义?选择维度:2;
var输出=opt_输出!==未定义?opt_输出:新数组(长度);
变量ll,点,i,j;
试一试{
对于(i=0;i<长度;i+=尺寸){
ll=ol.proj.transform([input[i],input[i+1]],projA,intermediate);
point=ol.proj.transform([ll[i],ll[i+1]],中间,projB);
输出[i]=点[0];
输出[i+1]=点[1];
对于(j=尺寸-1;j>=2;--j){
输出[i+j]=输入[i+j];
}
}
}捕获(e){}
返回输出;
};
}
if(阵列isArray(投影)){
对于(i=0;i<1.length-1;i++){
对于(j=i+1;j
html,
身体,
#地图{
宽度:100%;
身高:100%;
溢出:隐藏;
}

[0,-80]位于南极大陆,地图设置为该位置的中心,但非3857来源不使用标准瓷砖,因此瓷砖放错位置,使地图中心显示在目标之外谢谢您的帮助