Distance sampling survey design supplement

Author

Centre for Research into Ecological and Environmental Modelling
University of St Andrews

Published

October 14, 2024

Supplement to survey design

Combining output of dssd with leaflet

Survey design with dssd

This exercise demonstrated how to examine the properties of various distance sampling survey designs. The exercise showed how to write survey locations to a GPX file, then import into Google Earth, but there’s a way to make visualisations all within R. I present here visualisations of the Tentsmuir point transect survey and a line transect survey of the coast of Ireland. The leaflet R package is used to show the placement of the survey effort.

Tentsmuir survey

Design of the survey begins with reading the unprojected shape file (coordinates likely degrees) and converting to a shape with distances measured in meters. A design is examined with allocation of point transects disproportionately between the two strata, with the smallest stratum receiving the highest allocation of effort. The final line of code in this chunk generates the coordinates of sampling stations for a realisation of this design.

shapefile.name <- system.file("extdata", "TentsmuirUnproj.shp", package = "dssd")
sf.shape <- read_sf(shapefile.name)
st_crs(sf.shape)
Coordinate Reference System:
  User input: WGS 84 
  wkt:
GEOGCRS["WGS 84",
    DATUM["World Geodetic System 1984",
        ELLIPSOID["WGS 84",6378137,298.257223563,
            LENGTHUNIT["metre",1]]],
    PRIMEM["Greenwich",0,
        ANGLEUNIT["degree",0.0174532925199433]],
    CS[ellipsoidal,2],
        AXIS["latitude",north,
            ORDER[1],
            ANGLEUNIT["degree",0.0174532925199433]],
        AXIS["longitude",east,
            ORDER[2],
            ANGLEUNIT["degree",0.0174532925199433]],
    ID["EPSG",4326]]
proj4string <- "+proj=aea +lat_1=56 +lat_2=62 +lat_0=50 +lon_0=-3 +x_0=0 
                +y_0=0 +ellps=intl +units=m"
projected.shape <- st_transform(sf.shape, crs = proj4string)
region.tm <- make.region(region.name = "Tentsmuir",
                         strata.name = c("Main Area", "Morton Lochs"),
                         shape = projected.shape)
cover.tm <- make.coverage(region.tm, n.grid.points = 100)
design.tm <- make.design(region = region.tm,
                         transect.type = "point",
                         design = "systematic",
                         samplers = c(25,15),
                         design.angle = 0,
                         edge.protocol = "minus",
                         truncation = 100,
                         coverage.grid = cover.tm)
survey.tm <- generate.transects(design.tm)

Use either the +/- tools or mouse wheel to zoom and move around the map. The resulting map depicts the sampling stations as markers denoted with a binoculars icon. Hovering over the marker shows the latitude/longitude of each station. The red circles centred on each station is a circle of 100m radius, indicating the truncation distance specified in the make.design argument above. Use the measurement tool (upper right) to confirm the radius of the circles is 100m.

Warning in CPL_crs_from_input(x): GDAL Message 1: +init=epsg:XXXX syntax is
deprecated. It might return a CRS with a non-EPSG compliant axis order.

Tentsmuir study design, measuring tool top right.

Line transect survey design with strata

A different base map is used with leaflet to depict this marine survey. The basemap here shows some features of ocean bathymetry.

In contrast with the Tentsmuir survey, this begins with a projected study area map, with units of measure already in metres. Each of the six strata are given a different design.angle so as to approximate transects roughly perpendicular to the shore. Design specification is to have 15km spacing between lines within a stratum. Final line of code in this chunk produces coordinates of transects for a single realisation of this design.

ireland.name <- system.file("extdata", "AreaRProjStrata.shp", package = "dssd")
ireland <- read_sf(ireland.name)
st_crs(ireland)
Coordinate Reference System:
  User input: Albers-9 
  wkt:
PROJCRS["Albers-9",
    BASEGEOGCRS["WGS 84",
        DATUM["World Geodetic System 1984",
            ELLIPSOID["WGS 84",6378137,298.257223563,
                LENGTHUNIT["metre",1]],
            ID["EPSG",6326]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["Degree",0.0174532925199433]]],
    CONVERSION["unnamed",
        METHOD["Albers Equal Area",
            ID["EPSG",9822]],
        PARAMETER["Latitude of false origin",35,
            ANGLEUNIT["Degree",0.0174532925199433],
            ID["EPSG",8821]],
        PARAMETER["Longitude of false origin",-9,
            ANGLEUNIT["Degree",0.0174532925199433],
            ID["EPSG",8822]],
        PARAMETER["Latitude of 1st standard parallel",40,
            ANGLEUNIT["Degree",0.0174532925199433],
            ID["EPSG",8823]],
        PARAMETER["Latitude of 2nd standard parallel",55,
            ANGLEUNIT["Degree",0.0174532925199433],
            ID["EPSG",8824]],
        PARAMETER["Easting at false origin",0,
            LENGTHUNIT["metre",1],
            ID["EPSG",8826]],
        PARAMETER["Northing at false origin",0,
            LENGTHUNIT["metre",1],
            ID["EPSG",8827]]],
    CS[Cartesian,2],
        AXIS["(E)",east,
            ORDER[1],
            LENGTHUNIT["metre",1,
                ID["EPSG",9001]]],
        AXIS["(N)",north,
            ORDER[2],
            LENGTHUNIT["metre",1,
                ID["EPSG",9001]]]]
region <- make.region(region.name = "Area R Ireland coast",
                      units = "m",
                      shape = ireland.name)
cover <- make.coverage(region, n.grid.points = 100)
design.space15k <- make.design(region = region,
                               transect.type = "line",
                               design = "systematic",
                               spacing = 15000,
                               design.angle = c(0, 160, 85, 90, 85, 160),
                               edge.protocol = "minus",
                               truncation = 2000,
                               coverage.grid = cover)
ireland.trans <- generate.transects(object = design.space15k)

Use the measurement tool (lower left corner) to check that line spacing is indeed 15km.

Multiple strata for Irish survey.