【发布时间】:2015-04-05 01:36:33
【问题描述】:
我想使用spplot + sp.lines(格)而不是plot + segments。你知道实现这一点的简单方法吗,例如R: Calculating the shortest distance between two point layers
library(dismo)
require(rgdal)
require(FNN)
laurus <- gbif("Laurus", "nobilis")
locs <- subset(laurus, !is.na(lat) & !is.na(lon),
select = c("country", "lat", "lon"))
locs.uk <- subset(locs, locs$country=="United Kingdom")
locs.ire <- subset(locs, locs$country=="Ireland")
uk_coord <- SpatialPoints(locs.uk[,c("lon","lat")])
ire_coord <- SpatialPoints(locs.ire[,c("lon","lat")])
crs.geo<-CRS("+proj=longlat +ellps=WGS84 +datum=WGS84")
proj4string(uk_coord) <- crs.geo
proj4string(ire_coord) <- crs.geo
uk_coord <- spTransform(uk_coord, CRS("+init=epsg:27700"))
ire_coord <- spTransform(ire_coord, CRS("+init=epsg:27700"))
g = get.knnx(coordinates(uk_coord), coordinates(ire_coord),k=1)
可视化这个
plot(uk_coord, col=2, xlim=c(-1e5,6e5))
plot(ire_coord, add=TRUE)
segments(coordinates(ire_coord)[,1],
coordinates(ire_coord)[,2],
coordinates(uk_coord[g$nn.index[,1]])[,1],
coordinates(uk_coord[g$nn.index[,1]])[,2])
可能会转换成类似的东西
ire <- list("sp.points", ire_coord)
spplot(uk_coord, sp.layout=list(ire))
但是有没有一种简单的方法可以将segments 转换为SpatialLines 即list("sp.lines", Lines(...))
【问题讨论】:
-
注意:以前版本的 pkg:dismo 的用户应该在运行此代码之前更新。 (并且我在 ire_coord 分配中收到关于非有限坐标的错误。)
-
需要在创建 locs.ire 之后多加一行:
locs.ire <- locs.ire[ with(locs.ire, !is.na(lat)&!is.na(lon)), ]
标签: r geospatial lattice sp