R 如何使用KML多边形过滤地理坐标数据帧?

R 如何使用KML多边形过滤地理坐标数据帧?,r,kml,geospatial,R,Kml,Geospatial,我有一个跨越整个地球的CSV数据点(),我只想过滤美国境内的地震 我从美国人口普查局得到的KML文件: 在R中,rgdal库可以加载KML文件: library(rgdal) kml = readOGR("kmls/cb_2014_us_nation_20m.kml", 'cb_2014_us_nation_20m') 如何使用dplyr/plyr/等仅为KML指定边界内的行过滤data.frame(地理数据列为纬度和经度 编辑、发布答案: 下面是我用来快速可视化的: library(sp

我有一个跨越整个地球的CSV数据点(),我只想过滤美国境内的地震

我从美国人口普查局得到的KML文件:

在R中,
rgdal
库可以加载KML文件:

library(rgdal)
kml = readOGR("kmls/cb_2014_us_nation_20m.kml", 'cb_2014_us_nation_20m')
如何使用
dplyr
/
plyr
/等仅为KML指定边界内的行过滤data.frame(地理数据列为
纬度
经度


编辑、发布答案:

下面是我用来快速可视化的:

library(sp)
library(rgdal)
# download earthquakes
url <- "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.csv"
fil <- "all_week.csv"
if (!file.exists(fil)) download.file(url, fil)
quakes <- read.csv("all_week.csv", stringsAsFactors=FALSE)
# create spatial object
sp::coordinates(quakes) <- ~longitude+latitude

# download nation KML
url <- "http://www2.census.gov/geo/tiger/GENZ2014/kml/cb_2014_us_nation_20m.zip"
fil <- "uskml.zip"
if (!file.exists(fil)) download.file(url, fil)
unzip(fil, exdir="uskml")
# read KML file
us <- rgdal::readOGR("./uskml/cb_2014_us_nation_20m.kml", "cb_2014_us_nation_20m")
sp::proj4string(quakes) <- sp::proj4string(us)

length(quakes)
# 1514

usquakes = quakes[us,]
length(usquakes)
# 1260

### visualize
plot(us) 
# plot all quakes
points(quakes$longitude, quakes$latitude)
# plot just US
points(usquakes$longitude, usquakes$latitude)
库(sp)
图书馆(rgdal)
#下载地震

url这将通过cpl方式实现:

library(sp)
library(maptools)
library(rgeos) # not entirely necessary
library(rgdal) # not entirely necessary

url <- "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.csv"
fil <- "all_week.csv"
if (!file.exists(fil)) download.file(url, fil)

quakes <- read.csv("all_week.csv", stringsAsFactors=FALSE)
coordinates(quakes) <- ~longitude+latitude

url <- "http://www2.census.gov/geo/tiger/GENZ2014/shp/cb_2014_us_nation_20m.zip"
fil <- "us.zip"
if (!file.exists(fil)) download.file(url, fil)
unzip(fil, exdir="us")
us <- readShapePoly("us/cb_2014_us_nation_20m.shp")

# alternatively
# us <- rgdal::readOGR("us/cbcb_2014_us_nation_20m.shp", "cb_2014_us_nation_20m")

# TRUE if in
in_us_rgeos <- rgeos::gIntersects(quakes, us, byid=TRUE)

# <NA> if in
in_us_over <- quakes %over% us

这将通过cpl方式实现:

library(sp)
library(maptools)
library(rgeos) # not entirely necessary
library(rgdal) # not entirely necessary

url <- "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.csv"
fil <- "all_week.csv"
if (!file.exists(fil)) download.file(url, fil)

quakes <- read.csv("all_week.csv", stringsAsFactors=FALSE)
coordinates(quakes) <- ~longitude+latitude

url <- "http://www2.census.gov/geo/tiger/GENZ2014/shp/cb_2014_us_nation_20m.zip"
fil <- "us.zip"
if (!file.exists(fil)) download.file(url, fil)
unzip(fil, exdir="us")
us <- readShapePoly("us/cb_2014_us_nation_20m.shp")

# alternatively
# us <- rgdal::readOGR("us/cbcb_2014_us_nation_20m.shp", "cb_2014_us_nation_20m")

# TRUE if in
in_us_rgeos <- rgeos::gIntersects(quakes, us, byid=TRUE)

# <NA> if in
in_us_over <- quakes %over% us

@hrbrmstr:我可以接受这两种情况,但我猜你是在问这个问题,因为对于非连续的US,多边形数据结构是不同的?让我们假设我只关心大陆集团,尽管我现在使用的文件是人口普查的国家边界:@hrbrmstr:我可以接受任何一个,但我猜你会问这个问题,因为对于非连续的美国,多边形数据结构是不同的?让我们假装我只关心大陆,尽管我现在使用的文件是人口普查的国家边界:谢谢!。。。快速问题…为什么代码> <<代码> >看起来比代码> GistCistts < /C> >代码> RGOS是java代码的C++端口(这可能意味着它承载了一些java代码的行李),但是代码> GnTrScSts<代码>也更灵活(它可以处理所有的代码>空间…< /代码>类型)。code>over
(对于
SpatialPoints
位于
SpatialPolygons
中的情况)为该特殊情况调用超高效C代码(函数为
R_point_in_polygon_sp
)。谢谢!。。。快速问题…为什么代码> <<代码> >看起来比代码> GistCistts < /C> >代码> RGOS是java代码的C++端口(这可能意味着它承载了一些java代码的行李),但是代码> GnTrScSts<代码>也更灵活(它可以处理所有的代码>空间…< /代码>类型)。code>over(对于
SpatialPoints
位于
SpatialPolygons
中的情况)为该特殊情况调用超高效C代码(函数为
R_point_in_polygon_sp
)。