使用纬度和经度计算距离<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 个项目,这些项目在一个或两个小时的车程内进行常规电子邮件营销活动。
回复:使用纬度和经度计算距离为什么不从这里开始呢?
插件:空间数据分析
和这里
距离工具插件
或者只需检查我附加的脚本以获取使用公式的另一个选项。
罗恩