我已经尝试了几天来创建轮廓,然后将shapefile和轮廓绘制在同一文件上。现在,我可以在同一图上创建轮廓和shapefile。我想用shapefile剪切轮廓,只显示shapefile。
可以在此链接上找到数据temp.csv https://www.dropbox.com/s/mg2bo4rcr6n3dks/temp.csv
Shapefile可以在以下位置找到:https://www.dropbox.com/sh/ztvmibsslr9ocmc/YOtiwB8p9p
脚本文件image.scale.R可以在以下位置“https://www.dropbox.com/s/2f5s7cc02fpozk7/image.scale.R”上找到
到目前为止,我使用的代码如下:
## Required packages
library(maptools)
library(rgdal)
library(sp)
library(maptools)
library(sm)
require(akima)
require(spplot)
library(raster)
library(rgeos)
## Set Working Directory
setwd("C:\\Users\\jdbaba\\Documents\\R working folder\\shape")
## Read Data from a file
age2100 <- read.table("temp.csv",header=TRUE,sep=",")
x <- age2100$x
y <- age2100$y
z <- age2100$z
####################################
##Load the shape file
#####################################
shapefile <- readShapePoly("Export_Output_4.shp")
fld <- interp(x,y,z)
par(mar=c(5,5,1,1)) filled.contour(fld)
###Import the image.scale
source source("image.scale.R")
#http://menugget.blogspot.de/2011/08/adding-scale-to-image-plot.html
x11(width=8, height=7)
layout(matrix(c(1,2), nrow=1, ncol=2), widths=c(6,1), height=6, respect=TRUE)
layout.show(2)
par(mar=c(4,4,1,2))
image(fld,axes=T)
contour(fld, add=TRUE)
#points(age2100$x,age2100$y, pch=".", cex=2,legend=F)
plot(shapefile,add=T,lwd=2)
box()
par(mar=c(4,0,1,4))
image.scale(fld, xlab="Eastings", ylab="Northings", xaxt="n", yaxt="n", horiz=FALSE)
axis(4)
mtext("Salinity", side=4, line=2.5)
上面代码的输出如下:
现在,我想摆脱多边形shapefile中的彩色渐变和轮廓,只保留相交部分。
任何帮助都将受到高度赞赏。
研究:我在Stack交换Gis上找到了这个链接https://gis.stackexchange.com/questions/25112/clip-depth-contour-with-spatial-polygon,我尝试遵循这种方法,在创建轮廓时总是出错。
我在https://stat.ethz.ch/pipermail/r-sig-geo/2009-May/005793.html上找到了另一个类似的线程。但是我无法使其在我的数据集上运行。
我想在包装盒中感谢Marc帮助我做到这一点。
谢谢。
最佳答案
的确,@baptiste为您提供了强烈的解决方案recent paper by Paul Murrell提示。保罗很慷慨地向我们提供了他整个纸质手稿的代码,您可以从his personal website中获得该代码。在副主题上,Paul在本文中展示了可重复研究的美丽示例。通常,我采用以下方法:
polypath
使用提取的坐标作为基准来删除shapefile定义的边界之外的所有内容。#function to extract coordinates from shapefile (by Paul Hiemstra)
allcoordinates_lapply = function(x) {
polys = x@polygons
return(do.call("rbind", lapply(polys, function(pp) {
do.call("rbind", lapply(pp@Polygons, coordinates))
})))
}
q = allcoordinates_lapply(shapefile)
#extract subset of coordinates, otherwise strange line connections occur...
lat = q[110:600,1]
long = q[110:600,2]
#define ranges for polypath
xrange <- range(lat, na.rm=TRUE)
yrange <- range(long, na.rm=TRUE)
xbox <- xrange + c(-20000, 20000)
ybox <- yrange + c(-20000, 20000)
#plot your stuff
plot(shapefile, lwd=2)
image(fld, axes=F, add=T)
contour(fld, add=T)
#and here is the magic
polypath(c(lat, NA, c(xbox, rev(xbox))),
c(long, NA, rep(ybox, each=2)),
col="white", rule="evenodd")
关于r - 与R中的轮廓和多边形相交,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14393172/