Cálculo de distancia usando latitud y longitud<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />¿Alguien tiene idea de cómo calcular la distancia entre los estados de los EE. UU. usando el código postal o la latitud y la longitud?
Re: Cálculo de distancia usando latitud y longitudHola @ron_horne
¡Gracias por su respuesta rápida!
Trabajé un poco más con el guión y descubrí que la culpa estaba de mi parte. Logré calcular las distancias sin problema.
¡Muchas gracias!
Re: Cálculo de distancia usando latitud y longitudHola @MerGrung ,
si puede publicar una muestra de los datos y el script que está utilizando, podemos arreglarlo por usted.
de lo contrario, es difícil saber cuál es el origen del error.
una cosa que probablemente haya cambiado desde 2016 es la referencia a los datos de muestra. en mi guión original tenía una referencia a JMP11 x86. si está utilizando una versión posterior, seguramente le dará un mensaje de error.
Re: Cálculo de distancia usando latitud y longitudHola @ron_horne ,
Traté de usar este script para calcular distancias, pero recibí un mensaje de error cuando lo intenté. Dado que el guión es de 2016, ¿quizás algunas cosas hayan cambiado?
Se agradecerá una actualización del script.
Re: Cálculo de distancia usando latitud y longitudHola @mjvincent87 y @jenkins_macedo
otra forma de hacerlo es con la fórmula de columna en una tabla de datos. prueba el siguiente script
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: Cálculo de distancia usando latitud y longitudHola @mjvincent87
eche un vistazo a este script y avíseme si es la dirección que está pensando:
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] )
);
Mejor,
Ron
Re: Cálculo de distancia usando latitud y longitudIncreíble colección de fórmulas:
http://www.movable-type.co.uk/scripts/latlong.html
Re: Cálculo de distancia usando latitud y longitud¡Otro agradecimiento a ron_horne!Solo un par de preguntas:
Solo quiero confirmar que la salida es millas terrestres, ¿correcto?
Además, ¿tiene un script para llevar entre dos coordenadas?
Re: Cálculo de distancia usando latitud y longitudHola ron_horne y espero que lo estés haciendo bien. Sé que esto ha tomado algún tiempo desde la última vez que hablamos en este hilo. El proyecto se suspendió y ahora está en funcionamiento y, en unas pocas semanas, nuestro equipo de campaña implementará la mesa resultante en producción.
¡Apliqué el script y funcionó perfectamente como se esperaba! ¡¡Gran trabajo!!
Como sabe, el script calcula la distancia entre pares de (HH Lat. y HH Long.) a (PS Lat y PS Long.), que es lo que originalmente se diseñó para capturar el proyecto. He usado la distancia resultante para calcular el tiempo que le tomará a cada hogar asistir a uno de nuestros programas que se encuentra a 1, 3 o 5 horas de distancia de sus hogares.
Ahora, el problema es que me gustaría hacer un script para calcular la distancia entre cada par de Lat. y largo.
Por ejemplo:
En la siguiente tabla, calculé la distancia y el tiempo entre los pares de la fila 1 de Lat. & Largo. Que es perfecto!! eso servirá para las 20 filas que dan 20 distancias únicas entre la ubicación del hogar y el destino del programa.
Entonces, en la fila 1, el programa # 15896 con PS Lat. 56.47 N & PS Largo. 132.38 S está a cierta distancia del Hogar cuyo HH Lat. & HH Largo.
Dado que queremos saber la distancia de cada hogar desde cada programa #, ¿cómo puedo calcular, de modo que JMP capture la distancia entre cada hogar Lat y Long a través de cada programa Lat y Long y no solo el primer programa? En esta tabla, tengo 20 filas, usando lo que he descrito, deberíamos tener un cálculo de distancia de diferencia de 400 en lugar de solo 20. ¿Conoces una manera de evitar esto?
Mi tabla de datos HH original tiene 156,737 registros de hogares únicos con sus respectivas lat. HH. & HH Largo. El archivo Hogar tiene 15.655 HH Lat únicos. & HH Largo.
La tabla de datos del programa con 2747 números de programa únicos con 329 PS Lat. únicos. & PD largo. Quiero calcular la distancia desde cada hogar único Lat. & Long a cada programa único Lat. & Long., de modo que la distancia se calcula en cada programa. Eso será 15.655 *329 y la tabla resultante o la distancia total debe ser de unos 5.150.495 registros.

Re: Cálculo de distancia usando latitud y longitudGracias ron_horne . Ya os contaré el resultado una vez que lo pruebe. ¡Pero creo que se ve genial! Gran transmisión
Re: Cálculo de distancia usando latitud y longitudHola jenkins.macedo ,
mi guión original calculó la distancia entre dos filas consecutivas en kilómetros.
ahora lo he modificado para producir la distancia en millas para cada fila.
prueba esto en tu mesa
Borrar Globales () ;
Nombres predeterminados hasta aquí ( 1 ) ;
// referencia la tabla de datos
dt = tabla de datos actual () ;
// introduce la columna con la distancia a actualizar en la tabla de puntos
dt << añadir varias columnas ( "Distancia" , 1 , después ( 6 ) , numérico ) ;
// extrae los valores de longitud y latitud de la tabla - como radianes
HHx = ( Columna ( dt , "Longitud HH" ) << obtener valores ) * Pi () / 180 ;
HH = ( Columna ( dt , "Latitud HH" ) << obtener valores ) * Pi () / 180 ;
psx = ( Columna ( dt , "Longitud PS" ) << obtener valores ) * Pi () / 180 ;
PD = ( Columna ( dt , "Latitud PS" ) << obtener valores ) * Pi () / 180 ;
// declara la función de cálculo en Millas
haversine = Función ( { largo1 , lat1 , largo2 , lat2 , R = 6371 } ,
{ Local predeterminado } ,
a = Pecado ( ( lat1 - lat2 ) / 2 ) ^ 2 + Porque ( lat1 ) * Porque ( lat2 ) * Pecado ( ( largo1 - largo2 ) / 2 ) ^ 2 ;
C = 2 * Un bronceado ( a ^ 0.5 , ( 1 - a ) ^ 0.5 ) ;
d = ( R * C ) * 0.6213712 ;// millas
) ;
esperar ( 0.01 ) ;
// ejecuta la función a lo largo de las filas de la tabla
Para ( i = 1 , i <= Fila N ( dt ) - 1 , i ++,
dt : distancia [ i ] = haversine ( HHx [ i ] , HH [ i ] , psx [ i ] , PD [ i ] )
) ;
Re: Cálculo de distancia usando latitud y longitudHola ron_horne Intenté usar su secuencia de comandos "Distancia al siguiente" para calcular la distancia entre dos pares de coordenadas Lat y Long, pero la secuencia de comandos no funciona o tal vez no estoy haciendo algo bien. Se adjuntan las primeras 20 filas de la tabla table. Quisiera saber la distancia (en millas) entre HH Lat y HH Long a PS Lat y PS long. Creo que una vez que puedo ajustar la fórmula a mis datos, puede ser más rápido. No estoy tan seguro de cómo funcionaría la herramienta de distancia aquí, ya que me pregunto si tengo que dibujar una línea para cada coordenada, ya que eso llevaría demasiado tiempo ya que mi tabla tiene más de 2 millones de filas o si se puede automatizar. Usé Mapping: JMP Geocoder para generar las coordenadas a continuación. ¿Cómo lo harías? ron_horne ¿O alguien más los personaliza en Distancia al siguiente guión publicado anteriormente? Cualquier ayuda sería apreciada. Gracias
Alguna información de las siguientes variables:
Código postal: es el hogar coincidente (HH) con el código postal de inicio de programa (PS).
Número de programa: estos números reflejan los programas que ofrecemos para los cuales nos gustaría promocionar a los hogares dentro del mismo código postal de programa a hogar.
HH Latitude: Latitud asociada con el código postal del hogar
Longitud HH: Longitud asociada con el código postal del hogar
PS Latitude: Latitud asociada con el código postal de inicio del programa. Esa es la ubicación donde comenzó el programa.
Longitud PS: Longitud asociada al código postal de inicio del programa. Esa es la ubicación donde comenzó el programa.

Re: Cálculo de distancia usando latitud y longitud¡Excelente! Gracias ron_horne . Inicialmente comencé a usar el Geocoder-Map. Pero también veo que tenía SDA. También descargué la herramienta Distancia. Todo muy bien. Lo que estoy tratando de hacer es bastante simple y directo. Usando la ubicación por Ciudad y Estado- ( código postal/coordenadas geográficas) de nuestros programas y el código postal de los hogares en nuestras bases de datos. Estoy desarrollando un archivo simple que muestra los programas que están a menos de 50 millas de su residencia en comparación con los que están a 100 millas y le propuse al equipo de campaña 2 o 3 programas que están dentro de una o dos horas en automóvil para una campaña de marketing por correo electrónico de rutina en función de sus intereses anteriores.
Re: Cálculo de distancia usando latitud y longitud¿Por qué no empezar aquí?
Complemento: análisis de datos espaciales
y aquí
Complemento de herramienta de distancia
o simplemente revise mi script adjunto para ver otra opción usando una fórmula.
Ron