0
votes

Hello (mapping novice here!)

I have had a good hunt around and can't find a solution to what seems to be a tricky problem.

I have basic XY (coordinate) data:

location / land polygons (shapefile)

What I want to do is create neighbouring polygons based on the coordinate data that do not overlap and have a certain size limit (so they don't extend forever into the ocean).

Forgive my poor MS Paint skills, but the desired outcome would be something like this:

enter image description here

I have a polygon that marks the land/sea interface so polygons cannot overlap that either.

I am using Leaflet to make these maps interactive, its not for any statistical analysis but to provide an overview.

The ultimate aim is to have each polygon coloured by a variable (e.g. Temperature) with ecological data overlaid.

Some example data:

    > data[1:10,]
   Station  Lat_dec  Long_dec Surface_T
1      247 50.33445 -2.240283     15.19
2      245 50.58483 -2.535217     14.11
3      239 50.16883 -2.509250     15.41
4      225 50.32848 -2.765967     15.34
5      229 50.63900 -2.964800     14.09
6      227 50.33757 -3.303217     15.12
7      217 50.16657 -3.563817     15.13
8      207 49.66683 -3.556550     15.04
9      213 50.16512 -3.824667     14.97
10     219 49.83707 -3.815483     14.78

the Code to produce figure 1 is a basic leaflet script:

leaflet() %>% 
  addProviderTiles('Esri.OceanBasemap'
  ) %>% 
  addCircleMarkers(data = data,
                   lng = ~Long_dec,
                   lat = ~Lat_dec,
                   radius = 2
  ) %>%
  addPolygons(data = Land,
              weight = 1,
              color = 'black')

Its been frustrating me all day, most of the examples use downloaded polygons (e.g. what seems to be the classic US States rather than making them)

Any help greatly appreciated! (or am I asking too much!)

Jim

1

1 Answers

4
votes

Here is something to get started with:

library(sf)
library(dplyr)

#create sf object with points
stations <- st_as_sf( df, coords = c( "Long_dec", "Lat_dec" ) ) 

#create voronoi/thiessen polygons
v <- stations %>% 
  st_union() %>%
  st_voronoi() %>%
  st_collection_extract()

library(leaflet)
leaflet() %>% 
  addTiles() %>% 
  addCircleMarkers( data = stations ) %>%
  addPolygons( data = v ) 

enter image description here