4

My map projection is: "EPSG:900913", display projection is "EPSG:4326" and units is "m", however does not equal the length in Direction/length with the length is calculated in measuring in OpenLayers, in fact OpenLayers show the length more than the actual length when I use measure control. I've set the option geodesic: true to my measure control.

For example:

the enter length is: 100m

direction/length

the length after measuring is: 85.29m

length of line

Define measure control:

 measureLine = new OpenLayers.Control.DynamicMeasure(OpenLayers.Handler.Path);
measureLine.geodesic = true;

function insertDirectionLength(drawType) {
    var values = parseInput(
    window.prompt(
            "Enter direction and length offset values for new point (e.g. '-45, 10')", "direction, length"
    )
     );
     if (values != null) {
         var controlKey,key;
         for (key in controls) {
             controlKey = controls[key];
             if (drawType == key) {
                  controlKey.insertDirectionLength(values[0], values[1]);
             } 
         }
     }
 }

How to resolve this problem?

nmtoken
  • 13,355
  • 5
  • 38
  • 87
Samane
  • 989
  • 6
  • 23

1 Answers1

0

My map projection is: "EPSG:900913" ,Display projection is "EPSG:4326"

I believe this is the crux of your problem. It looks like you are drawing in EPSG:900913 EPSG:3857 and you are measuring in EPSG:4326.

The Pseudo-Mercator projection is notoriously bad at calculating/drawing distances, so I would not use this projection for that kind of work.

Mintx
  • 5,396
  • 20
  • 28