My WMS layer(EPSG:3847) looks fine in GeoServer enter image description here However, it is distorted in browser: enter image description here I found someone hade the same problem(Openlayers and Geoserver: OSM/Google Maps and WMS Overlay)but I still couldn't solve the problem. I also tried to add code like

var geographic = new OpenLayers.Projection("EPSG:3847");
var mercator = new OpenLayers.Projection("EPSG:4326");
var lund_center = new OpenLayers.LonLat(13.2, 55.7).transform(
                geographic, mercator


map.setCente(lund_center, 10);

but the WMS layer is still distorted. I also tried this code but nothing's changed (EPSG3847 is not included in proj4.js, is that why the code didn't work?):

EPSG4326 = new OpenLayers.Projection("EPSG:4326");
EPSG3847  = new OpenLayers.Projection("EPSG:3847 ");

var option = {
            projection: new OpenLayers.Projection("EPSG:3847 "),
            displayProjection: new OpenLayers.Projection("EPSG:4326")

How can I solve this problem? Any help please? *the code I'm trying now are as follows, still,nothing changed:

    var lon = 12.1;
    var lat = 48.4;
    var zoom = 10;
    var map, vectors, controls;      
 var options = {
        controls: [],
        projection: new OpenLayers.Projection('EPSG:3857'),
        displayProjection: new OpenLayers.Projection('EPSG:4326'),
        maxExtent: new OpenLayers.Bounds(           
        -20037508, -20037508,20037508, 20037508.34),
        //modify parameter
        maxResolution: 5000,
        //modify parameter
        //setting zoom levels
        units: 'm',


 function init(){

    var map = new OpenLayers.Map({
    div: "map",
    allOverlays: true

    var roads_wms = new OpenLayers.Layer.WMS( "Roads",
            "http://localhost:8090/geoserver/wms/wsNYCRoad", {
            projection: map.displayProjection,
            layers: 'vagar_alla',
            styles: '',
            tiled: 'false',
            tilesOrigin : map.maxExtent.left + ',' + map.maxExtent.bottom
            buffer: 0,
            displayOutsideMaxExtent: true,
            isBaseLayer: false,
            reproject: true
        Proj4js.defs["EPSG:3006"] = "+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs";
        Proj4js.defs["EPSG:4326"] = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs";
        var src = new OpenLayers.Projection('EPSG:3006');
        var dst =  new OpenLayers.Projection('EPSG:4326');
        Proj4js.transform(src, dst, roads_wms); 
  • 1
    This is correct behaviour. Going from degrees to meters will inevitably change the shape as sadly the earth is not flat :D. – John Powell Dec 16 '14 at 13:06
  • @JohnBarça Thanks for your answer.So you are saying I don't need to do any transformation? Is there anyway I can display the layer in the browser as it is displayed in GeoServer? – ZhangYao Jiayin Dec 16 '14 at 13:15
  • 1
    I'm sorry I misread that as 3857. 3847 is a Swedish projection so you will need to add proj4js I imagine. – John Powell Dec 16 '14 at 13:21
  • @JohnBarça as I said 3847 is not included in proj4js, so no use to add proj4js, besides there's no format for Proj4js.defs["EPSG:3847"]="" T_T – ZhangYao Jiayin Dec 16 '14 at 13:24
  • So why are you surprised that it looks different? – John Powell Dec 16 '14 at 13:25

I solved the problem:

First, re-project the wms layer in ArcMap to WGS_1984_Web_Mercator_Auxiliary_Sphere(epsg3857). Then use this code:

var map = new OpenLayers.Map({
            maxScale: 1/5000,
            minScale: 1/500000,
            projection: new OpenLayers.Projection("EPSG:3857"),
            displayProjection: new OpenLayers.Projection("EPSG:4326"),
            div: "map",
            allOverlays: true

var proj = new OpenLayers.Projection("EPSG:4326");
var lonlat = new OpenLayers.LonLat(1468582.90048,7501836.76895);
lonlat.transform(proj, map.getProjectionObject());
map.setCenter(lonlat, 5);
| improve this answer | |

That doesn't quite match what I see in the WKT in the link I sent... and did you try just adding (preferably with corrected lon_0, x_0, and y_0 from WKT mentioned in my comment)

# Swiss Transverse Mercator
<3847> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs  no_defs <>

to the epsg file?

| improve this answer | |
  • Yes I did, but it didn't work. I also tried to reproject the wms layer in ArcMap, but still it is displayed as distorted in the browser. – ZhangYao Jiayin Dec 16 '14 at 15:03
  • and why as long as I add projection and displayProjection the layer disappeared from the browser completely? – ZhangYao Jiayin Dec 16 '14 at 15:05
  • I only know projections, not GeoServer. I have C# code written in-house that uses proj (via DLLImport) and we've handled odd projectiouns by adding them to the epsg file as described. Are you sure you edited the right file? It's in the folder referenced by the PROJ_LIB environment variable. – Russell at ISC Dec 16 '14 at 16:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.