OpenLayers 3 - 使用Gauss-Boaga投影时错误的ScaleLine值

时间:2017-03-16 21:17:45

标签: scale openlayers-3 projection

我正在使用openlayers 3从mapserver服务器渲染地图。我需要使用Gauss Boaga投影,所以我定义了:

var gbProjection = new ol.proj.Projection({
    code: 'EPSG:3003',
    extent: [1290650.93, 4192956.42, 2226749.10, 5261004.57],
    units: 'm'
});
ol.proj.addProjection(gbProjection);
var mymap = new ol.Map({
    controls: ol.control.defaults().extend(
            [new ol.control.FullScreen(), new ol.control.ScaleLine({
                    units: 'metric'
                })]),
    layers: layers,
    units: 'm',
    target: 'mymap',
    view: new ol.View({
        projection: gbProjection,
        center: [gbest, gbnord],
        zoom: 9
    })
});

我在“视图”字段中添加了投影。一切都很好,我能够将我的点放在地图上的正确位置。唯一的问题是我在ScaleLine中得到了错误的值,看起来实际比例乘以100000(我得到,比如50000 Km而不是500 m)。我无法弄清楚如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

在项目中包含proj4js库:

https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.3.15/proj4.js

然后通过添加以下内容让ol3了解EPSG:3003:

Proj4js.defs["EPSG:3003"] = "+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs";

然后执行以下操作来设置范围并获得对投影的引用。

//get a reference of your new projection
var gbProjection = ol.proj.get('EPSG:3003');
//set the extent
gbProjection.setExtent( [1290650.93, 4192956.42, 2226749.10, 5261004.57]);

可以在此处找到投影定义 http://spatialreference.org/ref/epsg/monte-mario-italy-zone-1/proj4js/

使用这种方式,您的比例应该很好,您也可以进行任何转换。