简体   繁体   中英

R maps - Filter coordinates out when plotting points in map

I have a large data frame of events locations (longitude, latitude). See a sample below:

events <- structure(list(lat = c(45.464944, 40.559207, 45.956775, 44.782831, 45.810287, 35.913357, 43.423855, 45.2359, 45.526025, 41.91371, 46.340833, 40.696482, 42.367164, 41.913701, 41.89167, 46.046206, 41.108316, 45.514132, 45.688118, 37.090387, 43.446555, 41.913712, 46.614833, 45.368825, 41.892168), lon = c(9.163453, 8.321587, 12.983347, 10.886471, 9.077844, 10.560439, 6.768272, 9.23176, 9.375761, 12.466994, 6.889444, 17.316925, 13.352248, 12.466992, 12.516713, 14.497758, 16.871019, 12.056176, 9.176543, 15.293506, 6.77119, 12.466993, 15.194904, 11.110711, 12.516085)), .Names = c("lat", "lon"), row.names = c(NA, 25L), class = "data.frame")

and I would like to plot only the events that happened in a given country (for instance, Italy).

The following plots all events:

library(rworldmap)
library(maps)
par(mar=c(0,0,0,0))
plot(getMap(resolution="low"), xlim = c(14,14), ylim = c(36.8,47))
points(x=events$lon, y=events$lat, pch = 19, col ='red' , cex = 0.6)

How can I filter out the events that fall outside the boundaries of the country ? Thank you in advance for help and support.

assign polygon map to an object:

m = getMap(resolution="low")

convert events into an sp object -- first longitude, then latitude:

pts = SpatialPoints(events[c(2,1)])

assign CRS:

proj4string(pts) = proj4string(m)

plot points inside any of the polygons:

points(pts[m,], pch = 3)

select points inside Italy:

it = m[m$ISO_A2 == "IT",]
points(pts[it,], col = 'blue')

(this uses sp::over , but behind the scenes)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM