Предполагая, что ваша карта Google Maps, они используют проекцию Меркатора, поэтому вам нужно будет использовать ее для преобразования.В проекции Меркатора расстояние, которое пиксель представляет в метрах, зависит от широты, поэтому, несмотря на то, что метр является очень небольшим расстоянием по сравнению с радиусом Земли, широта важна.
Все приведенные ниже примеры являются JavaScript, поэтомувам может понадобиться перевести их.
Вот общее объяснение системы координат:
http://code.google.com/apis/maps/documentation/javascript/maptypes.html#WorldCoordinates
В этом примере содержится объект MercatorProjection, который включает методы fromLatLngToPoint() и fromPointToLatLng ():
http://code.google.com/apis/maps/documentation/javascript/examples/map-coordinates.html
Как только вы преобразовали (x, y) в (lat, lon), вот как вы рисуете круг:
// Pseudo code
var d = radius/6378800; // 6378800 is Earth radius in meters
var lat1 = (PI/180)* centerLat;
var lng1 = (PI/180)* centerLng;
// Go around a circle from 0 to 360 degrees, every 10 degrees
for (var a = 0 ; a < 361 ; a+=10 ) {
var tc = (PI/180)*a;
var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
var x = ((lng1-dlng+PI) % (2*PI)) - PI ;
var lat = y*(180/PI);
var lon = x*(180/PI);
// Convert the lat and lon to pixel (x,y)
}
Эти два гибридных приложения рисуют на поверхности Земли круг заданного радиуса:
http://maps.forum.nu/gm_sensitive_circle2.html
http://maps.forum.nu/gm_drag_polygon.html
Если вы выберетечтобы игнорировать проекцию, вы должны использовать декартовы координаты и просто нарисовать круг, используя теорему Пифагора:
http://en.wikipedia.org/wiki/Circle#Cartesian_coordinates