Skip to content

Generates regular section cuts through a raster surface for a given extent.

License

Notifications You must be signed in to change notification settings

mit-spatial-action/unknown_pleasuR

Repository files navigation

Unknown PleasuR

Sample map generated by st_unknown_pleasures.

Generates regular section cuts through a raster surface for a given extent. Produces results that look quite a lot like the cover of Joy Division's Unknown Pleasures (1979). Also quite a lot like some of the work of the Harvard Laboratory for Computer Graphics and Spaital Analysis (RIP). Also, scholarly integrity requires that I say: James Cheshire got here first.

General workflow looks like the below. (For a more thoroughly fleshed out example using real data, see example.R.) Assuming an sf dataframe containing polygons or multipolygons (polygons) and a raster surface (raster), this generates regularly spaced lines (st_regular_lines()) and effecitvely "drapes" them over a raster surface, returning either polygonal or linestring section cuts (st_unknown_pleasures()).

Orientation and number of cut lines is set through get_dims() which returns a set of parameters that are subsequently passed to st_regular_lines() and st_unknown_pleasures().

dims <- get_dims(polygons, n = 100, type = "vertical") # or "horizontal"

lines <- polygons %>%
  st_union() %>%
  st_regular_lines(
    dims = dims,
    mask = TRUE
  )

unknown_pleasures <- lines %>%
  st_unknown_pleasures(
    raster,
    dims = dims,
    sample_size = 250, 
    bleed_factor = 3,
    # Or "planar"
    mode = "xyz",
    # Strictly speaking, the "xyz" and polygon
    # combination leaves you with closed LINESTRINGs
    polygon = TRUE
  ) %>%
  st_geometry() %>%
  # We devized the "xyz" mode for export to 3D Modeling software (e.g.,
  # Rhino), so we export to dxf.
  st_write( 
    "test_polys.dxf", 
    delete_dsn = TRUE, 
    driver = "dxf"
    )

dxf_screenshot

# Or, for more GIS-ready output...
unknown_pleasures <- lines %>%
  st_unknown_pleasures(
    raster,
    dims = dims,
    sample_size = 250, 
    bleed_factor = 3,
    mode = "planar",
    polygon = TRUE
  ) %>%
  st_write( 
    "test_polys.geojson", 
    delete_dsn = TRUE
    )

Sample map generated by st_unknown_pleasures.

About

Generates regular section cuts through a raster surface for a given extent.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages