Suponiendo que su mapa es Google Maps, utilizan la proyección de Mercator, por lo que necesitaría usar eso para la conversión. Bajo la proyección de Mercator, la distancia que un píxel representa en metros varía con la latitud, por lo que mientras que un metro es una distancia muy pequeña en comparación con el radio de la Tierra, la latitud es importante.
Todos los ejemplos a continuación son javascript, por lo que puede que necesite traducirlos.
Aquí es una explicación general del sistema de coordenadas:
http://code.google.com/apis/maps/documentation/javascript/maptypes.html#WorldCoordinates
Este ejemplo contiene un objeto de Proyección de Mercator, que incluye los métodos fromLatLngToPoint() y fromPointToLatLng():
http://code.google.com/apis/maps/documentation/javascript/examples/map-coordinates.html
Una vez que haya convertido su (x, y) a (lat, lon), esta es la forma de dibujar un círculo:
// 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)
}
Estos dos mashups dibujar un círculo de un radio dado en la superficie de la Tierra:
http://maps.forum.nu/gm_sensitive_circle2.html
http://maps.forum.nu/gm_drag_polygon.html
Si decide hacer caso omiso de la proyección a continuación, tendrá que utilizar coordenadas cartesianas y simplemente dibuje el círculo usando el Teorema de Pitágoras:
http://en.wikipedia.org/wiki/Circle#Cartesian_coordinates
si quieres convertir 1 metro a dos píxeles, y quieres un radio de 1 metro, entonces quieres pasar '2' al parámetro' radius'. Ahora, dices * depende del nivel de zoom *, así que supongo que tendrás que pasar algo como '2 * (zoomLevel * zoomLevelCoefficient)' –
Esta fue una pregunta interesante, ¿encontraste una solución que funcionaba para ti? – Idistic