Calcul de la distance à l'aide de la latitude et de la longitude<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Quelqu'un a-t-il une idée de la façon de calculer la distance entre les États des États-Unis en utilisant soit le code postal, soit la latitude et la longitude ?
Re : Calcul de la distance à l'aide de la latitude et de la longitudeSalut @ron_horne
Merci pour votre réponse rapide!
J'ai travaillé un peu plus sur le script et j'ai découvert que la faute était de mon côté. J'ai réussi à calculer les distances sans problème.
Merci beaucoup!
Re : Calcul de la distance à l'aide de la latitude et de la longitudeSalut @MerGrung ,
si vous pouvez publier un échantillon des données et du script que vous utilisez, nous pouvons le réparer pour vous.
sinon, il est difficile de dire quelle est la source de l'erreur.
une chose qui a très probablement changé depuis 2016 est la référence aux données de l'échantillon. dans mon script original, il y avait une référence à JMP11 x86. si vous utilisez une version plus récente, un message d'erreur s'affichera à coup sûr.
Re : Calcul de la distance à l'aide de la latitude et de la longitudeSalut @ron_horne ,
J'ai essayé d'utiliser ce script pour calculer les distances, mais j'ai eu un message d'erreur lorsque j'ai essayé. Puisque le script date de 2016, peut-être que certaines choses ont changé ?
Une mise à jour du script sera appréciée.
Re : Calcul de la distance à l'aide de la latitude et de la longitudeSalut @mjvincent87 et @jenkins_macedo
une autre façon de procéder consiste à utiliser une formule de colonne dans une table de données. essayez le script suivant
Clear Globals();
Names Default To Here( 1 );
// Open data file
dt = Open( "$SAMPLE_DATA/Cities.jmp" );
// add column for distance
dt << New Column( "latrad", formula( :Latitude * (Pi() / 180) ) );
dt << New Column( "longrad", formula( :Longitude * (Pi() / 180) ) );
dt << New Column( "Distance", Numeric,
formula(
6371.00 * 2 * ATan(
(Sin( (:latrad - Lag( :latrad, -1 )) / 2 ) ^ 2 + Cos( :latrad ) * Cos( Lag( :latrad, -1 ) ) * Sin( (:longrad - Lag( :longrad, -1 )) / 2 )
^ 2) ^ 0.5,
(1 - (Sin( (:latrad - Lag( :latrad, -1 )) / 2 ) ^ 2 + Cos( :latrad ) * Cos( Lag( :latrad, -1 ) ) * Sin(
(:longrad - Lag( :longrad, -1 )) / 2
) ^ 2)) ^ 0.5
)
)
);
dt << New Column( "Bearing", Numeric, "Continuous", Format( "Latitude DMS", "PUNSGN", 15, 0 ),
formula(
brng = Mod(
((ATan(
Sin( Lag( :longrad, -1 ) - :longrad ) * Cos( Lag( :latrad, -1 ) ),
Cos( :latrad ) * Sin( Lag( :latrad, -1 ) ) - Sin( :latrad ) * Cos( Lag( :latrad, -1 ) ) * Cos( Lag( :longrad, -1 ) - :longrad )
)) * 180 / Pi()) + 360,
360
)
)
);
Re : Calcul de la distance à l'aide de la latitude et de la longitudeSalut @mjvincent87
jetez un oeil à ce script et faites-moi savoir si c'est la direction à laquelle vous pensez:
Clear Globals();
Names Default To Here( 1 );
// open data file (dots) - this includes the observation we want to update
dt = Open( "$SAMPLE_DATA/Hurricanes.jmp" );
// introduce the column with the distance to be updated in the dots table
dots << New column ( "Distance", Numeric );
// introduce the column with the distance to be updated in the dots table
Dots << New Column("Bearing", Numeric, "Continuous", Format("Latitude DMS", "PUNSGN", 15, 0));
// extract the longitude and the latitude values from the table - as radians
x = (Column( dots, "Longitude" ) << getValues) * Pi() / 180 ;
y = (Column( dots, "Latitude" ) << getValues) * Pi() / 180 ;
// declare the distance calculation function in KM based on world radius of 6371 KM.
// For statute miles multiply final distance d by 0.621371.
// For nautical miles multiply final distance d by 0.539957
haversine = Function( {long1, lat1, long2, lat2, R = 6371.009},
{Default Local},
a = Sin( (lat1 - lat2) / 2 ) ^ 2 + Cos( lat1 ) * Cos( lat2 ) * Sin( (long1 - long2) / 2 ) ^ 2;
c = 2 * ATan( a ^ 0.5, (1 - a) ^ 0.5 );
d = R * c // *0.621371 For statute miles;
);
wait (0.01);
// run the function along the rows of the table
For( i = 1, i <= N Row( dots ) - 1, i++,
dots:distance[i] = haversine( x[i], y[i], x[i + 1], y[i + 1] )
);
// Declare the Bearing calculation function
Bearing = function ({long1, lat1, long2, lat2 },
{Default Local},
abc = sin (long2 - long1) * cos (lat2);
def = cos (lat1) * sin (lat2) - sin (lat1) *cos (lat2) * cos (long2 - long1) ;
brng = mod (( (atan ( abc, def )) * 180 / pi() ) + 360 , 360) ;
);
wait (0.01);
// run the Bearing function along the rows of the table
For( i = 1, i <= N Row( dots ) - 1, i++,
dots:Bearing[i] = Bearing( x[i], y[i], x[i + 1], y[i + 1] )
);
Meilleur,
Ron
Re : Calcul de la distance à l'aide de la latitude et de la longitudeIncroyable collection de formules:
http://www.movable-type.co.uk/scripts/latlong.html
Re : Calcul de la distance à l'aide de la latitude et de la longitudeUn autre merci à ron_horne !Juste quelques questions :
Je veux juste confirmer que la sortie est en milles terrestres, n'est-ce pas ?
Aussi, avez-vous un script pour le relèvement entre deux coordonnées ?
Re : Calcul de la distance à l'aide de la latitude et de la longitudeSalut ron_horne et j'espère que tu vas bien. Je sais que cela a pris du temps depuis la dernière fois que nous avons discuté sur ce fil. Le projet a été mis en attente et il est maintenant opérationnel et dans quelques semaines environ, le tableau résultant sera déployé en production par notre équipe de campagne.
J'ai appliqué le script et cela a parfaitement fonctionné comme prévu !! Bon travail!!
Comme vous le savez, le script calcule la distance entre les paires de (HH Lat. et HH Long.) à (PS Lat et PS Long.), ce qui était à l'origine ce que le projet était conçu pour capturer. J'ai utilisé la distance résultante pour calculer le temps qu'il faudra à chaque ménage pour assister à l'un de nos programmes qui se trouve à 1, 3 ou 5 heures de chez lui.
Maintenant, le problème est que je voudrais écrire un script pour calculer la distance entre chaque paire de Lat. et Longue.
Par exemple:
Dans le tableau ci-dessous, j'ai calculé la distance et le temps entre les paires de ligne 1 de Lat. & Long. Ce qui est parfait !! cela suffira pour les 20 lignes donnant 20 distances uniques entre l'emplacement du ménage et la destination du programme.
Ainsi, dans la ligne 1, le programme # 15896 avec PS Lat. 56,47 N et PS longue. 132.38 S est une certaine distance du ménage dont HH Lat. & HH Long.
Étant donné que nous voulons connaître la distance de chaque ménage à chaque numéro de programme, comment puis-je calculer, de sorte que JMP capture la distance entre chaque ménage Lat et Long à travers chaque programme Lat et Long et pas seulement le premier programme ? Dans ce tableau, j'ai 20 lignes, en utilisant ce que j'ai décrit, nous devrions avoir 400 calculs de distance de différence au lieu de seulement 20. Connaissez-vous un moyen de contourner cela?
Mon tableau de données HH original contient 156 737 enregistrements de ménages uniques avec leur HH Lat respectif. & HH Long. Le fichier Ménage a 15 655 HH Lat uniques. & HH Long.
Le tableau de données de programme avec 2 747 numéros de programme uniques avec 329 PS Lat uniques. & PS longue. Je veux calculer la distance de chaque ménage unique Lat. & Long à chaque programme unique Lat. & Long., de sorte que la distance est calculée sur chaque programme. Ce sera 15 655 * 329 et la table résultante ou la distance totale devrait être d'environ 5 150 495 enregistrements.

Re : Calcul de la distance à l'aide de la latitude et de la longitudeMerci ron_horne . Je vous tiendrai au courant du résultat une fois que j'aurai essayé. Mais je trouve que ça a l'air super ! Grosse taxe
Re : Calcul de la distance à l'aide de la latitude et de la longitudeSalut jenkins.macedo ,
mon script d'origine calculait la distance entre deux lignes consécutives en kilomètres.
Je l'ai maintenant modifié pour produire la distance en miles pour chaque ligne.
essayez ceci sur votre table
Effacer les variables globales () ;
Noms par défaut ici ( 1 ) ;
// référence la table de données
dt = tableau de données actuel () ;
// introduit la colonne avec la distance à mettre à jour dans le tableau des points
dt << ajouter plusieurs colonnes ( "Distance" , 1 , après ( 6 ) , numérique ) ;
// extrait les valeurs de longitude et de latitude de la table - en radians
HHx = ( Colonne ( dt , "HH Longitude" ) << getValues ) * Pi () / 180 ;
HHy = ( Colonne ( dt , "HH Latitude" ) << getValues ) * Pi () / 180 ;
PSx = ( Colonne ( dt , "PS Longitude" ) << getValues ) * Pi () / 180 ;
PSy = ( Colonne ( dt , "PS Latitude" ) << getValues ) * Pi () / 180 ;
// déclarer la fonction de calcul en Miles
haversine = Fonction ( { longue1 , lat1 , long2 , lat2 , R = 6371 } ,
{ Locale par défaut } ,
un = Péché ( ( lat1 - lat2 ) / 2 ) ^ 2 + Parce que ( lat1 ) * Parce que ( lat2 ) * Péché ( ( longue1 - longue2 ) / 2 ) ^ 2 ;
c = 2 * Un bronzage ( un ^ 0,5 , ( 1 - un ) ^ 0,5 ) ;
d = ( R * c ) * 0,6213712 ;// milles
) ;
attendez ( 0,01 ) ;
// exécute la fonction le long des lignes du tableau
Pour ( je = 1 , je <= N rangée ( dt ) - 1 , je ++,
dt : distance [ je ] = haversine ( HHx [ je ] , HHy [ je ] , PSx [ je ] , PSy [ je ] )
) ;
Re : Calcul de la distance à l'aide de la latitude et de la longitudeSalut ron_horne J'ai essayé d'utiliser votre script "Distance to next" pour calculer la distance entre deux paires de coordonnées Lat et Long, mais le script ne fonctionne pas ou peut-être que je ne fais pas quelque chose de bien. Ci-joint les 20 premières lignes du tableau table. Je voudrais connaître la distance (en miles) entre HH Lat et HH Long à PS Lat et PS long. Je pense qu'une fois que je peux obtenir la formule adaptée à mes données, cela peut être plus rapide. Je ne sais pas trop comment l'outil Distance fonctionnerait ici car je me demande si je dois tracer une ligne pour chaque coordonnée car cela prendrait trop de temps car ma table a plus de 2 millions de lignes ou si cela peut être automatisé. J'ai utilisé le Mapping: JMP Geocoder pour générer les coordonnées ci-dessous. Comment feriez-vous ron_horne ou quelqu'un d'autre les personnalise-t-il dans Distance au prochain script publié précédemment ? Toute aide serait appréciée. Merci
Quelques informations sur les variables ci-dessous :
Code postal : correspond au ménage (HH) correspondant au code postal de début de programme (PS).
Numéro de programme : ces chiffres reflètent les programmes que nous proposons pour lesquels nous aimerions faire la promotion auprès des foyers appartenant au même code postal de programme à foyer.
HH Latitude : Latitude associée au code postal du foyer
HH Longitude : Longitude associée au code postal du foyer
PS Latitude : Latitude associée au code postal de démarrage du programme. C'est l'endroit où le programme a commencé.
PS Longitude : Longitude associée au code postal de début du programme. C'est l'endroit où le programme a commencé.

Re : Calcul de la distance à l'aide de la latitude et de la longitudeSuper! Merci ron_horne . J'ai d'abord commencé à utiliser Geocoder-Map. Mais je vois aussi que j'avais SDA. J'ai également téléchargé l'outil de distance. Tout est plutôt cool. Ce que j'essaie de faire est assez simple et direct. Utilisation de l'emplacement par ville et état- ( code postal/coordonnées géographiques) de nos programmes et le code postal des foyers dans nos bases de données. Je développe un fichier simple qui compare les programmes situés à moins de 50 miles de leur résidence à ceux qui sont à 100 miles et propose à l'équipe de campagne 2 à 3 programmes qui se trouvent à moins d'une heure ou deux de route pour une campagne de marketing par e-mail de routine basée sur leurs intérêts précédents.
Re : Calcul de la distance à l'aide de la latitude et de la longitudepourquoi ne pas commencer ici?
Complément : Analyse des données spatiales
et ici
Complément d'outil de distance
ou vérifiez simplement mon script ci-joint pour une autre option en utilisant une formule.
Ron