2010-04-19 17 views
7

Buenos días.Añadir kilómetros a un punto del mapa

Me gustaría saber cómo agrego kilómetros a un punto del mapa (latitud/longitud).

Por ejemplo: La ciudad de Jaraguá do Sul se encuentra en latitud -26.462049, longitud -49.059448. Quiero agregar 100 kilómetros arriba, abajo y a los lados. Quiero hacer un cuadrado y obtener los nuevos puntos.

¿Cómo puedo hacer eso?

lo probé:

<?php 
$distance = 100; 
$earthRadius = 6371; 
$lat1 = -26.4853239150483; 
$lon1 = -49.075927734375; 
$bearing = 0; 

$lat2 = asin(sin($lat1) * cos($distance/$earthRadius) + cos($lat1) * sin($distance/$earthRadius) * cos($bearing)); 
$lon2 = $lon1 + atan2(sin($bearing) * sin($distance/$earthRadius) * cos($lat1), cos($distance/$earthRadius) - sin($lat1) * sin($lat2)); 

echo 'LAT: ' . $lat2 . '<br >'; 
echo 'LNG: ' . $lon2; 
?> 

pero es regresar cordinates equivocadas. ¡Gracias!

Muchas gracias.

+0

Las 2 respuestas hasta ahora son el enfoque general. Pero si la precisión no es crítica, Y si el área geográfica de interés es limitada, específicamente dentro de una banda de latitud estrecha, entonces puede cambiar estas funciones. No podría proporcionar detalles de "qué ancho tiene una banda" y "cuánta imprecisión". Por otra parte, si el alcance geográfico es limitado, puede hacer una tabla de búsqueda :-) – Smandoli

+0

Si especifica más acerca de su aplicación, objetivos finales o herramientas de trabajo, puede obtener noticias sobre una solución específica (por ejemplo, CoreLocation para iPhone) – Smandoli

+2

Estoy creando una aplicación PHP y tengo una tabla de base de datos (ciudades) con cada ciudad en mi estado (Santa Catarina). En esta tabla, tengo campos de latitud/longitud. El usuario ingresa a la ciudad y necesito crear un cuadrado imaginario de 100km para encontrar empresas cerca de él. Disculpa mi inglés y disculpa por la falta de información. ¡Gracias chicos! – proveyourselfthom

Respuesta

1

ACTUALIZACIÓN: funciones trigonométricas

PHP toman radianes como parametros, no en grados, por lo que es necesario utilizar deg2rad() como un parámetro:

sin(deg2rad($lat)) 

http://www.php.net/manual/en/function.deg2rad.php


Respuesta original:

un gran tema de hecho.

Según la precisión requerida (y las distancias recorridas), es posible que deba tener en cuenta que la tierra no es una esfera perfecta, sino un geoide (un elipsoide aplanado).

http://en.wikipedia.org/wiki/Earth_radius

le ayudará a empezar en esto.

Cartografía y proyección son dos temas que usted debe echar un vistazo a, también

otro enlace de Wikipedia sobre el tema de las distancias

http://en.wikipedia.org/wiki/Geographical_distance

+1

¿Dónde está este planeta 'erath' y cómo llegaste aquí? –

+0

Obtenga 200 reputación y edite errores tipográficos si los encuentra;) – sum1stolemyname

0

en base a su nueva información, tengo dos alternativas enfoques. (1) Google "PHP GIS". Encontrarás algunos recursos interesantes. Tal vez uno funcionará. (2) Si sus empresas están identificadas por longitud de latitud, entonces deberá usar (1) creo. Pero, ¿hay un enfoque "más tonto"? Por ejemplo, si cada empresa está vinculada a una ciudad, utilice coordenadas de mapa simples ("K16") para identificar ciudades. O algo un poco más inteligente en cuanto a código, pero esa es la idea.

7

como ya se señaló. Las funciones trigonométricas de PHP toman radianes como parámetros.

conversiones de grado a radián de los parámetros harán el truco.es probable que desee el resultado en grados, por lo que utilice rad2deg para convertir de nuevo:

<?php 
$distance = 100; 
$earthRadius = 6371; 
$lat1 = deg2rad(-26.4853239150483); 
$lon1 = deg2rad(-49.075927734375); 
$bearing = deg2rad(0); 

$lat2 = asin(sin($lat1) * cos($distance/$earthRadius) + cos($lat1) * sin($distance/$earthRadius) * cos($bearing)); 
$lon2 = $lon1 + atan2(sin($bearing) * sin($distance/$earthRadius) * cos($lat1), cos($distance/$earthRadius) - sin($lat1) * sin($lat2)); 

echo 'LAT: ' . rad2deg($lat2) . '<br >'; 
echo 'LNG: ' . rad2deg($lon2); 
?>