考虑到意大利米兰地区的一组积分(纬度和经度),我想决定每个点属于哪个“邻域” 这是我试过的
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
但仍然没有结果!
答案 0 :(得分:1)
要将一两条评论转为答案,请参阅以下提示。要在两个数据集之间进行任何空间分析,它们必须共享相同的坐标参照系(CRS)。
因此要么全部在+proj=longlat
中,要么在投影的CRS中(即其中一个数据集是tmerc
,这是Transverse Mercator projection)。如问题所示,spTransform
是将几何数据从一个CRS转换为另一个CRS的好方法。
最后,如果使用+proj=longlat
,则轴顺序为笛卡儿(x y)或(长纬度)。因此,例如,使用coordinates(latlon) = ~lon+lat
。这是一个非常普遍的问题&#34;。