给定一个Shapefile,了解一个点是

时间:2016-05-12 16:00:07

标签: r gis geocoding shapefile point-in-polygon

考虑到意大利米兰地区的一组积分(纬度和经度),我想决定每个点属于哪个“邻域” 这是我试过的

library(shapefiles)
library(maptools)
library(maps)
library(sp)
library(rgdal)

mn.zip.map <- readShapePoly("NILZone.shp") #shape file that contains the shapes of the neighborhoods

#latlon inizialization and declaration

latlon$lat<-data$latitude
latlon$lon<-data$longitude

#at this point I have a data frame with N rows and 2 columns

coordinates(latlon) = ~lat+lon

所以我的第一个猜测是:

over(latlon, mn.zip.map)

当我尝试

时,当然是失败了
summary(mn.zip.map)
Object of class SpatialPolygonsDataFrame
Coordinates:
      min     max
x 1503202 1521750
y 5025952 5042528
Is projected: NA 
proj4string : [NA]
Data attributes: ....

     summary(latlon)
Object of class SpatialPoints
Coordinates:
          min       max
lat 45.391091 45.534113
lon  9.046796  9.274482
Is projected: NA 
proj4string : [NA]
Number of points: 155226

所以我尝试的是:

 map<-readOGR(dsn="C:...",layer="NILZone") #wHERE I FOUND THE RIGHT PARAMETERS TO CRS

 coordinates(latlon) = ~lat+lon
 proj4string(mn.zip.map) <- CRS("+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996       +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs ")
 mn.zip.map <- spTransform(mn.zip.map, CRS("+proj=longlat"))
 proj4string(latlon) <- CRS(proj4string(mn.zip.map))
 head(over(latlon, mn.zip.map))

     FID_1 FID_1_1 ID_NIL  NIL AreaHA AreaMQ
 1    NA      NA     NA <NA>     NA     NA
 2    NA      NA     NA <NA>     NA     NA
 3    NA      NA     NA <NA>     NA     NA
 4    NA      NA     NA <NA>     NA     NA
 5    NA      NA     NA <NA>     NA     NA
 6    NA      NA     NA <NA>     NA     NA

猜测为什么会发生这种情况?

非常感谢,对不起这个很长的问题感到抱歉!

编辑:在这里你可以下载一个archive.zip,其中包含几个形状的文件和米兰社区的其他信息,以及一个文件latlon.txt,其坐标为30分,我有兴趣将其分类到一个社区

https://www.dropbox.com/s/l935nm3edhn5cc7/Archive.zip?dl=0

@ G.Cocca我改变了CRS(...)的参数,现在区域应该重叠!

mn.zip.map@bbox
    min       max
 x  9.040939  9.278398
 y 45.386074 45.535303

 latlon@bbox
      min       max
 lat 45.391091 45.534113
 lon  9.046796  9.274482

但仍然没有结果!

1 个答案:

答案 0 :(得分:1)

要将一两条评论转为答案,请参阅以下提示。要在两个数据集之间进行任何空间分析,它们必须共享相同的坐标参照系(CRS)。

因此要么全部在+proj=longlat中,要么在投影的CRS中(即其中一个数据集是tmerc,这是Transverse Mercator projection)。如问题所示,spTransform是将几何数据从一个CRS转换为另一个CRS的好方法。

最后,如果使用+proj=longlat,则轴顺序为笛卡儿(x y)或(长纬度)。因此,例如,使用coordinates(latlon) = ~lon+lat。这是一个非常普遍的问题&#34;。