Entfernungsberechnung anhand von Breiten- und Längengrad<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hat jemand eine Idee, wie man die Entfernung zwischen Bundesstaaten in den USA anhand der Postleitzahl oder des Breiten- und Längengrads berechnen kann?
Betreff: Entfernungsberechnung anhand von Breiten- und LängengradHallo @ron_horne
Danke für deine schnelle Antwort!
Ich arbeitete etwas mehr am Drehbuch und stellte fest, dass der Fehler auf meiner Seite lag. Ich konnte die Entfernungen problemlos berechnen.
Vielen Dank!
Betreff: Entfernungsberechnung anhand von Breiten- und LängengradHallo @MerGrung ,
Wenn Sie ein Beispiel der Daten und des von Ihnen verwendeten Skripts veröffentlichen können, können wir das Problem für Sie beheben.
Andernfalls ist es schwierig, die Fehlerquelle zu ermitteln.
Eine Sache, die sich seit 2016 höchstwahrscheinlich geändert hat, ist der Verweis auf die Beispieldaten. In meinem ursprünglichen Skript gab es einen Verweis auf JMP11 x86. Wenn Sie eine neuere Version verwenden, erhalten Sie mit Sicherheit eine Fehlermeldung.
Betreff: Entfernungsberechnung anhand von Breiten- und LängengradHallo @ron_horne ,
Ich habe versucht, dieses Skript zum Berechnen von Entfernungen zu verwenden, aber beim Versuch wurde eine Fehlermeldung angezeigt. Da das Drehbuch aus dem Jahr 2016 stammt, haben sich vielleicht einige Dinge geändert?
Wir freuen uns über eine Aktualisierung des Skripts.
Betreff: Entfernungsberechnung anhand von Breiten- und LängengradHallo @mjvincent87 Und @jenkins_macedo
Eine andere Möglichkeit, dies zu tun, ist die Spaltenformel in einer Datentabelle. Probieren Sie das folgende Skript aus
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
)
)
);
Betreff: Entfernungsberechnung anhand von Breiten- und LängengradHallo @mjvincent87
Schauen Sie sich dieses Skript an und lassen Sie mich wissen, ob es die Richtung ist, an die Sie denken:
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] )
);
Am besten,
Ron
Betreff: Entfernungsberechnung anhand von Breiten- und LängengradErstaunliche Formelsammlung:
http://www.movable-type.co.uk/scripts/latlong.html
Betreff: Entfernungsberechnung anhand von Breiten- und LängengradNochmals vielen Dank an ron_horne!Nur ein paar Fragen:
Ich möchte nur bestätigen, dass es sich bei der Ausgabe um gesetzlich vorgeschriebene Meilen handelt, richtig?
Haben Sie außerdem ein Skript für die Peilung zwischen zwei Koordinaten?
Betreff: Entfernungsberechnung anhand von Breiten- und LängengradHallo ron_horne und ich hoffe, es geht dir gut. Ich weiß, dass es einige Zeit gedauert hat, seit wir uns das letzte Mal in diesem Thread unterhalten haben. Das Projekt wurde auf Eis gelegt und ist nun in Betrieb. In einigen Wochen wird der resultierende Tisch von unserem Kampagnenteam in der Produktion eingesetzt.
Ich habe das Skript angewendet und es hat wie erwartet perfekt funktioniert!! Gut gemacht!!
Wie Sie wissen, berechnet das Skript den Abstand zwischen Paaren von (HH Lat. und HH Long.) zu (PS Lat. und PS Long.), was ursprünglich im Projekt erfasst werden sollte. Ich habe die resultierende Entfernung verwendet, um die Zeit zu berechnen, die jeder Haushalt benötigt, um an einem unserer Programme teilzunehmen, der 1, 3 oder 5 Stunden von seinem Zuhause entfernt ist.
Das Problem besteht nun darin, dass ich ein Skript erstellen möchte, um den Abstand zwischen den einzelnen Lat-Paaren zu berechnen. und lang.
Zum Beispiel:
In der folgenden Tabelle habe ich den Abstand und die Zeit zwischen Lat-Paaren in Zeile 1 berechnet. & Lang. Was perfekt ist!! Dies reicht für alle 20 Zeilen und ergibt 20 eindeutige Entfernungen zwischen dem Standort des Haushalts und dem Ziel des Programms.
Also, in Zeile 1 das Programm # 15896 mit PS Lat. 56,47 N & PS lang. 132,38 S ist eine bestimmte Entfernung vom Haushalt, dessen HH Lat. & HH Lang.
Da wir die Entfernung jedes Haushalts zu jeder Programmnummer wissen möchten, wie kann ich das so berechnen, dass JMP die Entfernung zwischen den Breiten- und Längengraden jedes Haushalts über alle Breiten- und Längengrade jedes Programms und nicht nur für das erste Programm erfasst? In dieser Tabelle habe ich 20 Zeilen. Mit dem, was ich beschrieben habe, sollten wir eine Differenzentfernungsberechnung von 400 statt nur 20 haben. Kennen Sie einen Weg, dies zu umgehen?
Meine ursprüngliche HH-Datentabelle enthält 156.737 eindeutige Haushaltsdatensätze mit ihrem jeweiligen HH-Lat. & HH Lang. Die Haushaltsdatei enthält 15.655 eindeutige HH Lat. & HH Lang.
Die Programmdatentabelle mit 2.747 eindeutigen Programmnummern mit 329 eindeutigen PS Lat. & PS lang. Ich möchte die Entfernung von jedem einzelnen Haushalt Lat berechnen. & Long zu jedem einzelnen Programm Lat. & Long., so dass die Distanz über jedes Programm hinweg berechnet wird. Das sind 15.655 *329 und die resultierende Tabelle bzw. die Gesamtdistanz sollte etwa 5.150.495 Datensätze betragen.

Betreff: Entfernungsberechnung anhand von Breiten- und LängengradDanke ron_horne . Ich werde Ihnen das Ergebnis mitteilen, sobald ich es ausprobiert habe. Aber ich finde, es sieht toll aus! Großer Tx
Betreff: Entfernungsberechnung anhand von Breiten- und LängengradHi jenkins.macedo ,
Mein ursprüngliches Skript hat den Abstand zwischen zwei aufeinanderfolgenden Reihen in Kilometern berechnet.
Ich habe es jetzt geändert, um die Meilenentfernung für jede Zeile anzuzeigen.
Probieren Sie es auf Ihrem Tisch aus
Globale löschen () ;
Namen standardmäßig hier ( 1 ) ;
// Referenzieren Sie die Datentabelle
dt = aktuelle Datentabelle () ;
// Füge die Spalte mit dem zu aktualisierenden Abstand in die Punktetabelle ein
dt << mehrere Spalten hinzufügen ( "Distanz" , 1 , nach ( 6 ) , numerisch ) ;
// Extrahieren Sie die Längen- und Breitengrade aus der Tabelle – im Bogenmaß
HHx = ( Spalte ( dt , „HH Längengrad“ ) << getValues ) * Pi () / 180 ;
HHy = ( Spalte ( dt , „HH Latitude“ ) << getValues ) * Pi () / 180 ;
PSx = ( Spalte ( dt , „PS Längengrad“ ) << getValues ) * Pi () / 180 ;
PSy = ( Spalte ( dt , „PS Latitude“ ) << getValues ) * Pi () / 180 ;
// Deklariere die Berechnungsfunktion in Meilen
Haversine = Funktion ( { lang1 , lat1 , lang2 , lat2 , R = 6371 } ,
{ Standardmäßig lokal } ,
A = Sünde ( ( lat1 - lat2 ) / 2 ) ^ 2 + Cos ( lat1 ) * Cos ( lat2 ) * Sünde ( ( lang1 - lang2 ) / 2 ) ^ 2 ;
C = 2 * Eine Lohe ( A ^ 0,5 , ( 1 - A ) ^ 0,5 ) ;
D = ( R * C ) * 0,6213712 ;// Meilen
) ;
Warten ( 0,01 ) ;
// Führen Sie die Funktion entlang der Zeilen der Tabelle aus
Für ( ich = 1 , ich <= N-Reihe ( dt ) - 1 , ich ++,
dt : Distanz [ ich ] = Haversine ( HHx [ ich ] , HHy [ ich ] , PSx [ ich ] , PSy [ ich ] )
) ;
Betreff: Entfernungsberechnung anhand von Breiten- und LängengradHallo ron_horne Ich habe versucht, mit Ihrem „Distance to next“-Skript den Abstand zwischen zwei Paaren von Lat- und Long-Koordinaten zu berechnen, aber das Skript funktioniert nicht oder vielleicht mache ich etwas nicht richtig. Im Anhang finden Sie die ersten 20 Zeilen der Tabelle. Ich möchte den Abstand (in Meilen) zwischen HH Lat und HH Long zu PS Lat und PS Long wissen. Ich denke, sobald ich die Formel an meine Daten angepasst habe, kann es schneller gehen. Ich bin mir nicht so sicher, wie das Distanzwerkzeug hier funktionieren würde, da ich mich frage, ob ich für jede Koordinate eine Linie zeichnen muss, da das zu viel Zeit in Anspruch nehmen würde, da meine Tabelle über 2 Millionen Zeilen hat, oder ob das automatisiert werden kann. Ich habe den Mapping: JMP Geocoder verwendet, um die folgenden Koordinaten zu generieren. Wie würdest du ron_horne Oder passen Sie diese sonst noch in „Abstand zum nächsten zuvor veröffentlichten Skript“ an? Jede Hilfe wäre dankbar. Danke
Einige Informationen zu den folgenden Variablen:
Postleitzahl: ist der übereinstimmende Haushalt (HH) mit der Progra Start-Postleitzahl (PS).
Programmnummer: Diese Nummern spiegeln die von uns angebotenen Programme wider, für die wir Haushalte innerhalb derselben Programm-zu-Haushalt-Postleitzahl bewerben möchten.
HH Breitengrad: Breitengrad, der der Postleitzahl des Haushalts zugeordnet ist
HH Längengrad: Mit der Postleitzahl des Haushalts verknüpfter Längengrad
PS Latitude: Mit der Postleitzahl des Programmstarts verknüpfter Breitengrad. Das ist der Ort, an dem das Programm gestartet wurde.
PS-Längengrad: Längengrad, der mit der Postleitzahl des Programmstarts verknüpft ist. Das ist der Ort, an dem das Programm gestartet wurde.

Betreff: Entfernungsberechnung anhand von Breiten- und LängengradGroßartig! Danke ron_horne . Ich habe zunächst mit der Geocoder-Map begonnen. Aber ich sehe auch, dass ich SDA hatte. Ich habe auch das Distance Tool heruntergeladen. Alles ziemlich cool. Was ich versuche, ist ziemlich einfach und unkompliziert. Verwenden des Standorts nach Stadt und Bundesland- ( Postleitzahl/geografische Koordinaten) unserer Programme und die Postleitzahl der Haushalte in unseren Datenbanken. Ich entwickle eine einfache Datei, die zeigt, dass Programme, die weniger als 50 Meilen von ihrem Wohnort entfernt sind, mit denen verglichen werden, die 100 Meilen entfernt sind, und schlage dem Kampagnenteam 2 bis 3 Programme vor, die entweder innerhalb einer oder zwei Stunden Autofahrt entfernt sind, für eine routinemäßige E-Mail-Marketingkampagne basierend auf ihren bisherigen Interessen.
Betreff: Entfernungsberechnung anhand von Breiten- und LängengradWarum nicht hier anfangen?
Add-In: Raumdatenanalyse
und hier
Distanzwerkzeug-Add-In
Oder schauen Sie einfach in meinem angehängten Skript nach einer anderen Option, die eine Formel verwendet.
Ron