检查点是否与多边形重叠
check if points overlap with polygon
我有如下数据,每天映射风暴的经纬度(我删除了日期 ID,因此它只有年和月)
lat_lonDat <- structure(list(Latitude = c(9.1, 9.15755, 9.2, 9.21496, 9.06,
8.89169, 8.84286, 9.04619, 9.3, 9.31138, 9.3, 9.45992, 9.65,
9.76127, 9.85, 9.94991, 10.05, 10.1651, 10.25, 10.2725, 10.25,
10.1887, 10.15, 10.21, 10.3, 10.3163, 10.4, 10.6962, 11, 11.0975,
11.15, 11.2587, 11.45, 11.755, 12.15, 12.615, 13.05, 13.3338,
13.55, 13.775, 14, 14.2463, 14.5, 14.765, 15, 15.1537, 15.3,
15.525, 15.75, 15.8963, 16.05, 16.2963, 16.55, 16.7062, 16.9571,
17.4192, 18.04, 18.735, 19.2, 19.7925, 20.4, 20.9275, 21.4),
Longitude = c(88.1, 87.885, 87.7, 87.5575, 87.32, 87.1017,
86.9429, 86.8625, 86.7, 86.3436, 85.95, 85.685, 85.45, 85.16,
84.9, 84.7537, 84.6, 84.315, 84, 83.7237, 83.5, 83.36, 83.25,
83.1113, 82.95, 82.7462, 82.55, 82.4213, 82.3, 82.1137, 81.95,
81.8737, 81.85, 81.8462, 81.85, 81.8475, 81.8, 81.6687, 81.5,
81.3462, 81.2, 81.0488, 80.95, 80.9599, 81, 80.9788, 80.95,
80.9724, 80.95, 80.8087, 80.6, 80.3788, 80.15, 79.9423, 79.7857,
79.6735, 79.64, 79.7275, 79.7, 79.72, 79.8, 79.9348, 80.1),
yearRef = c(1990, 1990, 1990, 1990, 1990, 1990, 1990,
1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990,
1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990,
1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990,
1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990,
1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990,
1990, 1990, 1990, 1990, 1990, 1990), monthRef = c(5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5)), class = "data.frame", row.names = c(NA, -63L))
将其绘制在 shapefile 中
library(raster)
library(sp)
library(ggplot2)
temp.shp <- getData('GADM', country = 'IND', level = 2)
ggplot() +
geom_polygon(data = temp.shp, aes(x = long, y = lat, group = group), fill = NA, colour = "black") +
geom_point(data = lat_lonDat, aes(x = Longitude, y = Latitude, colour = 'red')) +
coord_quickmap() + theme_classic()
从风暴数据中,我想提取风暴在陆地上即与多边形相交时的那些行(纬度经度)。我尝试了这里的方法:
检查点是否落在多边形 Shapefile 中
coordinates(lat_lonDat) <- ~ Latitude + Longitude
proj4string(lat_lonDat) <- proj4string(temp.shp)
over(lat_lonDat, temp.shp)
但是,我仍然得到 NA。我做错了什么?
long/lat 坐标应交换:
coordinates(lat_lonDat) <- ~ Longitude + Latitude
结果:
R> tail(over(lat_lonDat, temp.shp), 15)
GID_0 NAME_0 GID_1 NAME_1 NL_NAME_1 GID_2 NAME_2
49 IND India IND.2_1 Andhra Pradesh <NA> IND.2.5_1 Krishna
50 IND India IND.2_1 Andhra Pradesh <NA> IND.2.4_1 Guntur
51 IND India IND.2_1 Andhra Pradesh <NA> IND.2.4_1 Guntur
52 IND India IND.2_1 Andhra Pradesh <NA> IND.2.4_1 Guntur
53 IND India IND.2_1 Andhra Pradesh <NA> IND.2.4_1 Guntur
54 IND India IND.32_1 Telangana <NA> IND.32.7_1 Nalgonda
55 IND India IND.32_1 Telangana <NA> IND.32.7_1 Nalgonda
56 IND India IND.32_1 Telangana <NA> IND.32.7_1 Nalgonda
57 IND India IND.32_1 Telangana <NA> IND.32.10_1 Warangal
58 IND India IND.32_1 Telangana <NA> IND.32.1_1 Adilabad
59 IND India IND.32_1 Telangana <NA> IND.32.1_1 Adilabad
60 IND India IND.20_1 Maharashtra <NA> IND.20.8_1 Chandrapur
61 IND India IND.20_1 Maharashtra <NA> IND.20.8_1 Chandrapur
62 IND India IND.20_1 Maharashtra <NA> IND.20.5_1 Bhandara
63 IND India IND.20_1 Maharashtra <NA> IND.20.11_1 Gondiya
VARNAME_2 NL_NAME_2 TYPE_2 ENGTYPE_2 CC_2 HASC_2
49 Kistna <NA> District District <NA> IN.AD.KR
50 <NA> <NA> District District <NA> IN.AD.GU
51 <NA> <NA> District District <NA> IN.AD.GU
52 <NA> <NA> District District <NA> IN.AD.GU
53 <NA> <NA> District District <NA> IN.AD.GU
54 <NA> <NA> District District <NA> IN.TG.NA
55 <NA> <NA> District District <NA> IN.TG.NA
56 <NA> <NA> District District <NA> IN.TG.NA
57 <NA> <NA> District District <NA> IN.TG.WA
58 <NA> <NA> District District <NA> IN.TG.AD
59 <NA> <NA> District District <NA> IN.TG.AD
60 Chanda <NA> District District <NA> IN.MH.CH
61 Chanda <NA> District District <NA> IN.MH.CH
62 <NA> <NA> District District <NA> IN.MH.BH
63 <NA> <NA> District District <NA> IN.MH.GO
我有如下数据,每天映射风暴的经纬度(我删除了日期 ID,因此它只有年和月)
lat_lonDat <- structure(list(Latitude = c(9.1, 9.15755, 9.2, 9.21496, 9.06,
8.89169, 8.84286, 9.04619, 9.3, 9.31138, 9.3, 9.45992, 9.65,
9.76127, 9.85, 9.94991, 10.05, 10.1651, 10.25, 10.2725, 10.25,
10.1887, 10.15, 10.21, 10.3, 10.3163, 10.4, 10.6962, 11, 11.0975,
11.15, 11.2587, 11.45, 11.755, 12.15, 12.615, 13.05, 13.3338,
13.55, 13.775, 14, 14.2463, 14.5, 14.765, 15, 15.1537, 15.3,
15.525, 15.75, 15.8963, 16.05, 16.2963, 16.55, 16.7062, 16.9571,
17.4192, 18.04, 18.735, 19.2, 19.7925, 20.4, 20.9275, 21.4),
Longitude = c(88.1, 87.885, 87.7, 87.5575, 87.32, 87.1017,
86.9429, 86.8625, 86.7, 86.3436, 85.95, 85.685, 85.45, 85.16,
84.9, 84.7537, 84.6, 84.315, 84, 83.7237, 83.5, 83.36, 83.25,
83.1113, 82.95, 82.7462, 82.55, 82.4213, 82.3, 82.1137, 81.95,
81.8737, 81.85, 81.8462, 81.85, 81.8475, 81.8, 81.6687, 81.5,
81.3462, 81.2, 81.0488, 80.95, 80.9599, 81, 80.9788, 80.95,
80.9724, 80.95, 80.8087, 80.6, 80.3788, 80.15, 79.9423, 79.7857,
79.6735, 79.64, 79.7275, 79.7, 79.72, 79.8, 79.9348, 80.1),
yearRef = c(1990, 1990, 1990, 1990, 1990, 1990, 1990,
1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990,
1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990,
1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990,
1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990,
1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990,
1990, 1990, 1990, 1990, 1990, 1990), monthRef = c(5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5)), class = "data.frame", row.names = c(NA, -63L))
将其绘制在 shapefile 中
library(raster)
library(sp)
library(ggplot2)
temp.shp <- getData('GADM', country = 'IND', level = 2)
ggplot() +
geom_polygon(data = temp.shp, aes(x = long, y = lat, group = group), fill = NA, colour = "black") +
geom_point(data = lat_lonDat, aes(x = Longitude, y = Latitude, colour = 'red')) +
coord_quickmap() + theme_classic()
从风暴数据中,我想提取风暴在陆地上即与多边形相交时的那些行(纬度经度)。我尝试了这里的方法:
检查点是否落在多边形 Shapefile 中
coordinates(lat_lonDat) <- ~ Latitude + Longitude
proj4string(lat_lonDat) <- proj4string(temp.shp)
over(lat_lonDat, temp.shp)
但是,我仍然得到 NA。我做错了什么?
long/lat 坐标应交换:
coordinates(lat_lonDat) <- ~ Longitude + Latitude
结果:
R> tail(over(lat_lonDat, temp.shp), 15)
GID_0 NAME_0 GID_1 NAME_1 NL_NAME_1 GID_2 NAME_2
49 IND India IND.2_1 Andhra Pradesh <NA> IND.2.5_1 Krishna
50 IND India IND.2_1 Andhra Pradesh <NA> IND.2.4_1 Guntur
51 IND India IND.2_1 Andhra Pradesh <NA> IND.2.4_1 Guntur
52 IND India IND.2_1 Andhra Pradesh <NA> IND.2.4_1 Guntur
53 IND India IND.2_1 Andhra Pradesh <NA> IND.2.4_1 Guntur
54 IND India IND.32_1 Telangana <NA> IND.32.7_1 Nalgonda
55 IND India IND.32_1 Telangana <NA> IND.32.7_1 Nalgonda
56 IND India IND.32_1 Telangana <NA> IND.32.7_1 Nalgonda
57 IND India IND.32_1 Telangana <NA> IND.32.10_1 Warangal
58 IND India IND.32_1 Telangana <NA> IND.32.1_1 Adilabad
59 IND India IND.32_1 Telangana <NA> IND.32.1_1 Adilabad
60 IND India IND.20_1 Maharashtra <NA> IND.20.8_1 Chandrapur
61 IND India IND.20_1 Maharashtra <NA> IND.20.8_1 Chandrapur
62 IND India IND.20_1 Maharashtra <NA> IND.20.5_1 Bhandara
63 IND India IND.20_1 Maharashtra <NA> IND.20.11_1 Gondiya
VARNAME_2 NL_NAME_2 TYPE_2 ENGTYPE_2 CC_2 HASC_2
49 Kistna <NA> District District <NA> IN.AD.KR
50 <NA> <NA> District District <NA> IN.AD.GU
51 <NA> <NA> District District <NA> IN.AD.GU
52 <NA> <NA> District District <NA> IN.AD.GU
53 <NA> <NA> District District <NA> IN.AD.GU
54 <NA> <NA> District District <NA> IN.TG.NA
55 <NA> <NA> District District <NA> IN.TG.NA
56 <NA> <NA> District District <NA> IN.TG.NA
57 <NA> <NA> District District <NA> IN.TG.WA
58 <NA> <NA> District District <NA> IN.TG.AD
59 <NA> <NA> District District <NA> IN.TG.AD
60 Chanda <NA> District District <NA> IN.MH.CH
61 Chanda <NA> District District <NA> IN.MH.CH
62 <NA> <NA> District District <NA> IN.MH.BH
63 <NA> <NA> District District <NA> IN.MH.GO