# Drawing a circle in Bing Maps

posted in: Uncategorized | 0

I noticed my old code samples around the place are a little outdated so I created this little sample based off the Bing Maps iSDK today. This is a little helper function that calculates 360 points around the location provided at the given radius in KM. The co-ordinates are quite accurate and you will notice the effects of adding a circle at different Latitudes on the Mercator map.

Full source:

```<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<title>Circle Example Bing Maps</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2"></script>
<script type="text/javascript">
var map = null;
var pinid = 0;

function GetMap() {
map = new VEMap('myMap');
map.SetZoomLevel(2);
}

var ll = map.GetCenter();
var shape = new VEShape(VEShapeType.Polyline, getCircle(ll, 100));
shape.SetTitle('My circle');
shape.SetDescription('This is shape number ' + pinid);
pinid++;
}

function getCircle(loc, radius) {
var R = 6371; // earth's mean radius in km
var lat = (loc.Latitude * Math.PI) / 180; //rad
var lon = (loc.Longitude * Math.PI) / 180; //rad
var d = parseFloat(radius) / R;  // d = angular distance covered on earth's surface
var locs = new Array();
for (x = 0; x <= 360; x++) {
var p2 = new VELatLong(0, 0)
brng = x * Math.PI / 180; //rad
p2.Latitude = Math.asin(Math.sin(lat) * Math.cos(d) + Math.cos(lat) * Math.sin(d) * Math.cos(brng));
p2.Longitude = ((lon + Math.atan2(Math.sin(brng) * Math.sin(d) * Math.cos(lat), Math.cos(d) - Math.sin(lat) * Math.sin(p2.Latitude))) * 180) / Math.PI;
p2.Latitude = (p2.Latitude * 180) / Math.PI;
locs.push(p2);
}
return locs;
}

</script>