从包含多边形/区域和点(纬度,经度)的shapefile中,找出每个点属于哪个多边形/区域?在R中 [英] From a shapefile with polygons/areas, and points (lat,lon), figure out which polygon/area each point belongs to? In R

查看:246
本文介绍了从包含多边形/区域和点(纬度,经度)的shapefile中,找出每个点属于哪个多边形/区域?在R中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在给定一组点和一个shapefile的情况下,我试图确定给定点属于哪个多边形(ZCTA ...也称为邮政编码模拟).尽管这里有几个此类问题,但几乎所有问题似乎都将我引向了QGIS.虽然我将根据需要去学习另一个工具,但是在R中有没有简单的方法可以做到这一点?我在R环境中很有经验,而在GIS领域则没有.

I am trying to identify which polygon (ZCTA... aka Zip Code analogue) a given point belongs in, given a set of points and a shapefile. While there are several questions of this type out there, nearly all seem to refer me toward QGIS. While I'll go and learn another tool if needed, is there a simple way to do this in R? I'm experienced in the R environment... not so much in the GIS space.

我正在使用的shapefile位于此处: ftp://ftp.gisdata.mn.gov /pub/gdrs/data/pub/us_mn_state_mngeo/bdry_zip_code_tabulation_areas/shp_bdry_zip_code_tabulation_areas.zip

The shapefile I am using is located here: ftp://ftp.gisdata.mn.gov/pub/gdrs/data/pub/us_mn_state_mngeo/bdry_zip_code_tabulation_areas/shp_bdry_zip_code_tabulation_areas.zip

我的第一次尝试是将shapefile加载为SpatialPolygonsDataFrame,将点加载为SpatialPointsDataFrame,然后使用"over()"来获取匹配的多边形的标记:

My first attempt was to load the shapefile as a SpatialPolygonsDataFrame, the points as a SpatialPointsDataFrame, then use "over()" to get the indicies of the polygons that match:

library(maptools)
library(maps)
library(sp)

mn.zip.map <- readShapePoly("zip_code_tabulation_areas.shp")
# The shapefile is the one referenced in the link above

latlon <- data.frame(matrix(0,nrow=2,ncol=1))
latlon$lat <- c(44.730178, 44.784711)
latlon$lon <- c(-93.235381, -93.476415)
latlon[1] <- NULL
coordinates(latlon) = ~lon+lat
indices <- over(latlon, mn.zip.map)

有结果:

> indices
ZCTA5CE10 GEOID10 CLASSFP10 MTFCC10 FUNCSTAT10 ALAND10 AWATER10 INTPTLAT10 INTPTLON10
1      <NA>    <NA>      <NA>    <NA>       <NA>      NA       NA       <NA>       <NA>
2      <NA>    <NA>      <NA>    <NA>       <NA>      NA       NA       <NA>       <NA>
      Shape_Leng Shape_Area
1         NA         NA
2         NA         NA

我希望第一行输出ZCTA5CE10 == 55124,第二行输出ZCTA5CE10 ==55379.但是,显然这没有发生.

I was hoping to have the first line output ZCTA5CE10 == 55124 and the second line output ZCTA5CE10 == 55379. However, clearly this isn't happening.

似乎 好像坐标系没有对齐...但是它们都应该是Lat/Lon,对吧?

It seems like the coordinate systems are not aligned... but they should both be Lat / Lon, right?

我在这里想念什么?预先感谢.

What am I missing here? Thanks in advance.

推荐答案

我认为您必须设置和调整投影:

I think you have to set and adjust the projection:

library(rgdal)
proj4string(mn.zip.map) <- CRS("+proj=utm +zone=15 +datum=NAD83")
mn.zip.map <- spTransform(mn.zip.map, CRS("+proj=longlat"))
proj4string(latlon) <- CRS(proj4string(mn.zip.map))
over(latlon, mn.zip.map)
#   ZCTA5CE10 GEOID10 CLASSFP10 MTFCC10 FUNCSTAT10   ALAND10 AWATER10  INTPTLAT10   INTPTLON10 Shape_Leng Shape_Area
# 1     55124   55124        B5   G6350          S  43572536  1759018 +44.7394617 -093.1938424   27059.59   45295591
# 2     55379   55379        B5   G6350          S 152635134  6181840 +44.7539755 -093.5146083   86609.93  158696544

这篇关于从包含多边形/区域和点(纬度,经度)的shapefile中,找出每个点属于哪个多边形/区域?在R中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆