Revision: 6188
          http://sourceforge.net/p/jump-pilot/code/6188
Author:   michaudm
Date:     2019-06-19 12:26:35 +0000 (Wed, 19 Jun 2019)
Log Message:
-----------
Improve calculation of polygon width/length attributes

Modified Paths:
--------------
    core/trunk/ChangeLog
    
core/trunk/src/org/openjump/core/ui/plugin/tools/AddGeometryAttributesPlugIn.java

Modified: core/trunk/ChangeLog
===================================================================
--- core/trunk/ChangeLog        2019-05-25 07:28:19 UTC (rev 6187)
+++ core/trunk/ChangeLog        2019-06-19 12:26:35 UTC (rev 6188)
@@ -3,6 +3,9 @@
 # 2. make sure that lines break at 80 chars for constricted display situations
 #<-------------------------------- 80 chars 
---------------------------------->#
 
+2019-06-19 mmichaud <m.michael.mich...@orange.fr>
+  * Improve calculation of polygon width/length attributes
+
 2019-05-25 mmichaud <m.michael.mich...@orange.fr>
   * Update GraphToolBox extension to 0.6.2 (fix skeletonizer plugin)
 

Modified: 
core/trunk/src/org/openjump/core/ui/plugin/tools/AddGeometryAttributesPlugIn.java
===================================================================
--- 
core/trunk/src/org/openjump/core/ui/plugin/tools/AddGeometryAttributesPlugIn.java
   2019-05-25 07:28:19 UTC (rev 6187)
+++ 
core/trunk/src/org/openjump/core/ui/plugin/tools/AddGeometryAttributesPlugIn.java
   2019-06-19 12:26:35 UTC (rev 6188)
@@ -25,6 +25,7 @@
  
 package org.openjump.core.ui.plugin.tools;
 
+import com.vividsolutions.jts.algorithm.MinimumDiameter;
 import com.vividsolutions.jts.geom.Geometry;
 import com.vividsolutions.jts.geom.Polygon;
 import com.vividsolutions.jump.I18N;
@@ -323,7 +324,12 @@
                 return (((length / 2.0) - Math.sqrt(val)) / 2.0);
             } else {
                 //diam\xE8tre du disque de m\xEAme surface, sur une surface 
ramass\xE9e
-                return 2.0 * Math.sqrt(area / Math.PI);
+                //return 2.0 * Math.sqrt(area / Math.PI);
+                //improve width calculation for compact geometries
+                MinimumDiameter diameter = new MinimumDiameter(g);
+                Geometry minRectangle = diameter.getMinimumRectangle();
+                double ratio = Math.sqrt(minRectangle.getArea()/g.getArea());
+                return diameter.getLength()/ratio;
             }
         } else return null;
     }
@@ -338,7 +344,12 @@
                 return area / (((length / 2.0) - Math.sqrt(val)) / 2.0);
             } else {
                 //diam\xE8tre du disque de m\xEAme surface, sur une surface 
ramass\xE9e
-                return 2.0 * Math.sqrt(area / Math.PI);
+                //return 2.0 * Math.sqrt(area / Math.PI);
+                //improve width calculation for compact geometries
+                MinimumDiameter diameter = new MinimumDiameter(g);
+                Geometry minRectangle = diameter.getMinimumRectangle();
+                double ratio = Math.sqrt(minRectangle.getArea()/g.getArea());
+                return g.getArea()/(diameter.getLength()/ratio);
             }
         } else return null;
     }



_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to