1sp2tmap <- function(SP) {
2	if (!inherits(SP, "SpatialPolygons"))
3		stop("not a SpatialPolygons object")
4	pls <- slot(SP, "polygons")
5	IDs <- sapply(pls, function(x) slot(x, "ID"))
6	n <- length(IDs)
7	iIDs <- as.integer(1:n)
8	cID <- NULL
9	cX <- NULL
10	cY <- NULL
11	for (i in iIDs) {
12		pl <- slot(pls[[i]], "Polygons")
13		m <- length(pl)
14		for (j in 1:m) {
15			crds <- slot(pl[[j]], "coords")
16			if (is.null(cID)) {
17				cID <- i
18				cX <- as.numeric(NA)
19				cY=as.numeric(NA)
20			} else {
21				cID <- c(cID, i)
22				cX <- c(cX, as.numeric(NA))
23				cY <- c(cY, as.numeric(NA))
24			}
25			cID <- c(cID, rep(i, nrow(crds)))
26			cX <- c(cX, crds[,1])
27			cY <- c(cY, crds[,2])
28		}
29	}
30	res <- data.frame("_ID"=cID, "_X"=cX, "_Y"=cY, check.names=FALSE)
31	names(iIDs) <- IDs
32	attr(res, "ID_names") <- iIDs
33	res
34}
35