[Git][debian-gis-team/geos][master] 9 commits: Update branch in gbp.conf & Vcs-Git URL.
Bas Couwenberg (@sebastic)
gitlab at salsa.debian.org
Wed Oct 29 04:55:21 GMT 2025
Bas Couwenberg pushed to branch master at Debian GIS Project / geos
Commits:
80196f3e by Bas Couwenberg at 2025-10-27T17:04:08+01:00
Update branch in gbp.conf & Vcs-Git URL.
- - - - -
5a46899f by Bas Couwenberg at 2025-10-27T17:04:46+01:00
New upstream version 3.14.1
- - - - -
79ecfcd4 by Bas Couwenberg at 2025-10-27T17:04:53+01:00
Update upstream source from tag 'upstream/3.14.1'
Update to upstream version '3.14.1'
with Debian dir da84c267e8873a3d955df3cd92546568bf4851b0
- - - - -
dd14ba43 by Bas Couwenberg at 2025-10-27T17:06:16+01:00
New upstream release.
- - - - -
da71815d by Bas Couwenberg at 2025-10-27T17:36:20+01:00
Update symbols for amd64.
- - - - -
827ff74a by Bas Couwenberg at 2025-10-27T17:36:20+01:00
Set distribution to experimental.
- - - - -
dc15f1a8 by Bas Couwenberg at 2025-10-29T05:47:01+01:00
Revert "Update branch in gbp.conf & Vcs-Git URL."
This reverts commit 80196f3ebd8fb1f179e83cc4c24adcf8ac7821c9.
- - - - -
f5edfa99 by Bas Couwenberg at 2025-10-29T05:48:20+01:00
Update symbols for other architectures.
- - - - -
32a64f85 by Bas Couwenberg at 2025-10-29T05:48:47+01:00
Set distribution to unstable.
- - - - -
20 changed files:
- CMakeLists.txt
- NEWS.md
- Version.txt
- debian/changelog
- debian/control
- debian/libgeos-c1t64.symbols
- debian/libgeos3.14.0.install → debian/libgeos3.14.1.install
- debian/libgeos3.14.0.symbols → debian/libgeos3.14.1.symbols
- include/geos/geom/Quadrant.h
- release.md
- src/algorithm/CircularArcs.cpp
- src/coverage/CoverageRingEdges.cpp
- src/geom/CoordinateSequence.cpp
- src/operation/grid/Grid.cpp
- tests/unit/CMakeLists.txt
- tests/unit/algorithm/CircularArcsTest.cpp
- + tests/unit/geom/QuadrantTest.cpp
- tests/unit/utility.h
- util/geosop/GeometryOp.cpp
- util/geosop/GeosOp.cpp
Changes:
=====================================
CMakeLists.txt
=====================================
@@ -558,3 +558,10 @@ if(PROJECT_IS_TOP_LEVEL)
unset(_is_multi_config_generator)
endif() # PROJECT_IS_TOP_LEVEL
+
+include(CheckIncludeFile)
+check_include_file(fenv.h HAVE_FENV_H)
+
+if(HAVE_FENV_H)
+ target_compile_definitions(geos_cxx_flags INTERFACE HAVE_FENV)
+endif()
=====================================
NEWS.md
=====================================
@@ -1,3 +1,14 @@
+
+## Changes in 3.14.1
+2025-10-27
+
+- Fixes/Improvements:
+ - Make floating-point exceptions optional for geosop (GH-1305, Maxim Kochetkov)
+ - Fix undefined behaviour in CoordinateSequence::closeRing (GH-1309, Paul Ramsey)
+ - GridIntersection: Fix crash for certain polygons outside grid extent (Dan Baston)
+ - Fix incorrect envelope calculation for arcs (GH-1314, Dan Baston)
+
+
## Changes in 3.14.0
2025-08-21
=====================================
Version.txt
=====================================
@@ -2,7 +2,7 @@
# GEOS Versions
GEOS_VERSION_MAJOR=3
GEOS_VERSION_MINOR=14
-GEOS_VERSION_PATCH=0
+GEOS_VERSION_PATCH=1
# OPTIONS: "", "dev", "rc1" etc.
GEOS_PATCH_WORD=
@@ -16,7 +16,7 @@ GEOS_PATCH_WORD=
# ( THIS MUST BE CAREFULLY AVOIDED )
#
CAPI_INTERFACE_CURRENT=21
-CAPI_INTERFACE_REVISION=4
+CAPI_INTERFACE_REVISION=5
CAPI_INTERFACE_AGE=20
# JTS Port
=====================================
debian/changelog
=====================================
@@ -1,10 +1,19 @@
-geos (3.14.0-2) UNRELEASED; urgency=medium
+geos (3.14.1-1) unstable; urgency=medium
+ * Update symbols for other architectures.
+ * Move from experimental to unstable.
+
+ -- Bas Couwenberg <sebastic at debian.org> Wed, 29 Oct 2025 05:48:25 +0100
+
+geos (3.14.1-1~exp1) experimental; urgency=medium
+
+ * New upstream release.
* Update lintian overrides.
* Drop Rules-Requires-Root: no, default since dpkg 1.22.13.
* Use test-build-validate-cleanup instead of test-build-twice.
+ * Update symbols for amd64.
- -- Bas Couwenberg <sebastic at debian.org> Fri, 12 Sep 2025 17:37:06 +0200
+ -- Bas Couwenberg <sebastic at debian.org> Mon, 27 Oct 2025 17:07:02 +0100
geos (3.14.0-1) unstable; urgency=medium
=====================================
debian/control
=====================================
@@ -32,7 +32,7 @@ Description: Geometry engine for GIS - Development files
Package: libgeos++-dev
Architecture: any
Section: libdevel
-Depends: libgeos3.14.0 (= ${binary:Version}),
+Depends: libgeos3.14.1 (= ${binary:Version}),
libgeos-dev,
${misc:Depends}
Suggests: libgdal-doc
@@ -73,7 +73,7 @@ Description: Geometry engine for Geographic Information Systems - C Library
.
This package contains the C library.
-Package: libgeos3.14.0
+Package: libgeos3.14.1
Architecture: any
Multi-Arch: same
Section: libs
=====================================
debian/libgeos-c1t64.symbols
=====================================
@@ -1,4 +1,4 @@
-# SymbolsHelper-Confirmed: 3.14.0~rc1 alpha arm64 loong64 m68k mips64el ppc64 ppc64el s390x
+# SymbolsHelper-Confirmed: 3.14.1 amd64 m68k
libgeos_c.so.1 #PACKAGE# #MINVER#
* Build-Depends-Package: libgeos-dev
GEOSArea at Base 3.4.2
@@ -679,8 +679,6 @@ libgeos_c.so.1 #PACKAGE# #MINVER#
_ZN4geos8coverage15CoverageCleanerD2Ev at Base 3.14.0~beta1
_ZN4geos9algorithm9construct18LargestEmptyCircleD1Ev at Base 3.9.0
_ZN4geos9algorithm9construct18LargestEmptyCircleD2Ev at Base 3.9.0
- (arch=m68k)_ZN4geos9algorithm9construct22MaximumInscribedCircleD1Ev at Base 3.13.0
- (arch=m68k)_ZN4geos9algorithm9construct22MaximumInscribedCircleD2Ev at Base 3.13.0
_ZN4geos9operation10polygonize11PolygonizerD1Ev at Base 3.8.0
_ZN4geos9operation10polygonize11PolygonizerD2Ev at Base 3.8.0
_ZN4geos9operation6buffer8BufferOpD1Ev at Base 3.10.0
@@ -713,8 +711,6 @@ libgeos_c.so.1 #PACKAGE# #MINVER#
_ZNK4geos4geom8Geometry17isDimensionStrictENS0_9Dimension13DimensionTypeE at Base 3.13.0
_ZNK4geos4util27UniqueCoordinateArrayFilter6isDoneEv at Base 3.13.0
_ZNK4geos5index8quadtree4Root13isSearchMatchERKNS_4geom8EnvelopeE at Base 3.14.0~beta1
- (optional=templinst|arch=m68k)_ZNSt10unique_ptrIN4geos11triangulate8quadedge19QuadEdgeSubdivisionESt14default_deleteIS3_EED1Ev at Base 3.14.0~beta1
- (optional=templinst|arch=m68k)_ZNSt10unique_ptrIN4geos11triangulate8quadedge19QuadEdgeSubdivisionESt14default_deleteIS3_EED2Ev at Base 3.14.0~beta1
(optional=templinst)_ZNSt10unique_ptrIN4geos4geom10LineStringESt14default_deleteIS2_EED1Ev at Base 3.9.0
(optional=templinst)_ZNSt10unique_ptrIN4geos4geom10LineStringESt14default_deleteIS2_EED2Ev at Base 3.9.0
(optional=templinst)_ZNSt10unique_ptrIN4geos4geom10MultiPointESt14default_deleteIS2_EED1Ev at Base 3.12.0
@@ -731,12 +727,12 @@ libgeos_c.so.1 #PACKAGE# #MINVER#
(optional=templinst)_ZNSt10unique_ptrIN4geos4geom8GeometryESt14default_deleteIS2_EED2Ev at Base 3.9.0
(optional=templinst)_ZNSt10unique_ptrIN4geos9operation5valid23TopologyValidationErrorESt14default_deleteIS3_EED1Ev at Base 3.12.0
(optional=templinst)_ZNSt10unique_ptrIN4geos9operation5valid23TopologyValidationErrorESt14default_deleteIS3_EED2Ev at Base 3.12.0
- (optional=templinst|arch=!m68k)_ZNSt12_Vector_baseIN4geos4geom12CoordinateXYESaIS2_EED1Ev at Base 3.14.0~beta3
- (optional=templinst|arch=!m68k)_ZNSt12_Vector_baseIN4geos4geom12CoordinateXYESaIS2_EED2Ev at Base 3.14.0~beta3
- (optional=templinst|arch=!m68k)_ZNSt12_Vector_baseIPKN4geos4geom8GeometryESaIS4_EED1Ev at Base 3.13.0
- (optional=templinst|arch=!m68k)_ZNSt12_Vector_baseIPKN4geos4geom8GeometryESaIS4_EED2Ev at Base 3.13.0
- (optional=templinst|arch=!m68k)_ZNSt12_Vector_baseIPN4geos4geom10LineStringESaIS3_EED1Ev at Base 3.13.0
- (optional=templinst|arch=!m68k)_ZNSt12_Vector_baseIPN4geos4geom10LineStringESaIS3_EED2Ev at Base 3.13.0
+ (optional=templinst)_ZNSt12_Vector_baseIN4geos4geom12CoordinateXYESaIS2_EED1Ev at Base 3.14.0~beta3
+ (optional=templinst)_ZNSt12_Vector_baseIN4geos4geom12CoordinateXYESaIS2_EED2Ev at Base 3.14.0~beta3
+ (optional=templinst)_ZNSt12_Vector_baseIPKN4geos4geom8GeometryESaIS4_EED1Ev at Base 3.13.0
+ (optional=templinst)_ZNSt12_Vector_baseIPKN4geos4geom8GeometryESaIS4_EED2Ev at Base 3.13.0
+ (optional=templinst)_ZNSt12_Vector_baseIPN4geos4geom10LineStringESaIS3_EED1Ev at Base 3.13.0
+ (optional=templinst)_ZNSt12_Vector_baseIPN4geos4geom10LineStringESaIS3_EED2Ev at Base 3.13.0
(optional=templinst|arch=armel riscv64)_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE1EE10_M_releaseEv at Base 3.14.0~beta2
(optional=templinst|arch=!armel !riscv64)_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE10_M_releaseEv at Base 3.14.0~beta2
(optional=templinst|arch=alpha amd64 arm64 loong64 mips64el ppc64 ppc64el s390x)_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE24_M_release_last_use_coldEv at Base 3.14.0~beta2
@@ -752,31 +748,16 @@ libgeos_c.so.1 #PACKAGE# #MINVER#
(optional=templinst|arch=!armel !riscv64)_ZNSt23_Sp_counted_ptr_inplaceIN4geos9operation4grid6MatrixIfEESaIvELN9__gnu_cxx12_Lock_policyE2EED0Ev at Base 3.14.0~beta2
(optional=templinst|arch=!armel !riscv64)_ZNSt23_Sp_counted_ptr_inplaceIN4geos9operation4grid6MatrixIfEESaIvELN9__gnu_cxx12_Lock_policyE2EED1Ev at Base 3.14.0~beta2
(optional=templinst|arch=!armel !riscv64)_ZNSt23_Sp_counted_ptr_inplaceIN4geos9operation4grid6MatrixIfEESaIvELN9__gnu_cxx12_Lock_policyE2EED2Ev at Base 3.14.0~beta2
- (optional=templinst|arch=m68k)_ZNSt6vectorIN4geos4geom12CoordinateXYESaIS2_EED1Ev at Base 3.14.0~beta3
- (optional=templinst|arch=m68k)_ZNSt6vectorIN4geos4geom12CoordinateXYESaIS2_EED2Ev at Base 3.14.0~beta3
- (optional=templinst|arch=!m68k)_ZNSt6vectorIN4geos5index7strtree15TemplateSTRNodeIPvNS2_14EnvelopeTraitsEEESaIS6_EE17_M_realloc_appendIJRPKS6_SC_EEEvDpOT_ at Base 3.13.0
- (optional=templinst|arch=!m68k)_ZNSt6vectorIN4geos5index7strtree15TemplateSTRNodeIPvNS2_14EnvelopeTraitsEEESaIS6_EE17_M_realloc_appendIJS4_RKNS0_4geom8EnvelopeEEEEvDpOT_ at Base 3.13.0
- (optional=templinst|arch=m68k)_ZNSt6vectorIN4geos5index7strtree15TemplateSTRNodeIPvNS2_14EnvelopeTraitsEEESaIS6_EE17_M_realloc_insertIJRPKS6_SC_EEEvN9__gnu_cxx17__normal_iteratorIPS6_S8_EEDpOT_ at Base 3.13.0
- (optional=templinst|arch=m68k)_ZNSt6vectorIN4geos5index7strtree15TemplateSTRNodeIPvNS2_14EnvelopeTraitsEEESaIS6_EE17_M_realloc_insertIJS4_RKNS0_4geom8EnvelopeEEEEvN9__gnu_cxx17__normal_iteratorIPS6_S8_EEDpOT_ at Base 3.13.0
- (optional=templinst|arch=!alpha !amd64 !arm64 !armel !armhf !hppa !hurd-amd64 !hurd-i386 !i386 !loong64 !mips64el !powerpc !ppc64 !ppc64el !riscv64 !s390x !sh4 !sparc64 !x32|subst)_ZNSt6vectorIN4geos5index7strtree15TemplateSTRNodeIPvNS2_14EnvelopeTraitsEEESaIS6_EE7reserveE{size_t}@Base 3.12.0
- (optional=templinst|arch=!m68k)_ZNSt6vectorIPKN4geos4geom10CoordinateESaIS4_EE17_M_realloc_appendIJRKS4_EEEvDpOT_ at Base 3.13.0
- (optional=templinst|arch=!m68k)_ZNSt6vectorIPKN4geos4geom10CoordinateESaIS4_EE17_M_realloc_appendIJS4_EEEvDpOT_ at Base 3.13.0
- (optional=templinst|arch=m68k)_ZNSt6vectorIPKN4geos4geom10CoordinateESaIS4_EE17_M_realloc_insertIJRKS4_EEEvN9__gnu_cxx17__normal_iteratorIPS4_S6_EEDpOT_ at Base 3.13.0
- (optional=templinst|arch=m68k)_ZNSt6vectorIPKN4geos4geom10CoordinateESaIS4_EE17_M_realloc_insertIJS4_EEEvN9__gnu_cxx17__normal_iteratorIPS4_S6_EEDpOT_ at Base 3.13.0
- (optional=templinst|arch=!m68k)_ZNSt6vectorIPKN4geos4geom8GeometryESaIS4_EE17_M_realloc_appendIJS4_EEEvDpOT_ at Base 3.13.0
- (optional=templinst|arch=m68k)_ZNSt6vectorIPKN4geos4geom8GeometryESaIS4_EE17_M_realloc_insertIJS4_EEEvN9__gnu_cxx17__normal_iteratorIPS4_S6_EEDpOT_ at Base 3.13.0
- (optional=templinst|arch=m68k)_ZNSt6vectorIPKN4geos4geom8GeometryESaIS4_EED1Ev at Base 3.13.0
- (optional=templinst|arch=m68k)_ZNSt6vectorIPKN4geos4geom8GeometryESaIS4_EED2Ev at Base 3.13.0
- (optional=templinst|arch=m68k)_ZNSt6vectorIPN4geos4geom10LineStringESaIS3_EED1Ev at Base 3.13.0
- (optional=templinst|arch=m68k)_ZNSt6vectorIPN4geos4geom10LineStringESaIS3_EED2Ev at Base 3.13.0
- (optional=templinst|arch=!m68k)_ZNSt6vectorIPvSaIS0_EE17_M_realloc_appendIJS0_EEEvDpOT_ at Base 3.13.0
- (optional=templinst|arch=m68k)_ZNSt6vectorIPvSaIS0_EE17_M_realloc_insertIJS0_EEEvN9__gnu_cxx17__normal_iteratorIPS0_S2_EEDpOT_ at Base 3.13.0
+ (optional=templinst)_ZNSt6vectorIN4geos5index7strtree15TemplateSTRNodeIPvNS2_14EnvelopeTraitsEEESaIS6_EE17_M_realloc_appendIJRPKS6_SC_EEEvDpOT_ at Base 3.13.0
+ (optional=templinst)_ZNSt6vectorIN4geos5index7strtree15TemplateSTRNodeIPvNS2_14EnvelopeTraitsEEESaIS6_EE17_M_realloc_appendIJS4_RKNS0_4geom8EnvelopeEEEEvDpOT_ at Base 3.13.0
+ (optional=templinst)_ZNSt6vectorIPKN4geos4geom8GeometryESaIS4_EE17_M_realloc_appendIJS4_EEEvDpOT_ at Base 3.13.0
+ (optional=templinst)_ZNSt6vectorIPvSaIS0_EE17_M_realloc_appendIJS0_EEEvDpOT_ at Base 3.13.0
(optional=templinst)_ZNSt6vectorISt10unique_ptrIN4geos4geom10LineStringESt14default_deleteIS3_EESaIS6_EED1Ev at Base 3.11.0
(optional=templinst)_ZNSt6vectorISt10unique_ptrIN4geos4geom10LineStringESt14default_deleteIS3_EESaIS6_EED2Ev at Base 3.11.0
(optional=templinst)_ZNSt6vectorISt10unique_ptrIN4geos4geom7PolygonESt14default_deleteIS3_EESaIS6_EED1Ev at Base 3.9.0
(optional=templinst)_ZNSt6vectorISt10unique_ptrIN4geos4geom7PolygonESt14default_deleteIS3_EESaIS6_EED2Ev at Base 3.9.0
- (optional=templinst|arch=!m68k)_ZNSt6vectorISt10unique_ptrIN4geos4geom8GeometryESt14default_deleteIS3_EESaIS6_EE17_M_realloc_appendIJRPNS2_10LineStringEEEEvDpOT_ at Base 3.13.0
- (optional=templinst|arch=!m68k)_ZNSt6vectorISt10unique_ptrIN4geos4geom8GeometryESt14default_deleteIS3_EESaIS6_EE17_M_realloc_appendIJS6_EEEvDpOT_ at Base 3.13.0
+ (optional=templinst)_ZNSt6vectorISt10unique_ptrIN4geos4geom8GeometryESt14default_deleteIS3_EESaIS6_EE17_M_realloc_appendIJRPNS2_10LineStringEEEEvDpOT_ at Base 3.13.0
+ (optional=templinst)_ZNSt6vectorISt10unique_ptrIN4geos4geom8GeometryESt14default_deleteIS3_EESaIS6_EE17_M_realloc_appendIJS6_EEEvDpOT_ at Base 3.13.0
(optional=templinst|arch=!alpha !amd64 !arm64 !hurd-amd64 !ia64 !loong64 !mips64el !ppc64 !ppc64el !riscv64 !s390x !sparc64)_ZNSt6vectorISt10unique_ptrIN4geos4geom8GeometryESt14default_deleteIS3_EESaIS6_EE7reserveEj at Base 3.12.0
(optional=templinst|arch=alpha amd64 arm64 hurd-amd64 ia64 loong64 mips64el ppc64 ppc64el riscv64 s390x sparc64)_ZNSt6vectorISt10unique_ptrIN4geos4geom8GeometryESt14default_deleteIS3_EESaIS6_EE7reserveEm at Base 3.12.0
(optional=templinst)_ZNSt6vectorISt10unique_ptrIN4geos4geom8GeometryESt14default_deleteIS3_EESaIS6_EED1Ev at Base 3.9.0
@@ -789,8 +770,6 @@ libgeos_c.so.1 #PACKAGE# #MINVER#
(optional=templinst)_ZNSt8_Rb_treeIPKN4geos4geom12CoordinateXYES4_St9_IdentityIS4_ENS1_18CoordinateLessThanESaIS4_EE16_M_insert_uniqueIS4_EESt4pairISt17_Rb_tree_iteratorIS4_EbEOT_ at Base 3.12.0
(optional=templinst|arch=!alpha !amd64 !arm64 !hppa !hurd-amd64 !ia64 !loong64 !mips64el !ppc64 !ppc64el !riscv64 !s390x !sh4 !sparc64 !x32)_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPN4geos5index7strtree15TemplateSTRNodeIPvNS4_14EnvelopeTraitsEEESt6vectorIS8_SaIS8_EEEENS0_5__ops15_Iter_comp_iterIZNS4_19TemplateSTRtreeImplIS6_S7_E10sortNodesXERKSD_SJ_EUlRKS8_SL_E_EEEvT_SO_SO_T0_ at Base 3.10.1
(optional=templinst|arch=!alpha !amd64 !arm64 !hppa !hurd-amd64 !ia64 !loong64 !mips64el !ppc64 !ppc64el !riscv64 !s390x !sh4 !sparc64 !x32)_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPN4geos5index7strtree15TemplateSTRNodeIPvNS4_14EnvelopeTraitsEEESt6vectorIS8_SaIS8_EEEENS0_5__ops15_Iter_comp_iterIZNS4_19TemplateSTRtreeImplIS6_S7_E10sortNodesYERKSD_SJ_EUlRKS8_SL_E_EEEvT_SO_SO_T0_ at Base 3.10.1
- (optional=templinst|subst)_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPN4geos5index7strtree15TemplateSTRNodeIPvNS4_14EnvelopeTraitsEEESt6vectorIS8_SaIS8_EEEE{ssize_t}NS0_5__ops15_Iter_comp_iterIZNS4_19TemplateSTRtreeImplIS6_S7_E10sortNodesXERKSD_SJ_EUlRKS8_SL_E_EEEvT_SO_T0_T1_ at Base 3.10.0
- (optional=templinst|subst)_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPN4geos5index7strtree15TemplateSTRNodeIPvNS4_14EnvelopeTraitsEEESt6vectorIS8_SaIS8_EEEE{ssize_t}NS0_5__ops15_Iter_comp_iterIZNS4_19TemplateSTRtreeImplIS6_S7_E10sortNodesYERKSD_SJ_EUlRKS8_SL_E_EEEvT_SO_T0_T1_ at Base 3.10.0
_ZTI16CAPI_ItemVisitor at Base 3.4.2
_ZTIN4geos4geom11SurfaceImplINS0_10LinearRingEEE at Base 3.13.0
_ZTIN4geos4geom16CoordinateFilterE at Base 3.4.2
=====================================
debian/libgeos3.14.0.install → debian/libgeos3.14.1.install
=====================================
=====================================
debian/libgeos3.14.0.symbols → debian/libgeos3.14.1.symbols
=====================================
The diff for this file was not included because it is too large.
=====================================
include/geos/geom/Quadrant.h
=====================================
@@ -119,6 +119,24 @@ public:
}
};
+ /** Return a measure that increases monotonically with counterclockwise
+ * angle and avoids trigonometric calculations. Values are consistent
+ * with the numeric quadrant codes
+ *
+ * @param p0 circle center coordinate
+ * @param p1 coordinate for which pseudoangle should be calculated
+ */
+ static double pseudoAngle(const CoordinateXY& p0, const CoordinateXY& p1)
+ {
+ const double dx = p1.x - p0.x;
+ const double dy = p1.y - p0.y;
+
+ const double k = dx / (std::abs(dx) + std::abs(dy));
+ const double w = 2 + (dy > 0 ? 3 - k : 1 + k);
+
+ return w >= 4 ? w - 4 : w;
+ }
+
/**
* Returns true if the quadrants are 1 and 3, or 2 and 4
*/
=====================================
release.md
=====================================
@@ -1,38 +1,10 @@
-2025-08-21
-- New things:
- - Add clustering functions to C API (GH-1154, Dan Baston)
- - Ported LineDissolver (Paul Ramsey)
- - Ported CoverageCleaner (Paul Ramsey)
- - Add GEOSGridIntersectionFractions to C API (GH-1295, Dan Baston)
- - Add functions to interrupt processing in a specific thread/context (GH-803, Dan Baston)
- - Add "geos-targets.cmake" to build tree to allow building other software against
- GEOS build without installing first (GH-1269, Dan Baston)
- - Add GEOSCoordSeq_hasZ, GEOSCoordSeq_hasM (GH-1256, Aurele Ferotin)
- - Add GEOSCoordSeq_createWithDimensions, GEOSCoordSeq_setM, GEOSCoordSeq_getM (GH-1246, Dan Baston)
- - Add GEOSGeoJSONWriter_setOutputDimension (GH-1260, Aurele Ferotin)
- - Add GEOSGeom_transformXYZ (GH-1157, Aurele Ferotin)
- - Add GEOSisSimpleDetail (GH-1296, Dan Baston)
-
-- Breaking Changes:
- - C++17 is now required (GH-1144)
- - Stricter WKT parsing (GH-1241, @freemine)
- - GEOSCoordSeq_setOrdinate returns an error if the sequence does not have the specified ordinate (GH-1245, Dan Baston)
+2025-10-27
- Fixes/Improvements:
- - Fix ConcaveHullOfPolygons nested shell handling (GH-1169, Martin Davis)
- - Fix RelateNG for computing IM for empty-nonempty cases (Martin Davis)
- - Fix TopologyPreservingSimplifier/TaggedLineString to avoid jumping components (JTS-1096, Martin Davis)
- - Fix WKTWriter for small precisions and with trim enabled (GH-1199, Mike Taves)
- - Fix BufferOp to increase length of segments removed by heuristic (GH-1200, Martin Davis)
- - Improve RelateNG performance for A/L cases in prepared predicates (GH-1201, Martin Davis)
- - Improve OffsetCurve to handle mitre joins for polygons (Martin Davis)
- - Fix inscribed circle initialization (GH-1225, Benoit Maurin)
- - Fix overlay heuristic for GeometryCollections with empty elements (GH-1229, Martin Davis)
- - Add ring buffer hole removal heuristic (GH-1233, Martin Davis)
- - Fix buffer element erosion for negative distance and remove overlay deps (GH-1239, Martin Davis)
- - Fix OverlayNG coordinate dimension handling for EMPTY geometries (GH-1258, Martin Davis)
- - Fix DepthSegment comparison logic (really this time) (GH-1266, Martin Davis)
- - Change CoverageGapFinder to return polygons (Martin Davis)
- - Update DiscreteFrechetDistance to new algorithm (GH-1274, Paul Ramsey)
+ - Make floating-point exceptions optional for geosop (GH-1305, Maxim Kochetkov)
+ - Fix undefined behaviour in CoordinateSequence::closeRing (GH-1309, Paul Ramsey)
+ - GridIntersection: Fix crash for certain polygons outside grid extent (Dan Baston)
+ - Fix incorrect envelope calculation for arcs (GH-1314, Dan Baston)
+
=====================================
src/algorithm/CircularArcs.cpp
=====================================
@@ -57,6 +57,8 @@ void
CircularArcs::expandEnvelope(geom::Envelope& e, const geom::CoordinateXY& p0, const geom::CoordinateXY& p1,
const geom::CoordinateXY& p2)
{
+ using geom::Quadrant;
+
e.expandToInclude(p0);
e.expandToInclude(p1);
e.expandToInclude(p2);
@@ -73,22 +75,24 @@ CircularArcs::expandEnvelope(geom::Envelope& e, const geom::CoordinateXY& p0, co
return;
}
- auto orientation = Orientation::index(center, p0, p1);
-
//* 1 | 0
//* --+--
//* 2 | 3
+ const auto pa0 = Quadrant::pseudoAngle(center, p0);
+ const auto pa1 = Quadrant::pseudoAngle(center, p1);
+ const auto pa2 = Quadrant::pseudoAngle(center, p2);
- using geom::Quadrant;
-
- auto q0 = geom::Quadrant::quadrant(center, p0);
- auto q2 = geom::Quadrant::quadrant(center, p2);
+ auto q0 = static_cast<int>(pa0);
+ auto q2 = static_cast<int>(pa2);
double R = center.distance(p1);
if (q0 == q2) {
- // Start and end quadrants are the same. Either the arc crosses all of
+ // Start and end quadrants are the same. Either the arc crosses all
// the axes, or none of the axes.
- if (Orientation::index(center, p1, p2) != orientation) {
+
+ const bool isBetween = pa1 > std::min(pa0, pa2) && pa1 < std::max(pa0, pa2);
+
+ if (!isBetween) {
e.expandToInclude({center.x, center.y + R});
e.expandToInclude({center.x - R, center.y});
e.expandToInclude({center.x, center.y - R});
@@ -98,6 +102,8 @@ CircularArcs::expandEnvelope(geom::Envelope& e, const geom::CoordinateXY& p0, co
return;
}
+ auto orientation = Orientation::index(p0, p1, p2);
+
if (orientation == Orientation::CLOCKWISE) {
std::swap(q0, q2);
}
=====================================
src/coverage/CoverageRingEdges.cpp
=====================================
@@ -13,7 +13,7 @@
*
**********************************************************************/
-#include <map>
+#include <unordered_map>
#include <geos/coverage/CoverageBoundarySegmentFinder.h>
#include <geos/coverage/CoverageEdge.h>
=====================================
src/geom/CoordinateSequence.cpp
=====================================
@@ -261,9 +261,10 @@ void
CoordinateSequence::closeRing(bool allowRepeated)
{
if(!isEmpty() && (allowRepeated || front<CoordinateXY>() != back<CoordinateXY>())) {
- m_vect.insert(m_vect.end(),
- m_vect.begin(),
- std::next(m_vect.begin(), stride()));
+ const std::size_t n = stride();
+ const std::size_t old = m_vect.size();
+ m_vect.resize(old + n);
+ std::copy_n(m_vect.data(), n, m_vect.data() + old);
}
}
=====================================
src/operation/grid/Grid.cpp
=====================================
@@ -63,7 +63,7 @@ Grid<infinite_extent>::getCellEnvelope(size_t row, size_t col) const
}
if (row == 0) {
- cell_ymax = std::max(xmax() + PADDED_CELL_SIZE, m_domain.getMaxX());
+ cell_ymax = std::max(ymax() + PADDED_CELL_SIZE, m_domain.getMaxY());
} else if (row == getNumRows() - 1) {
cell_ymax = ymin(); // because bottom row of regular may have different height from others
} else {
=====================================
tests/unit/CMakeLists.txt
=====================================
@@ -14,6 +14,35 @@ file(GLOB_RECURSE _sources ${CMAKE_CURRENT_LIST_DIR}/*.cpp CONFIGURE_DEPEND)
add_executable(test_geos_unit ${_sources})
unset(_sources)
+# test that std::filesystem header actually is there and works
+if(NOT CMAKE_REQUIRED_QUIET)
+ # CMake 3.17+ use CHECK_START/CHECK_PASS/CHECK_FAIL
+ message(STATUS "Checking if compiler supports std::filesystem")
+endif()
+set(_filename "${CMAKE_CURRENT_BINARY_DIR}/has_filesystem.cpp")
+write_file(${_filename} "\
+#include <filesystem>
+int main() {
+ std::filesystem::path pth {\"../\"};
+ return 0;
+}")
+try_compile(HAVE_STD_FILESYSTEM "${CMAKE_BINARY_DIR}/temp" "${_filename}")
+file(REMOVE "${_filename}")
+unset(_filename)
+if(HAVE_STD_FILESYSTEM)
+ if(NOT CMAKE_REQUIRED_QUIET)
+ # CMake 3.17+ use CHECK_START/CHECK_PASS/CHECK_FAIL
+ message(STATUS "Checking if compiler supports std::filesystem - yes")
+ endif()
+ target_compile_definitions(test_geos_unit PRIVATE HAVE_STD_FILESYSTEM)
+else()
+ if(NOT CMAKE_REQUIRED_QUIET)
+ # CMake 3.17+ use CHECK_START/CHECK_PASS/CHECK_FAIL
+ message(STATUS "Checking if compiler supports std::filesystem - no")
+ endif()
+ target_compile_definitions(test_geos_unit PRIVATE HAVE_STD_FILESYSTEM=0)
+endif()
+
find_package(Threads)
target_link_libraries(test_geos_unit PRIVATE geos geos_c Threads::Threads)
=====================================
tests/unit/algorithm/CircularArcsTest.cpp
=====================================
@@ -215,5 +215,19 @@ void object::test<13>()
3, 4, 3, 4);
}
+template<>
+template<>
+void object::test<14>()
+{
+ set_test_name("envelope: GH #1313");
+
+ CoordinateXY p0{2, 0};
+ CoordinateXY p1{4, 2};
+ CoordinateXY p2{2, 1};
+
+ checkEnvelope(p0, p1, p2,
+ 2, -1.0811388300841898, 5.08113883008419,2.08113883008419);
+}
+
}
=====================================
tests/unit/geom/QuadrantTest.cpp
=====================================
@@ -0,0 +1,83 @@
+#include <tut/tut.hpp>
+
+#include <geos/geom/Quadrant.h>
+
+using geos::geom::Quadrant;
+
+namespace tut {
+
+struct test_quadrant_data {
+
+ static std::string quadrantName(int quadrant) {
+ switch (quadrant) {
+ case Quadrant::NE: return "NE";
+ case Quadrant::NW: return "NW";
+ case Quadrant::SE: return "SE";
+ case Quadrant::SW: return "SW";
+ }
+ return "unknown";
+ }
+
+ static void checkQuadrant(double dx, double dy, int expected) {
+ int quadrant = Quadrant::quadrant({0, 0}, {dx, dy});
+ ensure_equals(quadrant, expected);
+ }
+
+ static void checkPseudoAngleMatchesQuadrant(double dx, double dy) {
+ int quadrant = Quadrant::quadrant({0, 0}, {dx, dy});
+ double pa = Quadrant::pseudoAngle({0, 0}, {dx, dy});
+
+ if (quadrant != static_cast<int>(pa)) {
+ std::stringstream ss;
+ ss << "relative coordinate (" << dx << ", " << dy << ") expected to be in quadrant " << quadrantName(quadrant) << " but pseudoAngle " << pa << " corresponds to quadrant " << quadrantName(static_cast<int>(pa));
+ fail(ss.str());
+ }
+
+ ensure_equals(quadrant, static_cast<int>(pa));
+ }
+};
+
+typedef test_group<test_quadrant_data> group;
+typedef group::object object;
+
+group test_quadrant_group("geos::geom::Quadrant");
+
+template<>
+template<>
+void object::test<1>()
+{
+ checkQuadrant(1, 1, Quadrant::NE);
+ checkQuadrant(1, -1, Quadrant::SE);
+ checkQuadrant(-1, -1, Quadrant::SW);
+ checkQuadrant(-1, 1, Quadrant::NW);
+}
+
+template<>
+template<>
+void object::test<2>()
+{
+ static constexpr double eps = 1e-8;
+
+ // center of each quadrant
+ checkPseudoAngleMatchesQuadrant(1, 1);
+ checkPseudoAngleMatchesQuadrant(1, -1);
+ checkPseudoAngleMatchesQuadrant(-1, -1);
+ checkPseudoAngleMatchesQuadrant(-1, 1);
+
+ // near axes
+ checkPseudoAngleMatchesQuadrant(1, eps); // +X
+ checkPseudoAngleMatchesQuadrant(1, -eps); // +X
+ checkPseudoAngleMatchesQuadrant(eps, 1); // +Y
+ checkPseudoAngleMatchesQuadrant(-eps, 1); // +Y
+ checkPseudoAngleMatchesQuadrant(-1, eps); // +X
+ checkPseudoAngleMatchesQuadrant(-1, -eps); // +X
+ checkPseudoAngleMatchesQuadrant(eps, -1); // -Y
+ checkPseudoAngleMatchesQuadrant(-eps, -1); // -Y
+
+ // axes
+ checkPseudoAngleMatchesQuadrant(1, 0); // +X
+ //checkPseudoAngleMatchesQuadrant(0, 1); // +Y
+ //checkPseudoAngleMatchesQuadrant(-1, 0); // +X
+ //checkPseudoAngleMatchesQuadrant(0, -1); // -Y
+}
+}
=====================================
tests/unit/utility.h
=====================================
@@ -33,11 +33,13 @@
#include <fstream>
#include <sstream>
+#ifndef HAVE_STD_FILESYSTEM
#if defined(__GNUC__) && !defined(__clang__)
#define HAVE_STD_FILESYSTEM (__GNUC__ > 8)
#else
#define HAVE_STD_FILESYSTEM 1
#endif
+#endif /* ifndef HAVE_STD_FILESYSTEM */
#if HAVE_STD_FILESYSTEM
#include <filesystem>
#endif
=====================================
util/geosop/GeometryOp.cpp
=====================================
@@ -238,7 +238,7 @@ std::vector<GeometryOpCreator> opRegistry {
catMetric, "area of geometry",
Result::typeDouble,
[](const Geometry& geom) {
- return new Result( geom.convexHull() );
+ return new Result( geom.getArea() );
});
}},
{"length", [](std::string name) { return GeometryOp::create(name,
=====================================
util/geosop/GeosOp.cpp
=====================================
@@ -26,7 +26,9 @@
#include <geos/io/WKBStreamReader.h>
#include <geos/io/WKBWriter.h>
+#if defined(HAVE_FENV)
#include <cfenv>
+#endif
#include <fstream>
#include <iostream>
#include <sstream>
@@ -394,10 +396,13 @@ void GeosOp::run(OpArguments& opArgs) {
//------------------------
try {
+#if defined(HAVE_FENV)
std::feclearexcept(FE_ALL_EXCEPT); // clear floating-point status flags
+#endif
execute(op, opArgs);
+#if defined(HAVE_FENV)
// Catch everything except for FE_INEXACT, which is usually harmless
const int fpexp = std::fetestexcept(FE_ALL_EXCEPT ^ FE_INEXACT);
if (args.isVerbose && (fpexp != 0)) {
@@ -414,6 +419,7 @@ void GeosOp::run(OpArguments& opArgs) {
std::cerr << " FE_UNDERFLOW";
std::cerr << std::endl;
}
+#endif
}
catch (std::exception &e) {
std::cerr << "Run-time exception: " << e.what() << std::endl;
View it on GitLab: https://salsa.debian.org/debian-gis-team/geos/-/compare/a5bc030e8c9bdc4d6e3f43fb10db3e0783742094...32a64f85d3f4f1ea5d227f6aeaff3fed8edbb8b6
--
View it on GitLab: https://salsa.debian.org/debian-gis-team/geos/-/compare/a5bc030e8c9bdc4d6e3f43fb10db3e0783742094...32a64f85d3f4f1ea5d227f6aeaff3fed8edbb8b6
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20251029/2e6c0adf/attachment-0001.htm>
More information about the Pkg-grass-devel
mailing list