Domanda

Ho appena sviluppato una distanza calcolatrice codice postale per la mia azienda papà, dove tutti i nostri clienti sono tenuti in archivio e ogni volta che un nuovo cliente potenziale fa una richiesta il sistema verificherà contro i codici postali di tutti gli altri clienti. Il problema è che non ha ancora fare il calcolo della distanza. Digitando in un codice postale DT1 con il set di distanza 5 miglia dice che DT1, 2 e 3 si trovano nelle vicinanze. DT2 dice DT1 e 2, DT3 dice DT1, 3 e 4. Questo non ha alcun senso. Eppure, se ho messo in BH2 con una distanza di 50 miglia che porterà indietro Bournemouth, Dorchester, Portsmouth, Bath, Southampton e un paio di altre città. Questi sono tutti corretti - però io non so cosa sta succedendo con i codici postali DT. DT11 non riportare alcuna (sotto 5 miglia), né DT10 (tranne che per se stessi).

I innanzitutto utilizzata la radice di (x * x + y * y) - Credo che questo è chiamato Pitagora teorema .. non è sicuro dato che sono passati anni da quando ho usato quel termine !!

Ho anche provato il seguente:

  $sinstuff = sin(deg2rad($latitude))*sin(deg2rad($latitude2));
  $cosstuff = cos(deg2rad($latitude))*cos(deg2rad($latitude2))*cos(deg2rad($longitude-$longitude2));
  $sumstuff = $sinstuff + $cosstuff;
  $acosstuff = rad2deg(acos($sumstuff));
  $distance = $acosstuff*60*1.1515; //dunno what the 60 and 1.1515 is all about - I got this formula off a website.

Questa è la formula che sembra essere il fanalino di risultati strani. Ho anche notato che la distanza esatta tra DT11 e DT11 è qualcosa come +/- ,00,000989 millions {e un sacco di altri numeri}. Questo sembra anche un po 'strano dato, sicuramente, la distanza tra il DT11 e si è 0 ...

Qualcuno ha mai fatto niente di simile con successo prima?

Ho una serie enorme di file - circa 158MB in totale - che contiene ogni codice postale del Regno Unito in pieno, con la sua latitudine e longitudine corrispondenti. Il mio obiettivo è, piuttosto che confrontando il codice postale completo specificato ad ogni altro codice postale completo, per capire quale prefissi sono meno di una certa distanza quindi confrontare il codice postale specificato a tutti i codici di avviamento postale completo, che sono all'interno di queste aree. È questo efficiente? C'è un modo più efficiente?

Qualsiasi aiuto con questo sarebbe molto apprezzato.

Saluti,

Richard

PS So che ci sono alcuni siti là fuori che permettono di capire come lavorare le distanze, ma io non sembrano essere in grado di ottenere qualsiasi di loro lavorano in modo corretto (come si può dire dall'alto).

PPS so che posso utilizzare l'API di Google per questo - ma questa non è un'opzione in quanto questo sta per essere un'applicazione offline in esecuzione su un'installazione locale di server di WAMP. E 'per l'uso in occasione di fiere in cui non possiamo garantire una connessione internet.

È stato utile?

Soluzione

Non Sei utilizzo della formula dell'emisenoverso:

$ l1 ==> latitude1
$ O1 ==> Longitudine1
$ L2 ==> latitude2
$ O2 ==> longitude2

(tratto da http://www.go4expert.com/forums/ showthread.php? t = 339 )

function haversine ($l1, $o1, $l2, $o2)
{
$l1 = deg2rad ($l1);
$sinl1 = sin ($l1);
$l2 = deg2rad ($l2);
$o1 = deg2rad ($o1);
$o2 = deg2rad ($o2);
return (7926 - 26 * $sinl1) * asin (min (1, 0.707106781186548 * sqrt ((1 - (sin ($l2) * $sinl1) - cos ($l1) * cos ($l2) * cos ($o2 - $o1)))));
}

Questo dovrebbe darvi la distanza tra i due punti.

Altri suggerimenti

Credo che le Poste mantiene un file di CAP-Indirizzo cui liste ogni Regno Unito codice postale e il suo indirizzo associato (non so se ha Lattitude e longitudine informazioni). Ho visto copie di questo (forse non completamente aggiornata) su dischi di copertura con diverse riviste specializzate nel passato. Sono sicuro che si deve pagare per l'ultima versione, ma si potrebbe essere in grado di ottenere un punto di partenza controllando le rondelle di copertura dalla parte posteriore problemi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top