Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Openlayers 3 光栅重投影OpenLayers 3_Openlayers 3 - Fatal编程技术网

Openlayers 3 光栅重投影OpenLayers 3

Openlayers 3 光栅重投影OpenLayers 3,openlayers-3,Openlayers 3,我正在尝试将EPSG:3395中的WMS源代码重新投影到OpenLayers 3中的EPSG:32661。我已经加载了proj4js和投影定义,但是没有显示任何内容 奇怪的是,甚至at的示例似乎都不起作用。我正在调试为什么会出现这种情况,并发现在将以下坐标从32661转换为3857时抛出了第一个错误。假设加载了EPSG:32661 proj4js def,您可以通过在控制台中运行以下JS来独立地重新创建: proj4("EPSG:32661", "EPSG:3857", [2000000.000

我正在尝试将EPSG:3395中的WMS源代码重新投影到OpenLayers 3中的EPSG:32661。我已经加载了proj4js和投影定义,但是没有显示任何内容


奇怪的是,甚至at的示例似乎都不起作用。

我正在调试为什么会出现这种情况,并发现在将以下坐标从32661转换为3857时抛出了第一个错误。假设加载了EPSG:32661 proj4js def,您可以通过在控制台中运行以下JS来独立地重新创建:

proj4("EPSG:32661", "EPSG:3857", [2000000.0000000005, 2000000])
->中断

鉴于,根据WGS84

proj4("EPSG:32661", "EPSG:4326", [2000000.0000000005, 2000000])
->[90,90]

我在项目4中通过以下查询验证了这一点:


我不知道这是好是坏。有趣的是,它发生在基本上是北极的地方,所以在这个极端点上可能有一些舍入错误或数学错误?

当OpenLayers调用的proj4代码处理空值时,当预期对象包含x和y属性时,会发生错误。根据使用的proj4.js版本的不同,它可能发生在任何变换中,其中一个坐标在另一个投影中无效,但在转换到EPSG:4326或从EPSG:4326转换时似乎不太可能发生。OpenLayers示例试图通过在投影上设置范围来防止错误,但是,如果您想在其国家预测中显示一个国家,但同时也要显示周边国家(尽管有一些失真),或者在UTM预测中包括相邻地区,则这是不可取的。我使用了
ol.proj.addCoordinateTransforms
来确保所有转换都通过EPSG:4326进行,这消除了大多数错误,并添加了try/catch来覆盖任何剩余的错误(虽然如果使用最新版本2.5.0的proj4.js,try/catch似乎是多余的,即使是该版本也会在其他投影之间直接转换产生错误)。但是
ol.proj.getPointResolution()需要一些从EPSG:2163到EPSG:4326的转换
即使使用最新的proj4.js,也无法在某些位置居中或缩小地图。幸运的是,在proj4中预定义了EPSG:4269,当用作中间版本而不是EPSG:4326时,它允许尝试/捕获处理涉及EPSG:4326的错误(除非应使用EPSG:4326时,重新投影到EPSG:4269或从EPSG:4269进行!) 这里是OpenLayers示例的重写,所有转换都是通过EPSG:4269进行的,对投影范围没有限制

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