0

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.

closed as too broad by Vince, nmtoken, whyzar, BERA, aldo_tapia Apr 6 '18 at 11:50

Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

  • 1
    What has your research to date indicated? – Vince Apr 6 '18 at 1:03
  • 1
    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. – Michael Stimson Apr 6 '18 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 '18 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). – Michael Stimson Apr 6 '18 at 1:51
4

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

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.

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