## not widely tested!

# need these

library(sp)

library(spgrass6)

library(alphahull)

source('alpha-functions.R')

# read point vector in from GRASS

x <- readVECT6('rtk_pts_5_1')

# extract coordinates

x.coords <- coordinates(x)

# alpha-shape: 100 meter threshold

x.as <- ashape(x.coords[,1], x.coords[,2], alpha=100)

# alpha-hull: 30 meter threshold

x.ah <- ahull(x.coords[,1], x.coords[,2], alpha=30)

plot(x.as, cex=0.5, pch=4, xlab='Easting (m)', ylab='Northing (m)', main=expression(paste('100m ', alpha, '-Shape')), asp=1)

plot(x.ah, cex=0.5, pch=4, xlab='Easting (m)', ylab='Northing (m)', main=expression(paste('30m ', alpha, '-Hull')), asp=1)

## convert into SP objects

# alpha-shape

x.as.spldf <- ashape_to_SPLDF(x.as, proj4string=x@proj4string)

# alpha-hull

x.ah.spldf <- ahull_to_SPLDF(x.ah, proj4string=x@proj4string)

# check: OK

pdf(file='ashape_ahull_demo.pdf', width=6, height=6)

par(mar=c(1,1,1,1))

plot(x.as.spldf)

lines(x.ah.spldf, col='red')

points(x, cex=0.5, pch=4, col='blue')

legend('bottomright', legend=c(expression(paste('100m ', alpha, '-Shape')), expression(paste('30m ', alpha, '-Hull')), 'Observation'), lty=c(1,1,NA), pch=c(NA,NA,4), col=c('black', 'red', 'blue'), bty='n')

dev.off()

# save back to GRASS: OK

writeVECT6(x.as.spldf, 'rtk_ashape')

# save back to GRASS: OK

writeVECT6(x.ah.spldf, 'rtk_ahull')

## alphashape to qgis

Hello

I have been trying unsuccessfully to import alpha shapes produced by alphahull into QGIS. I ran into your code and I think it might be what I'm looking for. I am not using GRASS but regular SHP files. The alphahull function does create the alpha shape but your alpha-functions choke on the resulting hull.

This is what I'm trying:

polyg = readOGR("/path/to/shapefile",layer="somelayer")

pts=spsample(polyg,n=1000,type="regular")

x.as = ashape(coordinates(pts),alpha=0.9)

output = ashape_to_SPLDF(x.as, proj4string=pts@proj4string)

The error I get is:

Error in Lines(l.list, ID = as.character(1:nrow(x.as.df))) :

Single ID required

Calls: ashape_to_SPLDF -> Lines

Execution halted

Any help will be greatly appreciated! I have tried dozens of different options and am at a loss!

Thanks

Mauricio Giraldo

New York Public Library Labs