ThinkGeo.com    |     Documentation    |     Premium Support

Getting the area of a drawn shape with Google Overlay

Hello,


I am trying to get the area of a drawn and saved shape with the google overlay.


I read about the Google Mercator conversion and came up with the following code, but it isn't working.



 



            LayerOverlay dynamicOverlay = (LayerOverlay)Map1.CustomOverlays["DynamicOverlay"];
            InMemoryFeatureLayer shapeLayer = (InMemoryFeatureLayer)dynamicOverlay.Layers["shapeLayer"];

            foreach (Feature feature in Map1.EditOverlay.Features)
            {
                AreaBaseShape abs = (AreaBaseShape)feature.GetShape();

                ManagedProj4Projection proj4 = new ManagedProj4Projection();
                proj4.InternalProjectionParametersString = ManagedProj4Projection.GetWgs84ParametersString();
                proj4.ExternalProjectionParametersString = ManagedProj4Projection.GetGoogleMapParametersString();

                 
                proj4.Open();
                AreaBaseShape abs2 = (AreaBaseShape)proj4.ConvertToExternalProjection(abs);
                proj4.Close();

                double area = abs2.GetArea(Map1.MapUnit, AreaUnit.Acres);

                if (!shapeLayer.InternalFeatures.Contains(feature.Id))
                {
                    shapeLayer.InternalFeatures.Add(feature.Id, feature);
                }
            }
 



Of course if I am using the World Map overlay then getting the area works without the conversion in the above code.



Thanks for your time.


Chad



Hello Chad, 
  
 Thanks for your post. 
  
 I’m not very clear your requirements, my understand is you want to use editoverlay to draw some rectangle and save to shapefeaturelayer, but your background is google map, so you want to use ManagedProj4Projection to change the projection of editoverlay. 
  
 Am I misunderstanding something? What’s the problem of “it isn’t working”, you can’t get the AreaBaseShape with right projection? 
  
 Sorry for the inconvenience, if you can provide a sample that can recreate the problem, I appreciate that. 
  
 Regards, 
  
 Gary

Hello Chad, 
  
 Thanks for your post. 
  
 I’m not very clear your requirements, my understand is you want to use editoverlay to draw some rectangle and save to shapefeaturelayer, but your background is google map, so you want to use ManagedProj4Projection to change the projection of editoverlay. 
  
 Am I misunderstanding something? What’s the problem of “it isn’t working”, you can’t get the AreaBaseShape with right projection? 
  
 Sorry for the inconvenience, if you can provide a sample that can recreate the problem, I appreciate that. 
  
 Regards, 
  
 Gary

Hi Gary,


I should have been more clear.   The area is not calculated correctly with the code I provided when using Google Maps.  


Chad



Hello Chad, 
  
 Thanks for your further information, I have recreate this problem, the reason is the new projectioned AreaBaseShape has problem, so the GetArea function will return 0. 
  
 I have submit a issue for this, and will let you know the result as soon as possible, please subscribe this post to get the news. 
  
 Regards, 
  
 Gary

Hello Chad, 
  
 Sorry for my mistake yesterday. 
  
 This is not actually a bug, it’s the wrong way to use the projection in this way. In the track finished event, the polygon shape we tracked has been already projected. If you want to reproject this shape again. It has been out side of the boundary of the decimal degree which means the points are far away from its valid district. I’m not sure what the scenario your sample is, but if you want to get the area in meter, don’t use project, or if you want to get the area in decimal degree, just convert to its internal projection and get the area. 
  
 Regards, 
  
 Gary