Problem with drawing circle with radius in meters

Jun 18, 2010 at 10:32 AM

I've been trying to draw a circle around a POI (lat, lon) using the following code:

private GeometryBase MakeRegularPolygon(double latitude, double longitude, double radius, int sides, Color fillColor, Color lineColor)
{
            double resolution = InnerMap.Map.CoordHelper.GetResolutionAtZoomLevel(Map.Map.ZoomLevel, DeepEarth.Unit.Meter);
            radius *= (1 / resolution);

            Point pixelCenter = InnerMap.Map.CoordHelper.GeoToPixel(new Point(latitude, longitude));
            double da = (Math.PI * 2) / sides;

            Polygon polygon = new DeepEarth.Geometry.Polygon();
            polygon.LineColor = lineColor;
            polygon.FillColor = fillColor;

            for (int i = 0; i < sides; i++)
            {
                var pixelOnCircleCoordinate = new Point(pixelCenter.X + (radius * Math.Cos(i * da)), pixelCenter.Y + (radius * Math.Sin(i * da)));
                var geoOnCircleCoordinate = InnerMap.Map.CoordHelper.PixelToGeo(pixelOnCircleCoordinate);
                polygon.Points.Add(geoOnCircleCoordinate);
                CreatePushpin("", geoOnCircleCoordinate.X, geoOnCircleCoordinate.Y);
            }

            return polygon;
}

The circle itself is drawn just fine. The problem is that the radius is incorrect, I would expect the resolution variable to hold the number of pixels needed to represent one meter at a given zoom-level. But this seems to be incorrect with a factor near 2. Can anyone tell me how I can retrieve this factor? The relevant code has been marked red.

Thanks in advance!

Developer
Jun 18, 2010 at 12:49 PM
GetResolutionAtZoomLevel(double zoomLevel, Unit unit)

Gets the resolution of a pixel at the "EQUATOR" at the supplied zoom level in the unit provided


maybe try

GetResolutionAtZoomLevel(double zoomLevel, Location geographicPoint, Unit unit)

Gets the resolution of a pixel at the supplied Geographical Point (longitude, latitude)  at the supplied zoom level in the unit provided


Developer
Jun 18, 2010 at 12:51 PM
or try

GetResolutionAtZoomLevel(double latitude, double zoomLevel, Unit unit)

the Location geographicPoint is in the latter versions of DE, if you have a earlier version it just a point in that method