7

I want a quantification technique to differentiate different shapes of polygons. For example, the following image consists of 3 seperate polygons, e.g., (a) is stretched to its tails, (b) is bowl shaped, and (c) is a complex polygon.

enter image description here

Is there any geometrical way to differentiate these phenomenon?

For instance, if I want to segregate only the bowl shaped polygons, what would be the technique in GIS?

I dont want to use any kind of pattern recognition techniques, just looking for a geometrical solution in ArcGIS.

4
  • 1
    What has your research to date indicated?
    – Vince
    Apr 6, 2018 at 1:03
  • 3
    One observation I have made is the ratio of perimeter (shape_length) to area is higher in A and C than in B, C is a bit more tricky, you could look at the convex hull containing the geometry and erase it with the geometry, C should have a higher outside area than B. How are you planning to implement this? What API/Language(s) do you plan to use? The best you're going to get is a value for stretchyness and complexity, which you will need to apply an arbitrary limit to determine what category the geometry falls in. Apr 6, 2018 at 1:04
  • 1
    Thanks @MichaelStimson for your insights. The points you have mentioned seem interesting. I can only think of ArcPy for this work right now. As I have a lot of polygons to work with, I can implement these factors, e.g., ratio of length to area, and difference of convex hull geometry and shape geometry. Then, I can do a binary logistic regression to see which factor has higher importance in this classification. I will post the final findings.
    – sbhadra
    Apr 6, 2018 at 1:23
  • 1
    That would be most interesting, have a read of polygon.convexHull() and polygon.difference() resources.arcgis.com/en/help/main/10.2/index.html#/Polygon/… to help with the difficult part. Assume your geometry is Geom then OutsideArea = Geom.convexHull().difference(Geom).area (make a convex hull and erase the inside returning the area)... you could do this on an arcpy.da.updateCursor and have a quantifiable value to work with (along with shape_length and shape_area if you're in a geodatabase, if you have a shapefile then you will need to get these from the polygon). Apr 6, 2018 at 1:51

1 Answer 1

12

You can use some shape characteristics, e.g. orientation, elongation, convexity, rentangularity, compactness etc.

  • Orientation is direction angle of long axis of minimum area bounding rectangle (MABR) of a polygon.
  • Elongation is the ratio of the length of the MABR’s short axis to long axis.(b/a)
  • Convexity is the ratio of the polygon area to the area of its convex hull. area(Polygon)/area(ConvexHull)
  • Rectangularity is the ratio of polygon area to MABR area. area(Polygon)/area(MABR)
  • Compactness/Roundness is the ratio of the area of the circle with the same length as the polygon to the polygon area. area(Circle)/area(Polygon)

enter image description here

Then, you will come to a conclusion by comparing them. For example:

  • If compactness value is close to 1, it's almost bowl shaped.
  • If convexity is big, it's a complex polygon.
  • If elongation is far far away from 1 and orientation is close to 90 degree, it is stretched to its tails.

For further information, you may read this article: Performance of shape indices and classification schemes for characterising perceptual shape complexity of building footprints in GIS

2

Not the answer you're looking for? Browse other questions tagged or ask your own question.