From fac37642157c9ab5a93486b2426debb64335eb3d Mon Sep 17 00:00:00 2001 From: Masashi Katsumata Date: Sat, 7 Nov 2026 21:47:37 -0800 Subject: [PATCH 1/2] Interpolate the closing edge of geodesic polygons makeRing densified a geodesic ring with createInterpolatePoints, which only interpolates between neighbouring points. Rings arrive open, so the closing edge (last vertex -> first) stayed a straight chord in both fill and outline (Boston -> London -> Iceland: the Iceland -> Boston edge). Use ios-sdk-core's densifyGeodesicRing. geodesic=false is unchanged. Requires the ios-sdk-core release that adds densifyGeodesicRing. --- .../polygon/HerePolygonOverlayRenderer.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Sources/MapConductorForHERE/polygon/HerePolygonOverlayRenderer.swift b/Sources/MapConductorForHERE/polygon/HerePolygonOverlayRenderer.swift index 9e34439..2cd70f8 100644 --- a/Sources/MapConductorForHERE/polygon/HerePolygonOverlayRenderer.swift +++ b/Sources/MapConductorForHERE/polygon/HerePolygonOverlayRenderer.swift @@ -177,7 +177,8 @@ final class HerePolygonOverlayRenderer: AbstractPolygonOverlayRenderer [GeoPointProtocol] { - var ring = (geodesic ? WGS84Geodesic.createInterpolatePoints(points) : Planar.createInterpolatePoints(points)) + // geodesic は閉じる辺(末尾 → 先頭)も大圏で補間する(塗りと輪郭が同じ MapPolygon)。 + var ring = (geodesic ? densifyGeodesicRing(points) : Planar.createInterpolatePoints(points)) .map { $0.normalize() } if let first = ring.first, let last = ring.last, !(GeoPoint.from(position: first) == GeoPoint.from(position: last)) { From 0739cbe6908d567c52dfeae59e708b792d8f92fc Mon Sep 17 00:00:00 2001 From: Masashi Katsumata Date: Sat, 7 Nov 2026 23:26:58 -0800 Subject: [PATCH 2/2] Densify the closing edge of non-geodesic polygons too A geodesic=false ring went through Planar.createInterpolatePoints, which only interpolates between neighbouring points, so the closing edge (last vertex -> first) stayed one straight Web Mercator segment while the other edges - and polylines with geodesic=false - follow linear lat/lng interpolation. Use ios-sdk-core's densifyPolygonRing for both modes (it replaces the unreleased densifyGeodesicRing). Requires the ios-sdk-core release that adds densifyPolygonRing. --- .../polygon/HerePolygonOverlayRenderer.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/MapConductorForHERE/polygon/HerePolygonOverlayRenderer.swift b/Sources/MapConductorForHERE/polygon/HerePolygonOverlayRenderer.swift index 2cd70f8..80f76f8 100644 --- a/Sources/MapConductorForHERE/polygon/HerePolygonOverlayRenderer.swift +++ b/Sources/MapConductorForHERE/polygon/HerePolygonOverlayRenderer.swift @@ -177,9 +177,9 @@ final class HerePolygonOverlayRenderer: AbstractPolygonOverlayRenderer [GeoPointProtocol] { - // geodesic は閉じる辺(末尾 → 先頭)も大圏で補間する(塗りと輪郭が同じ MapPolygon)。 - var ring = (geodesic ? densifyGeodesicRing(points) : Planar.createInterpolatePoints(points)) - .map { $0.normalize() } + // 閉じる辺(末尾 → 先頭)も他の辺と同じく補間する(塗りと輪郭が同じ MapPolygon)。 + // geodesic は大圏、geodesic=false は緯度経度の線形補間(ポリラインの false と同じ線)。 + var ring = densifyPolygonRing(points, geodesic: geodesic).map { $0.normalize() } if let first = ring.first, let last = ring.last, !(GeoPoint.from(position: first) == GeoPoint.from(position: last)) { ring.append(first)