ThinkGeo.com    |     Documentation    |     Premium Support

Length of a line in miles on client side with button click event












Hi Howard,


 


Referring gis.thinkgeo.com/Support/Dis...fault.aspx


 


My client needs measure tool that calculates distance in miles and feet between line(s) on client side. 


 


I used your demo code from above posted link. I modified code to get distance in miles and feet’s. Your demo does activate measure tool object  OnMapCreated = function(map) in javascript.


 


But I want to activate measure tool when user clicks on ‘Measure line’ button and should deactive when user clicks on ‘Clear’ button to return normal moade.


 


I tried to activate measureLineControl.activate(); by calling javascript ‘activate()’ on client click of btnMeasureLine but nothing happened. It did not allowed me to measure line.


 


Am I missing something here?


 


Please find attached sample code along with shape file. 


To get broad view, I have also included screen shots of main page where I will have button for Measure tool next to Hybrid button at top right corner.


 


Also I have forwarded shape data file (Fiber_Security_Aerial.zip) to support people.


 


Your quick response highly appreciated.


 


Thanks


Hiren



1281-MT.zip (3.01 KB)
1282-Main_Page.GIF (64.7 KB)

Hiren, 
  
 I’ll test your application when I get the data. Let you know when I have the result. 
  
 Thanks, 
 Howard

Hi Howard,



Any update on this?



Thanks

Hiren



Hiren, 



Please modify your onclientclick event a little and your application will be fine. You server button causes a Postback so every client status lost. 




OnClientClick="javascript:activate(); return false;"



Howard











Howard,


 


It works now.


Thanks for quick reply. It was critical for next week release.


 


Thanks


Hiren












Howard,


 


There was small issue with this.


 


My map unit set to meter in code behind of page load


.


When I drew line between two points, "event.units" on client side was in meters.


 


And when I clicked on 3rd point,  event. units was in kilo meter. And same for rest of point click.


 


I was amazed to notice that every 3rd click was giving wrong miles.


 


So I made little changes in following code where it gets units.


 


            var measure = event.measure;


            var miles;


            if (units == 'm') {


                miles = measure * 0.000621371192;


            }


            else {


                miles = measure * 0.621371192;


            }


 


It works fine for me. But it's weird.


 


Thanks


Hrien




Hi Hiren,


This is because OpenLayers has three display systems: Geographic, English and Metric. And the defaut display system is Metric, so if you want to show the distance unit as ‘mi, ft, in’, just set the displaySytem property to English like this:


measureLineControl.displaySystem = 'english';


Then OpenLayers will calculate the distance and display it at an appropriate unit, and you don’t need to write more code about this.
Any more questions please let me know.
Thanks,
Sun   

 



Hi Sun,






1. How do I Change the Line color when measuring distance to Dark red?




2. I want to get out of "Measure tool" mode on Double clicking






Thanks




Hiren




 


Hiren,
To change the line color when measuring, you need to set the style of the displayLayer:


displayLayer.styleMap.styles["default"].defaultStyle.strokeColor = "Dark Red";


And to get out of “Measure tool” mode by double clicking, just add the deactivate method to the handleMeasurementCompleted event like this:


function handleMeasurementCompleted(event) 
{

    var parser = Map1.GetMapParser();
    var displayLayer = parser.map.getLayersByName('displayLayer')[0];

    var feature = new OpenLayers.Feature.Vector(event.geometry);
    displayLayer.addFeatures([feature]);
    deactivate();
}


Any more questions please let me know.
Thanks,
Sun

 




 




Hi Sun,



It works.

Thanks for quick turnaround.



Thanks

Hiren



You are welcome, Hiren. 
  
 Any more questions please let me know. 
  
 Thanks, 
  
 Sun