将经纬度分配给邮政编码

4
我在R中有一个数据框,其中包含纬度和经度点。使用R数据科学工具包,我可以将这些点分配到国家/州/县/城市/选区/社区,这非常有用。
我想在R或Python中将这些点分配到5位邮政编码(甚至是9位邮政编码!)。 有简单的方法吗?
编辑:我找到了一个包含邮政编码边界的文件。 不幸的是,它是一个.lpk文件。 我该如何将其导入R?
编辑2:我找到了一个形状文件,这将更容易处理。

2
尝试在R中使用zipcode包,它具有全面的5位邮政编码列表。这是一个链接,其中包含有关其内容的简短描述- http://www.r-bloggers.com/my-first-r-package-zipcode/ - Ramnath
1
@Ramnath:如果不需要精度,那么这将很有效。但基本上,由于它包含质心,您将被迫将每个邮政编码视为一个圆。这取决于他的需求是什么。 - Ari B. Friedman
@Ramnath:给定一个经纬度点,如何使用zipcode包将其分配到邮政编码?我的直觉是使用距离公式找到最近的邮政编码中心,但直觉常常是错误的... - Zach
@Zach:在taRifx中有一个pointDistPairwise函数,然后你可以取其中的最小值。但是请仔细考虑这是否是你真正想要做的。邮政编码不是圆形的! - Ari B. Friedman
@gsk3:感谢您的提示。我想我会从一个shapefile开始。 - Zach
2个回答

5
  1. 在某个地方找到一个zip代码的shapefile(.shp格式,有时称为ArcGIS Shapefiles)。

  2. 使用maptools包的readShapePoly命令将其加载到R中。

  3. 创建一个SpatialPointsDataFrame来保存这些点。

  4. 确保您的投影是正确的。

  5. 使用sp包的overlay命令将点叠加到多边形中。

您可能会发现taRifx包中的cleanLatLon很有帮助。


我在哪里可以找到邮政编码的形状文件?如何确保我的投影是正确的?就像我说的,现在我只有一系列的纬度/经度点,没有相关的投影... - Zach
投影: 只要你的shapefile是在经纬度下,那就没问题。否则你需要将它们投影到相同的格式。当你有了一个shapefile并且需要投影时,请编辑你的帖子,我会发布更多细节。 Shapefile: 在这里尝试http://www.cartotalk.com/index.php?showtopic=4416。另外,许多大学图书馆都有ESRI Maps&Data光盘,因为它们随附于站点许可证。 - Ari B. Friedman
好的,我在这里找到了一个shapefile文件。我该如何将其导入R中?它是一个.lpk文件:http://www.arcgis.com/home/item.html?id=8d2012a2016e484dafaac0451f9aea24 - Zach
你可能需要一个 .SHP 文件或将其转换为 .SHP 格式。不确定 LPK 是否只是 .shp 的包装器或其他什么……抱歉 :-( 如果你可以访问 ArcGIS 的副本,那么你很可能可以在那里完成它。 - Ari B. Friedman
1
@Zach,请将有关导入.lpk文件的问题转化为正式问题。这不应该在评论中讨论。将其作为问题发布将有助于以后搜索相同内容的其他人。如果它只是一个评论,那么很容易被忽略。 - JD Long
@JD Long:我编辑了我的问题。请告诉我是否可行。 - Zach

3

我运行了gsk3编写的代码,效果非常好。以下是具体的代码。为了参考,我还包含了我的latlong数据框的str。

> # Shape files found here by state: http://www.census.gov/geo/www/cob/z52000.html#shp
> 
> library(maptools)
> library(maps)
> 
> zip.map <- readShapePoly("zt48_d00.shp")
> latlong <- read.csv("latlong.csv")
> str(latlong)
'data.frame':   2102 obs. of  3 variables:
 $ ref : Factor w/ 1594 levels ...
 $ lat : num  32.9 32.9 32.9 32.9 32.9 ...
 $ long: num  -96.7 -96.7 -96.7 -96.7 -96.7 ...
> coordinates(latlong) = ~long+lat
> write.csv(cbind(latlong, overlay(zip.map,latlong)),"zip.match.csv" )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接