2010-04-19 10 views
7

Buongiorno.Aggiungi chilometri a un punto della mappa

Mi piacerebbe sapere come aggiungere chilometri a un punto della mappa (latitudine/longitudine).

Ad esempio: la città Jaraguá do Sul si trova nella latitudine -26.462049, longitudine -49.059448. Voglio aggiungere 100 chilometri su, giù e ai lati. Voglio fare un quadrato e ottenere i nuovi punti.

Come faccio?

ho provato:

<?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; 
?> 

ma è tornando cordinate sbagliate. Grazie!

Grazie mille.

+0

Le 2 risposte finora sono l'approccio generale. Ma se la precisione non è critica, E se l'area geografica di interesse è limitata - in particolare, entro una banda ristretta di latitudine - allora è possibile fondere queste funzioni. Non sarei in grado di fornire dettagli su "quanto larga banda" e "quanto imprecisione". Quindi, se l'ambito geografico è limitato, puoi semplicemente creare una tabella di ricerca :-) – Smandoli

+0

Se specifichi di più sulla tua app, sugli obiettivi finali o sugli strumenti di lavoro, potresti ricevere notizie su una soluzione specifica (ad esempio, CoreLocation per iPhone) – Smandoli

+2

Sto creando un'applicazione PHP e ho una tabella di database (città) con ogni città nel mio stato (Santa Catarina). In questa tabella, ho campi di latitudine/longitudine. L'utente entra in città e ho bisogno di creare un quadrato immaginario di 100 km per trovare le imprese vicino a lui. Mi dispiace per il mio inglese e mi dispiace per la mancanza di informazioni. Grazie ragazzi! – proveyourselfthom

risposta

1

UPDATE: funzioni trigonometriche

PHP prendere radianti come Paramters, non in gradi, quindi è necessario utilizzare deg2rad() come parametro:

sin(deg2rad($lat)) 

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


risposta originale:

un grande argomento in effetti.

A seconda della precisione richiesta (e delle distanze coperte), potrebbe essere necessario considerare che la terra non è una sfera perfetta, ma un geoide (un elissoide appiattito).

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

permette di iniziare su questo.

Mapping e la proiezione sono due argomenti si dovrebbe dare un'occhiata a, anche

un altro link da wikipedia sul tema delle distanze

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

+1

Dove è questo 'erath' di questo pianeta e come sei arrivato qui? –

+0

Ottieni appena 200 reputazione e modifica gli errori di ortografia se li trovi;) – sum1stolemyname

0

in base alla nuova informazione, ho due alternative approcci. (1) Google "GIS PHP". Troverai alcune risorse interessanti. Forse funzionerà. (2) Se le tue imprese sono identificate da latitudine longitudine, allora dovrai usare (1) penso. Ma c'è un approccio "più stupido"? Ad esempio, se ciascuna impresa è collegata a una città, utilizzare le coordinate della mappa semplice ("K16") per identificare le città. O qualcosa di un po 'più intelligente in termini di codice, ma questa è l'idea.

7

come già indicato. Le funzioni trigonometriche PHP prendono i radianti come parametri.

conversioni da gradi a radianti dei parametri faranno il trucco.probabilmente vuoi il risultato in gradi, quindi usa rad2deg per riconvertire:

<?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); 
?>