使用緯度和經度計算距離<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />有誰知道如何使用郵政編碼或緯度和經度計算美國各州之間的距離?
回复:使用緯度和經度計算距離你好@ron_horne
感謝您的快速回复!
我對劇本進行了更多的研究,發現錯誤在我這邊。 我毫無問題地計算出距離。
非常感謝!
回复:使用緯度和經度計算距離你好@MerGrung ,
如果您可以發布數據示例和您正在使用的腳本,我們可以為您修復它。
否則,很難判斷錯誤的根源是什麼。
自 2016 年以來最有可能發生變化的一件事是對樣本數據的引用。在我的原始腳本中,它引用了 JMP11 x86。如果您使用的是更高版本,它肯定會給您一條錯誤消息。
回复:使用緯度和經度計算距離你好@ron_horne ,
我嘗試使用此腳本來計算距離,但嘗試時出現錯誤消息。 由於劇本是2016年的,也許有些東西已經改變了?
腳本的更新將不勝感激。
回复:使用緯度和經度計算距離你好@mjvincent87和@jenkins_macedo
另一種方法是使用數據表中的列公式。嘗試以下腳本
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
)
)
);
回复:使用緯度和經度計算距離你好@mjvincent87
看看這個腳本,讓我知道這是否是您正在考慮的方向:
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] )
);
最好的,
羅恩
回复:使用緯度和經度計算距離驚人的公式集合:
http://www.movable-type.co.uk/scripts/latlong.html
回复:使用緯度和經度計算距離再次感謝 ron_horne!只是幾個問題:
只是想確認輸出是法定英里,對嗎?
另外,你有兩個坐標之間的軸承腳本嗎?
回复:使用緯度和經度計算距離你好羅恩霍恩我希望你一切都好。 我知道自從我們上次在此線程上聊天以來已經花了一些時間。 該項目已被擱置,現在已啟動並運行,大約幾週後,我們的活動團隊將在生產中部署生成的表。
我確實應用了該腳本,並且它按預期完美運行! 做得好!!
如您所知,該腳本計算(HH 緯度和 HH 經度)與(PS 緯度和 PS 經度)對之間的距離,這正是該項目最初設計要捕獲的距離。 我使用所得的距離來計算每個家庭參加距其家 1、3 或 5 小時路程的某個項目所需的時間。
現在的問題是我想編寫腳本來計算每對緯度之間的距離。和長。
例如:
在下表中,我計算了第 1 行緯度對之間的距離和時間。 & 長的。 這是完美的!這將適用於所有 20 行,從而給出家庭位置與程序目的地之間的 20 個唯一距離。
因此,在第 1 行中,程序#15896 帶有 PS Lat。 56.47 N 和 PS 長。 132.38 S 距離 HH Lat 的家庭有一定距離。 &HH 長。
由於我們想知道每個家庭與每個節目 # 的距離,我該如何計算,以便 JMP 捕獲每個家庭經緯度與每個節目緯度和經度之間的距離,而不僅僅是第一個節目? 在這個表中,我有 20 行,使用我所描述的內容,我們應該有 400 個差異距離計算,而不是只有 20 個。 你知道解決這個問題的方法嗎?
我的原始 HH 數據表有 156,737 個獨特的家庭記錄及其各自的 HH 緯度。 &HH 長。 家庭檔案有 15,655 個獨特的 HH Lat。 &HH 長。
節目數據表包含 2,747 個獨特的節目編號和 329 個獨特的 PS Lat。 &PS長。 我想計算距每個獨特家庭緯度的距離。 & 長到每個獨特的節目緯度。 & Long.,這樣就可以計算每個程序的距離。 這將是 15,655 *329,結果表或總距離應約為 5,150,495 條記錄。

回复:使用緯度和經度計算距離謝謝羅恩霍恩。 一旦我嘗試過,我會讓你知道結果。 但我覺得它看起來很棒! 大交易
回复:使用緯度和經度計算距離你好詹金斯·馬塞多,
我原來的腳本計算了連續兩行之間的距離(以公里為單位)。
我現在對其進行了修改,以生成每行的英里距離。
在你的桌子上試試這個
清除全局變量() ;
名稱默認為此處( 1 ) ;
//引用數據表
dt =當前數據表() ;
// 在dots表中引入要更新距離的列
dt <<添加多列( “距離” , 1 ,後( 6 ) ,數字) ;
// 從表中提取經度和緯度值 - 以弧度表示
赫赫克斯= (柱子( dt , “HH 經度” ) <<獲取值) *圓周率() / 180 ;
哈伊= (柱子( dt , “HH 緯度” ) <<獲取值) *圓周率() / 180 ;
聚苯乙烯= (柱子( dt , “PS 經度” ) <<獲取值) *圓周率() / 180 ;
聚苯乙烯= (柱子( dt , “PS 緯度” ) <<獲取值) *圓周率() / 180 ;
// 聲明以英里為單位的計算函數
半正矢=功能( {長1 ,緯度1 ,長2 ,緯度2 ,右= 6371 } ,
{默認本地} ,
A =罪( (緯度1 -緯度2 ) / 2 ) ^ 2 +科斯(緯度1 ) *科斯(緯度2 ) *罪( (長1 -長2 ) / 2 ) ^ 2 ;
C = 2 *曬黑( A ^ 0.5 , ( 1 - A ) ^ 0.5 ) ;
d = (右* C ) * 0.6213712 ;// 英里
) ;
等待( 0.01 ) ;
// 沿著表的行運行該函數
為了(我= 1 ,我<= N 行( dt ) - 1 ,我++,
dt :距離[我] =半正矢(赫赫克斯[我] ,哈伊[我] ,聚苯乙烯[我] ,聚苯乙烯[我] )
) ;
回复:使用緯度和經度計算距離你好羅恩霍恩我嘗試使用“到下一個的距離”腳本來計算兩對緯度和經度坐標之間的距離,但該腳本不起作用,或者也許我沒有做正確的事情。 附上table表格的前20行。 我想知道 HH 緯度和 HH 長到 PS 緯度和 PS 長之間的距離(以英里為單位)。 我認為一旦我能夠將公式適合我的數據,它就會更快。 我不太確定距離工具在這裡如何工作,因為我想知道是否必須為每個坐標繪製一條線,因為這會花費太多時間,因為我的表有超過 200 萬行,或者可以自動化嗎? 我使用 Mapping: JMP Geocoder 生成下面的坐標。 你會怎樣羅恩霍恩或者其他人在距離之前發布的下一個腳本中自定義這些? 任何幫助,將不勝感激。 謝謝
以下變量的一些信息:
郵政編碼:是與 Progra Start 郵政編碼 (PS) 相匹配的家庭 (HH)。
計劃編號:這些數字反映了我們提供的計劃,我們希望向具有相同計劃到家庭郵政編碼的家庭推廣這些計劃。
HH 緯度:與家庭郵政編碼相關的緯度
HH 經度:與家庭郵政編碼相關的經度
PS 緯度:與節目起始郵政編碼相關的緯度。 那是程序開始的位置。
PS 經度:與程序起始郵政編碼相關的經度。 那是程序開始的位置。

回复:使用緯度和經度計算距離偉大的! 謝謝羅恩霍恩。 我最初開始使用地理編碼器地圖。 但我也看到我有 SDA。 我還下載了距離工具。 一切都很酷。 我想做的事情非常簡單直接。 按城市和州使用位置 - (郵政編碼/地理坐標)我們的計劃以及我們數據庫中家庭的郵政編碼。 我正在開發一個簡單的文件,其中顯示了距其住所 50 英里以內的項目與 100 英里以內的項目的比較,並根據他們之前的興趣向活動團隊提出了 2 到 3 個項目,這些項目在一個或兩個小時的車程內進行常規電子郵件營銷活動。
回复:使用緯度和經度計算距離為什麼不從這裡開始呢?
插件:空間數據分析
和這裡
距離工具插件
或者只需檢查我附加的腳本以獲取使用公式的另一個選項。
羅恩