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