Question

Merci à WikiLeaks, ici au Royaume-Uni, nous pouvons désormais accéder à notre longitude et de latitude coordonnées pour chaque code postal noreferrer wikileaks uk IMPORTANT codes postaux. Ne pas utiliser ces données dans les applications publiques - Il y a préoccupation que les données ont été délibérément endommagé et vous pourriez être tenu comme étant en violation du droit d'auteur. Essayez d'utiliser des données à partir d'un site open source comme cette Code postal Royaume-Uni

Maintenant, il est possible de calculer les distances entre chaque point en utilisant le calcul suivant (à l'origine du beau livre Pro Mysql):

  

La distance d entre deux points (x1, y1) et (x2, y2) peut être calculée à partir de l'équation suivante (dans la mesure où les valeurs de x sont des valeurs de latitude et y sont longitude en radians, r est le rayon de la sphère qui est 3956 en miles):

     

d = acos (sin (x1) * sin (x2) + cos (x1) * cos (x2) * cos (y2-y1)) * r

est-ce assez bon, ou devrais-je utiliser les nouveaux types de données SIG et les fonctions, et si oui, comment puis-je convertir ma longitude et de latitude pour les références du type de données de point? Je me rends compte que, parce que la Terre est pas une sphère parfaite, de sorte que le calcul de la distance que je cite ci-dessus n'est pas parfait; mais il est assez bon pour mes besoins. Serait en utilisant la nouvelle fonctionnalité SIG a) faire le calcul de la distance plus rapide b) faire le calcul de la distance plus exacte?

Était-ce utile?

La solution

Pour se concentrer sur (a):

Dans le passé, j'ai parties précalculées, stocker le lat, long, XAXIS, Yaxis et zxais, où x, y et z sont définis comme suit:

xaxis = cos(radians(Lat)) * cos(radians(Lon))
yaxis = cos(radians(Lat)) * sin(radians(Lon))
zaxis = sin(radians(Lat))

La distance peut alors être calculée en utilisant SQL vaguement comme (acos( xaxis * $xaxis + yaxis * $yaxis + zaxis * $zaxis ) * 6367.0 / 1.852) (où ceux commençant par un $ sont précalculées pour le point de départ en question de la même manière que ci-dessus)

Pré-calcul de cette manière pousse le TRIG relativement coûteux à un événement d'une fois, et simplifie la requête.

Autres conseils

Eh bien, pour répondre à votre « B » question, parce que votre équation suppose une sphère parfaite, vous allez être un peu hors (et il serait, très probablement, empirer progressivement le plus les deux points les uns des autres ). Si les comptes SIG pour cela, vous obtenez alors les calculs de distance pour être plus précis.

En ce qui concerne la conversion de lat / long à un point, je l'aurais juré que cela a été prévu dans le API Google Maps . (Voir la GLatLng référence.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top