ThinkGeo.com    |     Documentation    |     Premium Support

Getting the Area of a Feature in Bing Maps

Hello,


I am trying to get the area of a feature within Bing Maps.


 



//Create Feature based upon Well Known Text you have stored in your database table
                        Feature plotPolygon = new Feature(dr["property_wkt"].ToString());
                        //Set the field information for each plot polygon based upon what is stored in the database.
                        plotPolygon.ColumnValues.Add("id", dr["property_id"].ToString());
                        plotPolygon.ColumnValues.Add("name", dr["property_name"].ToString());

                        //AreaBaseShape areaShape = (AreaBaseShape)selectedFeatures[0].GetShape();
                        //double area = areaShape.GetArea(GeographyUnit.DecimalDegree, AreaUnit.SquareKilometers);

                        AreaBaseShape abs = (AreaBaseShape)plotPolygon.GetShape();
                                                  //Map1.MapUnit 
                        double area = abs.GetArea(GeographyUnit.Meter, AreaUnit.Acres);

                        plotPolygon.ColumnValues.Add("area", area.ToString());
                        //Add the plot to the Plots Layer.
                        propertyLayer.EditTools.Add(plotPolygon);

However the results are way off.  My MapUnit is meters because I am using Bing.


Any ideas?



Hi Chad, 
  
 What is the unit of the polygon that you want to get the area? The unit must match together to get the correct result. Could you please show me the wkt of the polygon and the result area you get? 
  
 Thanks, 
  
 Edgar

Edgar, 
  
 I didn’t realize we had to set the unit of the polygon we create.  I thought it was derived/calculated based on the current Map layer. How do you set the unit? 
  
 Here is my WKT.  
  
 POLYGON((-8740988.07592 4672318.3084105,-8740541.3970528 4672645.5544254,-8740954.6347214 4673414.7019934,-8741601.9607801 4672872.4768445,-8740988.07592 4672318.3084105)) 
  
 and the result is 144 acres.

Chad, 
  
 You don’t need to set the unit of polygon, the coordinates are just representing the values without unit, e.g. RectangleShape(-180, 90, 180, -90), it could represent Meter/Feet/DecimalDegree, it will return different values when the GeographyUnit is different in the method GetArea. I think your result is right, I used another areaUnit polygon.GetArea(GeographyUnit.Meter, AreaUnit.SquareMeters) and get the result 585191, as is known that 1 acre equals 4046 square meters, and 144.6 acres multiply 4046 is 585051.6, despite the accuracy, the results are matched. Could you please have check? 
  
 Thanks, 
  
 Edgar

Edgar, 
  
 I checked against this: daftlogic.com/projects-google-maps-area-calculator-tool.htm    
  
 That website is accurate as I have matched against known surveys.

Chad, 
  
 I found the calculator only accepts degree unit, could you please tell me how you calculate the polygon’s area? 
  
 Thanks, 
  
 Edgar

I am using Meters (Bing’s unit of measure) and I want to get acres.  My code is in the first post above.

Chad, 
  
 Oh that means you’ve confirmed your result with the website in your previous reply? Sorry I thought the web gave you a different result :). So, do you have any questions now? 
  
 Regards, 
  
 Edgar

I’m sorry, when you said calculator, I thought you meant there was a thinkgeo class named calculator. 
  
 The website (daftlogic.com/projects-google-maps-area-calculator-tool.htm ) gives me ~82 acres, which is correct.  Thinkgeo gives me 144 acres, which is incorrect. 
  
 I do them both the same way.  I draw the polygon on the map.  The website does it instaneously, my code in the first post above fires on Save. 
  


Chad,
 
Could you please show me how you put the polygon to the website and calculate its area? I only found it accepts decimal degree values.
 

 
Thanks,
 
Edgar

 Edgar,


 
Above that is a map.  Zoom to the location you want to draw a polygon and draw it, just like in MapSuite.  
 
I attached a screen shot of the map

001_map.jpg (74.9 KB)

Edgar, 
  
 In addition to that issue, do you know of a way that map suite can have the same kind of functionality that the daftlogic website gives for calculating the area in real-time as you draw.

Chad,


I tested the shape with the web site you provided, and get the result as 84, but after I draw it on a bitmap, I calculate its area estimately, and get the area as 145, see the attached picture.



So I think there must be something wrong with the web site.


For you second question, you can refer to the sample HowDoISamples->MapShapes->TrackShapeFinishedEvent, there you can draw a shape you want and do anything you want to the feature you drew.


Hope it helps,


Edgar



Edgar, 



This is my property.  The property is 82 acres.  This is verified by the state of Virginia.    



Using Google's measuring tools, your image is drastically off.  support.google.com/maps/bin/answer.py?hl=en&answer=1628031 



Using the same drawing you did, the width is 420 meters and the length is 618 meters for a total of  259,560 square meters.  That is 64 acres. Of course the other 18 acres are on the outside of your rectangle. 



The track shaped finished event is for when the shape is finished, right?  I am asking if it is possible to show "real time area calculations" as I am drawing. 



Thanks again for your time.



Chad,
 
Now I know the root problem, the polygon is projected from decimal degree right? If so, the area should have be changed when projecting, just like the Russia looks much bigger in 900913 projection than that in 4326, so the only way to get the accurate area is converting the polygon back to decimal degree unit, in your case you can do it like this,
 

                ManagedProj4Projection prj = new ManagedProj4Projection();
                prj.InternalProjectionParametersString = ManagedProj4Projection.GetGoogleMapParametersString();
                prj.ExternalProjectionParametersString = ManagedProj4Projection.GetEpsgParametersString(4326);
                prj.Open();

                PolygonShape polygonShapeInDecimaDegree = (PolygonShape)prj.ConvertToExternalProjection(polygonShapeInMeter);
                double area = polygonShapeInDecimaDegree.GetArea(GeographyUnit.DecimalDegree, AreaUnit.Acres);

 
and it returns 87.
 
For you second question, sorry we don’t have that property in Web Edition, maybe you have to do in another way if you want to get the real-time area.
 
Regards,
 
Edgar