13 votos

Calcular las coordenadas de un cuadrado x millas desde un punto de centro

Estoy tratando de crear un x milla cuadrada (o círculo) alrededor de un punto central, donde todos los lados de la plaza sería x millas del centro. Necesito las 4 esquinas de coordenadas.

Es el revolver de mi cerebro tratando de conseguir mi cabeza alrededor de ella? Puedo trabajar fuera de la distancia entre dos puntos utilizando la fórmula de haversine pero las matemáticas es en serio no es mi punto fuerte y no entiendo sen,cos, etc.. y tratando de resolver esto ha perdido a mí!

Me he encontrado con este post , pero yo simplemente no lo entiendo!

Alguien podría ser tan amable de explicar como hago esto en las manzanas y las peras?

EDITAR

Para explicar exactamente lo que estoy tratando de hacer;

Tengo un sitio web, donde los usuarios pueden buscar para los edificios en un área específica. Entran en una ciudad o lugar (que yo sepa el lat largo de) y la búsqueda dentro de un determinado radio de 10 millas del lugar.

Necesito encontrar el min/max lat y anhela de la 10mile radio, así que puedo consulta a mi base de datos utilizando una cláusula where similar a:

Where buildingLat <= maxLat 
  and buildingLat <= minLat 
  and buildingLong >= minLong 
   or buildingLong >= maxLong

Necesito algún tipo de fórmula!

Mis coordenadas en grados decimales

11voto

cjstehno Puntos 131

Para este propósito simples aproximaciones son más que suficiente. Norte o sur, un grado es de unos 69 kilómetros de distancia, pero el este o el oeste, es sólo el 69*cos(latitud) millas. Porque latitudes no cambian mucho a lo largo de una milla diez útil, se puede utilizar de forma segura el coseno de la central latitud de la "plaza". Por lo tanto, el deseado de las coordenadas de la plaza de vértices a distancia r millas desde una ubicación central (f,l), dado como lat-lon, se calcula como

df = r/69        // North-south distance in degrees
dl = df / cos(f) // East-west distance in degrees
{(f-df,l-dl), (f+df,l-dl), (f+df,l+dl), (f-df,l+dl)} // List of vertices

Por ejemplo, supongamos que r = 10 km, y la ubicación central está a una latitud de 50 grados norte, longitud 1 ° oeste, de modo que (f,l) = (50,-1) grados. Entonces

df = 10/69 = 0.145
dl = 0.145 / cos(50 degrees) = 0.145 / 0.6428 = 0.225
f - df = 50 - 0.145 = 49.855 (southernmost latitude)
f + df = 50 + 0.145 = 50.145 (northernmost latitude)
l - dl = -1 - 0.225 = -1.225 (western longitude)
l + dl = -1 + 0.225 = -0.775 (eastern longitude)

y las coordenadas son (49.855,-1.225), (50.145,-1.225), (50.145, -0.775), y (49.855, -0.775) como usted de marzo de las agujas del reloj alrededor de la plaza a partir de su esquina suroeste.

No use esta aproximación cerca de los polos o para plazas de más de un par de grados en un lado. También, dependiendo de las limitaciones de los SIG, algunas cuidado puede ser necesario en todo el mundial corte en longitud, generalmente se toma en +-180 grados.

6voto

Al. Puntos 1182

Finalmente, mi respuesta es: (en c#)

Probablemente no es necesario el 4 de coordenadas, pero creo que son bastante precisas.

 public static void GetBoundingCoords(double centerLat, double centerLong,  double distance)
    {
     Coordinate top=   MaxLatLongOnBearing(centerLat, centerLong,45,10);
     Coordinate right = MaxLatLongOnBearing(centerLat, centerLong, 135, 10);
     Coordinate bottom = MaxLatLongOnBearing(centerLat, centerLong, 225, 10);
     Coordinate left = MaxLatLongOnBearing(centerLat, centerLong, 315, 10);
    }

    public static Coordinate MaxLatLongOnBearing(double centerLat, double centerLong, double bearing, double distance)
    {

        var lonRads = ToRadian(centerLong);
        var latRads = ToRadian(centerLat);
        var bearingRads = ToRadian(bearing);
        var maxLatRads = Math.Asin(Math.Sin(latRads) * Math.Cos(distance / 6371) + Math.Cos(latRads) * Math.Sin(distance / 6371) * Math.Cos(bearingRads));
        var maxLonRads = lonRads + Math.Atan2((Math.Sin(bearingRads) * Math.Sin(distance / 6371) * Math.Cos(latRads)), (Math.Cos(distance / 6371) - Math.Sin(latRads) * Math.Sin(maxLatRads)));

        var maxLat = RadiansToDegrees(maxLatRads);
        var maxLong = RadiansToDegrees(maxLonRads);

        return new Coordinate(){Latitude=maxLat, Longitude=maxLong};
    }

EDITAR

Habiendo dado cuenta de que si ponía las esquinas de mi plaza de x millas del punto del centro, los bordes de mi plaza no será el mismo de x millas. (dijo que las matemáticas no son mi punto fuerte) Así que para obtener los puntos de esquina de la distancia desde el punto central si quiero que mi bordes cuadrados a x millas he usado de Pitágoras el Teorema de trabajo fuera de la distancia de la diagonal. (en un ángulo recto de un triángulo, el cuadrado de la hipotenusa (la diagonal) es igual a los cuadrados de los otros dos lados)

4voto

Adam Ernst Puntos 6939

Tomar la coordenada X del centro y restar x millas de ella este es el lado izquierdo de su plaza. Luego tomar la coordenada Y del centro y restar X millas, esta es la parte inferior de la plaza. Repita estos pasos pero sumar en lugar de restar para obtener la mano derecha y la parte superior de los bordes. Ahora usted puede construir las cuatro esquinas de la plaza.

Tenga en cuenta lo anterior se asume que el punto central está en millas. Si no es la primera reproyectar. Otros sabios todas las apuestas están apagadas y su plaza no va a ser cuadrado.

0voto

ced Puntos 131

Yo lo que está en esta página

Punto de destino dada la distancia y el rumbo desde el punto de inicio

Fórmula:
lat2 = asin(pecado(lat1)*cos(d/R) + cos(lat1)*sin(d/R)*cos(θ))
lon2 = lon1 + atan2(sen(θ)*sin(d/R)*cos(lat1), cos(d/R)−sin(lat1)*sin(lat2))

θ es el rodamiento (en radianes, las agujas del reloj desde el norte); d/R es la distancia angular (en radianes), donde d es la distancia recorrida y R es el radio de la tierra

Para θ he utilizado -45 grados (en radianes) de la "superior", y 135 grados para los "de abajo a la derecha" uno

(Recientemente he hecho la misma pregunta en el sitio de matemáticas)

0voto

Si usted está usando un espacio consciente de base de datos usted puede convertir su área de interés en el mismo sistema de coordenadas se almacenan los datos y, a continuación, hacer una comparación de manzanas con manzanas.

Por ejemplo:

  1. El usuario elige una ubicación, lo que resulta en lat/lon.
  2. Pedir espacial de la base de datos para convertir este punto en un sistema de coordenadas proyectadas apropiados para la zona (unidades de pies o metros, etc.).
  3. Construir su área de interés en torno a la proyección de punto.
  4. Pedir espacial de la base de datos para convertir esta área de interés de lat/lon.
  5. Hacer lo que las comparaciones que usted necesita hacer.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X