为了账号安全,请及时绑定邮箱和手机立即绑定

如何计算两个 ZIP 之间的距离?

如何计算两个 ZIP 之间的距离?

慕田峪9158850 2021-06-10 14:01:12
我有一个美国邮政编码列表,我必须计算所有邮政编码点之间的距离。它是一个 6k ZIP 的长列表,每个实体都有 ZIP、城市、州、纬度、经度、面积和人口。所以,我必须计算所有点之间的距离,即;6000C2 组合。这是我的数据示例我已经在 SAS 中尝试过这个,但它太慢且效率低下,因此我正在寻找一种使用 Python 或 R 的方法。任何线索将不胜感激。
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

在 SAS 中,使用GEODIST函数.

GEODIST 函数

返回两个纬度和经度坐标之间的大地距离。

语法

GEODIST(latitude-1, longitude-1, latitude-2, longitude-2 <, options>)


查看完整回答
反对 回复 2021-06-16
?
撒科打诨

TA贡献1934条经验 获得超2个赞

R解决方案

#sample data: first three rows of data provided

df <- data.frame( zip = c( "00501", "00544", "00601" ),

                  longitude = c( -73.045075, -73.045147, -66.750909 ),

                  latitude = c( 40.816799, 40.817225, 18.181189 ),

                  stringsAsFactors = FALSE )


library( sf ) 


#create a spatial data.frame

spdf <- st_as_sf( x = df, 

                  coords = c( "longitude", "latitude"), 

                  crs = "+proj=longlat +datum=WGS84" )


#create the distance matrix (in meters), round to 0 decimals

m <- round( st_distance( spdf ), digits = 0 )


#set row and column names of matrix

colnames( m ) <- df$zip

rownames( m ) <- df$zip


#show distance matrix in meters


# Units: m

#         00501   00544   00601

# 00501       0      48 2580481

# 00544      48       0 2580528

# 00601 2580481 2580528       0


查看完整回答
反对 回复 2021-06-16
  • 3 回答
  • 0 关注
  • 249 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信