Skip to main content

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

 

@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.


Identify depression Contours? | Community


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".

 


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

 


Thanks! Some great ideas here to try out.


Reply