Skip to main content
Question

Identify an island in a lake on an island in a lake

  • May 16, 2025
  • 5 replies
  • 104 views

aron
Enthusiast
Forum|alt.badge.img+16

I hope I got the title prepositions correct…

I want to break apart lake data in order to generalize each category individually. The DonutHoleExtractor will “only” break apart “one level”. That is, independent-lakes and island-in-lakes-on-islands get sent one way and islands-in-independent-lakes and lakes-on-independent-islands get sent the other. Last option is to use an AreaOnAreaOverlayer or similar to sort everything correctly. But I would rather save that computing time since this is a huge dataset. Unfortunately the DonutHoleExtractor does not have an option for lists, or that would have been my chosen route, me thinks. Once generalized the geometries will be reassembled into donuts. 
 

Q: Is there a way to deduct the relations between different types of polygons within the donuts without doing a load of spatial analysis? I would expect there to be some sort of relation info within the geometry type itself?

edit: Rephrased the question for clarity  

Pic for illustrative purposes

 

5 replies

crutledge
Influencer
Forum|alt.badge.img+43
  • Influencer
  • May 16, 2025

@aron What a great thing. I love this. Matryoshkan Doll stuff. I wonder if you could take the lines from the polys. Turn everything into polys then count within. Or count the stack. Sort by size then the spatial relate would show how many polys are related. There was another question similar about Contour. Let me track that down.


crutledge
Influencer
Forum|alt.badge.img+43
  • Influencer
  • May 16, 2025

takashi
Celebrity
  • May 18, 2025

Hi ​@aron ,

If you would like to detect "island in lake in island", I think a combination of DonutHoleExtractor and SpatialRelator works fine.

  1. DonutHoleExtractor : Extarct outer shell polygons.
  2. Counter : Add a sequential number attribute to the outer shell polygons as a temporary ID, if the source features didn't have unique ID attribute.
  3. SpatialRelator : Send all the outer shell polygons to both Requestor port and Supplier port, and set these parameters.
    • Spatial Predicates to Test: "Requestor is OGC-Within Supplier"
    • Attribute(s) that Must Differ: <the ID attribute>

The resuling features will have an attribute (named "_related_suppliers" by default) which stores the number of outer islands, and the number will be 1 or more if the feature was an "island in lake in island".

 


geomancer
Evangelist
Forum|alt.badge.img+59
  • Evangelist
  • May 19, 2025

Continuation of the great approach ​@takashi provides above:

  1. Join the results to the polygons
  2. If the value of _related_suppliers is even, the polygon is land; if the value is odd, the polygon is a lake

 


aron
Enthusiast
Forum|alt.badge.img+16
  • Author
  • Enthusiast
  • May 20, 2025

Thanks! Some great ideas here to try out.