Si vous avez besoin de prendre la courbure de la terre en compte, le Grand Cercle, la distance est ce que vous cherchez. L'article de Wikipedia sans doute fait un meilleur travail en expliquant comment la formule fonctionne que moi, et il y a aussi cette aviation formulaire de la page qui couvre qui va plus dans le détail.
Les formules ne sont que la première partie de l'énigme, si vous avez besoin de faire ce travail pour arbitraire des villes, vous aurez besoin de l'emplacement de la base de données pour obtenir les coordonnées lat/long. Heureusement, vous pouvez l'obtenir gratuitement à partir de Geonames.orgbien qu'il y a des db est disponible (demander à google). Donc, en général, regardez les deux villes que vous souhaitez, obtenir les coordonnées lat/long co-orinates et branchez-le dans la formule que la Wikipédia Travaillé Exemple.
Autres suggestions:
Pour une pleine solution commerciale,
il y a PC Miler qui est utilisé
par de nombreuses entreprises de camionnage pour
calculer les tarifs d'expédition.
Effectuer des appels vers les Cartes de Google (ou d'autres) de l'api. Si vous avez besoin de faire beaucoup de demandes par jour, envisager la mise en cache des résultats sur le serveur.
Aussi très important est à envisager la construction d'une équivalence de la base de données pour les villes, les banlieues, les villes etc. si vous pensez que vous aurez jamais besoin de regrouper vos données. Cela devient vraiment compliqué, et vous ne pouvez pas trouver un one-size-fits-all solution à votre problème.
C'est très facile à faire avec la géographie type dans SQL Server 2008.
SELECT geography::Point(lat1, lon1, 4326).STDistance(geography::Point(lat2, lon2, 4326))
-- computes distance in meters using eliptical model, accurate to the mm
SRID 4326 est pour WGS84 elipsoidal Terre modèle
1
Ca vous utilisez le * algorithme pour trouver le plus court chemin entre ces deux villes et de cette façon vous aurez la distance.
1
Si vous parlez à propos de la distance la plus courte entre deux villes sur une vraie sphérique de la planète, comme la Terre, vous voulez le distance orthodromique.
1
Si vous travaillez dans l'avion et que vous souhaitez le La distance euclidienne "comme l'oiseau":
//Cities are points x0,y0 and x1,y1 in kilometers or miles or Smoots[1]
dx = x1 - x0;
dy = y1 - y0;
dist = sqrt(dx*dx + dy*y);
Pas de trigonométrie nécessaire! Juste le Le théorème de pythagore et le fait que les places sont toujours positifs de sorte que vous n'avez pas besoin dx = abs(x1 - x0), etc. pour obtenir un nombre positif pour passer à sqrt().
Notez que vous pouvez probablement le faire en une seule ligne et un compilateur probablement réduire l'équivalent de code ci-dessus:
Vous trouverez les coordonnées Lat/Lon de la ville, puis utilisez une distance de l'algorithme d'estimation de coordonnées de latitude/Longitude.
0
si vous avez besoin d'un exemple de code, je pense avoir un j'ai pu creuser jusqu'à la maison, mais comme beaucoup de la réponse à la question précédente, vous avez besoin d'un long /lat db à faire le calcul
0
Il est préférable d'utiliser un tableau pour l'obtention de la distance entre les deux villes.
Ce sens, car
* La Formule pour calculer la distance ais assez gourmand en ressources..
* La Distance entre les villes est peu susceptible de changer.
Donc, sauf si vous avez besoins sont très spécifiques (comme le terrain de la cartographie à partir d'un satellite ou de certains ou de la topographie d'un algorithme ou d'autre chose), vous devriez vraiment juste enregistrer la liste des villes et les distances entre eux, dans un tableau et de le regarder comme nécessaire.
0
J'ai fait beaucoup de travail avec cette récemment. Je suis la recherche SQL2008 les nouvelles fonctionnalités de vraiment rendre cela facile. Je peux trouver tous les points qui sont à l'intérieur Xkm de 100k enregistrer table sous-deuxième temps...pas trop mal.
Le grand cercle (hypothèse sphérique) méthode dans mes tests est d'environ 2,5 km, comparativement à la vincenty formule (elipsoidal hypothèse, qui est que la terre est).
Le vrai truc c'est d'avoir la lat et long..pour que je suis en utilisant Google.
0
@Jared - une petite correction à votre exemple de code. La dernière ligne du premier exemple de code doit lire:
dist = sqrt(dx*dx + dy*dy);
0
Je suis d'accord qu'une fois que vous avez l'info, si ça ne va pas changer, de le stocker quelque sorte. @Marko Tinto Merci pour le T-SQL de l'échantillon. Pour ceux qui n'ont pas accès à SQL Server ou préfère une autre méthode: Si vous avez besoin d'une grande précision, découvrez Wikipedia inscription sur la Vincenty algorithme pour plus d'info. Je crois qu'il existe un js mise en œuvre, qui serait (si pas déjà fait) être facilement transférées à d'autres langues. Aussi, au bas de la page est un lien vers geographicLibqui est censé pour être 1000 fois plus précis que le Vincenty algorithme (si vous avez des données que bon, il serait peut importe).
Pourquoi voudriez-vous d'utiliser quelque chose comme le Vincenty méthode? Parce que la terre n'est pas une sphère parfaite et des méthodes similaires qui permettent de saisir plus de précision majeures et mineures de l'axe pour la modélisation de la terre.
Si vous avez besoin de prendre la courbure de la terre en compte, le Grand Cercle, la distance est ce que vous cherchez. L'article de Wikipedia sans doute fait un meilleur travail en expliquant comment la formule fonctionne que moi, et il y a aussi cette aviation formulaire de la page qui couvre qui va plus dans le détail.
Les formules ne sont que la première partie de l'énigme, si vous avez besoin de faire ce travail pour arbitraire des villes, vous aurez besoin de l'emplacement de la base de données pour obtenir les coordonnées lat/long. Heureusement, vous pouvez l'obtenir gratuitement à partir de Geonames.orgbien qu'il y a des db est disponible (demander à google). Donc, en général, regardez les deux villes que vous souhaitez, obtenir les coordonnées lat/long co-orinates et branchez-le dans la formule que la Wikipédia Travaillé Exemple.
Autres suggestions:
il y a PC Miler qui est utilisé
par de nombreuses entreprises de camionnage pour
calculer les tarifs d'expédition.
Dernier mais non le moins, Joel a écrit un article sur ce problème pendant un certain temps, donc, ici, vous allez: Nouvelle Fonctionnalité: La Recherche D'Emploi
Vous utilisez le Haversine formule.
C'est très facile à faire avec la géographie type dans SQL Server 2008.
SRID 4326 est pour WGS84 elipsoidal Terre modèle
Ca vous utilisez le * algorithme pour trouver le plus court chemin entre ces deux villes et de cette façon vous aurez la distance.
Si vous parlez à propos de la distance la plus courte entre deux villes sur une vraie sphérique de la planète, comme la Terre, vous voulez le distance orthodromique.
Si vous travaillez dans l'avion et que vous souhaitez le La distance euclidienne "comme l'oiseau":
Pas de trigonométrie nécessaire! Juste le Le théorème de pythagore et le fait que les places sont toujours positifs de sorte que vous n'avez pas besoin dx = abs(x1 - x0), etc. pour obtenir un nombre positif pour passer à sqrt().
Notez que vous pouvez probablement le faire en une seule ligne et un compilateur probablement réduire l'équivalent de code ci-dessus:
[1] http://en.wikipedia.org/wiki/Smoot
Vous pouvez obtenir la distance entre deux villes de google map api.
Voici une implémentation en Python
Exemple de lien: https://gist.github.com/sarathsp06/cf063e47bcc515b51c84
Vous trouverez les coordonnées Lat/Lon de la ville, puis utilisez une distance de l'algorithme d'estimation de coordonnées de latitude/Longitude.
si vous avez besoin d'un exemple de code, je pense avoir un j'ai pu creuser jusqu'à la maison, mais comme beaucoup de la réponse à la question précédente, vous avez besoin d'un long /lat db à faire le calcul
Il est préférable d'utiliser un tableau pour l'obtention de la distance entre les deux villes.
Ce sens, car
* La Formule pour calculer la distance ais assez gourmand en ressources..
* La Distance entre les villes est peu susceptible de changer.
Donc, sauf si vous avez besoins sont très spécifiques (comme le terrain de la cartographie à partir d'un satellite ou de certains ou de la topographie d'un algorithme ou d'autre chose), vous devriez vraiment juste enregistrer la liste des villes et les distances entre eux, dans un tableau et de le regarder comme nécessaire.
J'ai fait beaucoup de travail avec cette récemment. Je suis la recherche SQL2008 les nouvelles fonctionnalités de vraiment rendre cela facile. Je peux trouver tous les points qui sont à l'intérieur Xkm de 100k enregistrer table sous-deuxième temps...pas trop mal.
Le grand cercle (hypothèse sphérique) méthode dans mes tests est d'environ 2,5 km, comparativement à la vincenty formule (elipsoidal hypothèse, qui est que la terre est).
Le vrai truc c'est d'avoir la lat et long..pour que je suis en utilisant Google.
@Jared - une petite correction à votre exemple de code. La dernière ligne du premier exemple de code doit lire:
Je suis d'accord qu'une fois que vous avez l'info, si ça ne va pas changer, de le stocker quelque sorte. @Marko Tinto Merci pour le T-SQL de l'échantillon. Pour ceux qui n'ont pas accès à SQL Server ou préfère une autre méthode: Si vous avez besoin d'une grande précision, découvrez Wikipedia inscription sur la Vincenty algorithme pour plus d'info. Je crois qu'il existe un js mise en œuvre, qui serait (si pas déjà fait) être facilement transférées à d'autres langues. Aussi, au bas de la page est un lien vers geographicLibqui est censé pour être 1000 fois plus précis que le Vincenty algorithme (si vous avez des données que bon, il serait peut importe).
Pourquoi voudriez-vous d'utiliser quelque chose comme le Vincenty méthode? Parce que la terre n'est pas une sphère parfaite et des méthodes similaires qui permettent de saisir plus de précision majeures et mineures de l'axe pour la modélisation de la terre.
- je utiliser distancy
si simple et propre