2011-04-19 20 views

Respuesta

33

También puede getBounds desde un radio definido como un círculo y dejar el trig de google.

new google.maps.Circle({center: latLng, radius: radius}).getBounds();

+4

¡Gracias! Esto funcionó para mí: 'var latLng = new google.maps.LatLng (32.79503, -117.24142);/* San Diego */var radius = 2000;/* metros */var circle = new google.maps.Circle ({center : latLng, radio: radio}); var defaultBounds = circle.getBounds(); ' – Ryan

+0

Genial. Buena solución! –

6

bien eso es muy complicado. para una caja áspera intente esto:

if (typeof(Number.prototype.toRad) === "undefined") { 
    Number.prototype.toRad = function() { 
    return this * Math.PI/180; 
    } 
} 

if (typeof(Number.prototype.toDeg) === "undefined") { 
    Number.prototype.toDeg = function() { 
    return this * 180/Math.PI; 
    } 
} 

var dest = function(lat,lng,brng, dist) { 
    this._radius = 6371; 
    dist = typeof(dist) == 'number' ? dist : typeof(dist) == 'string' && dist.trim() != '' ? +dist : NaN; 
    dist = dist/this._radius; 
    brng = brng.toRad(); 
    var lat1 = lat.toRad(), 
     lon1 = lng.toRad(); 

    var lat2 = Math.asin(Math.sin(lat1) * Math.cos(dist) + Math.cos(lat1) * Math.sin(dist) * Math.cos(brng)); 
    var lon2 = lon1 + Math.atan2(Math.sin(brng) * Math.sin(dist) * Math.cos(lat1), Math.cos(dist) - Math.sin(lat1) * Math.sin(lat2)); 
    lon2 = (lon2 + 3 * Math.PI) % (2 * Math.PI) - Math.PI; 
    return (lat2.toDeg() + ' ' + lon2.toDeg()); 
} 

    var northEastCorner = dest(centreLAT,centreLNG,45,10); 
    var southWestCorner = dest(centreLAT,centreLNG,225,10); 

EDITAR

Lo anterior fue que manera de hacerlo allá por 2011 cuando la escribí. En estos días, la API de Google Maps ha llegado a lo bastante. La respuesta de @wprater es mucho más clara y utiliza algunos de los métodos de API más nuevos.

+2

Bien, pero explique un poco más algunas palabras sobre el código para que los demás lectores puedan entender. ¿Qué es brng variable y qué hace y al insertar 10 como dist, son kilómetros? ¿Qué significa cuando pones 45,10 para NE corner y 225, 10 para SW corner? – maiky

+0

ok 'brng' es el rumbo o el ángulo. entonces, usando 45,10 estamos calculando la ubicación de un punto a 10 km al noreste de su punto de partida. 225,10 le dará la ubicación suroeste. estos son los dos puntos necesarios para un objeto de Google Limites. – herostwist

+0

aquí está un ejemplo de trabajo: http://jsfiddle.net/herostwist/DnSHY/1/ – herostwist

1

no funcionaría simplemente agregar/restar d/2/x para sus ubicaciones y?

dado X, Y como el punto central:

NW = x-(d/2),y-(d/2) 
SE = x+(d/2),y+(d/2) 

no confía en mí en esto, sin embargo - Soy terrible en matemáticas :)

Esto supone d como un "diámetro", en lugar de un radio Si "d" es el radio, no te molestes con la parte de división por dos.

+0

Oh, cómo desearía que la geometría esférica fuera así de simple. Por desgracia, no lo es. – herostwist

Cuestiones relacionadas