如何使用R中的sf包

信息世界|2019年12月19日

通过本教程了解如何在R中进行GIS计算,以查找美国地址的邮政编码。

版权©2019足球竞彩网下载

嗨。我是IDG的Sharon Machlis,这里是《多做R:多边形中的点》的第39集。

计算一个点属于哪个多边形有各种各样的用途。例如,这将增强那些告诉你在哪里投票或谁是议员的应用程序的功能。在本集中,我将使用多边形中的点来回答一个简单的问题:街道地址的邮编是多少?

我们只需要三样东西。1)一种对地址进行地理编码以获取其经纬度的方法。2)概述邮政编码边界的Shapefiles,和3)sf包。

对于地理编码,我通常使用geocode-i-o API。它每天可以免费查找2500次,但是需要一个API密钥才能使用它。为了解决这个视频的复杂性,我将使用免费的开源开放街道地图API。它不需要钥匙。tmaptools包有一个使用该API的函数geocode_OSM()。

让我们开始编码。

我将加载我想要的包:sf、tmaptools以及tmap和dplyr。接下来,我将创建一个包含两个地址的向量:位于马萨诸塞州弗莱明汉的IDG办公室,位于Old Connecticut Path上;以及RStudio在波士顿的办公室。然后我将对它们进行地理编码。

对于邮政编码边界,美国人口普查局有一个针对整个美国的“邮政编码制表区”文件。这是一个相当大的文件。相反,我去censusreporter.org上搜索了马萨诸塞州的邮政编码区域的数据并下载了下来。

为了节省时间,我已经完成了下载。(注意:您也可以使用tigris包下载一个Census shapefile。)

我可以手动解压我下载的文件,但在R中更容易,这里我使用基本R的解压()函数。junkpaths = TRUE参数说我不想解压缩添加另一个基于zip文件名称的子目录。

好了,最后是一些地理空间方面的工作。我将使用sf的st_read()函数将shapefile导入到R中。

看看控制台。这里显示了一些信息,其中至少有一个数据点是重要的:“e.p.s.g”。这说明了创建文件时使用的坐标参考系统。这里是4326。在不深入研究这些杂草的情况下,e.p.s.g.基本上给出了用于将三维球体(地球)上的区域转换为二维坐标(经纬度)的系统。这很重要,因为有很多不同的坐标参考系。我想我的邮政编码多边形和我的地址点使用相同的,所以他们正确地排列。

这个文件碰巧包含了整个马萨诸塞州的一个多边形,我不需要它。因此,我将用dplyr::filter()过滤掉马萨诸塞行。

下面这段代码不是必需的,但是它可以很好地检查我的shapefile:我使用tmap的qtm()快速绘制了我的邮政编码sf对象的一个图(用于快速主题地图)。看起来我的几何图形对于邮政编码是有意义的。

现在我想使用地理编码地址数据。这是我第一次开始使用sf时遇到的一个问题。现在,纬度和经度存储在一个普通的数据帧中。但这需要转换成一个科幻地理空间对象-与正确的坐标系。

我可以使用sf的st_as_sf()函数来实现这一点。(操作空间数据的sf函数通常以st_开头。如果你想知道,它代表“空间”和“时间”)。

st_as_sf()接受几个参数。在这段代码中,第一个参数是要转换的对象,即我的地理编码地址。其次,我告诉sf哪些列具有x(经度)和y(纬度)值。第三,我将坐标参考系统设置为4326,因此它与我的邮政编码多边形相同。

现在我已经设置了两个数据集,计算每个地址的邮政编码超级简单:我只使用sf的st_join()函数。它使用以下语法:point sf对象、polygon sf对象和join类型。在本例中,我首先在地理编码点上运行st_join(),然后在邮政编码多边形上运行。这个顺序意味着所有的点都包括在内,但只有匹配的邮政编码。我的连接类型是st_within。

就是这样!现在,如果我看我的结果,你可以看到邮政编码被分配到两个地址。

如果您想映射它,这里是使用tmap的方法。

这就是本期节目的全部内容,感谢收看!想了解更多关于R的技巧,请访问go。infoworld。com网站上的Do more With R页面,除R外都是小写字母
你也可以在YouTube IDG技术谈话频道找到更多关于R的播放列表——在那里你可以订阅,这样你就不会错过任何一集。希望下次能见到你!
IDG.tv的精选视频