From d74c86754a41c66ee3624b4c2a5283393801e805 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20H=C3=B6gberg?= Date: Fri, 2 Jan 2026 16:04:09 +0100 Subject: [PATCH] Auto: Sort nearby locations by distance in meters The return value of Distance() differs depending on which version of that's used: Distance( geom1 Geometry , geom2 Geometry ) : Double precision return the distance between geom1 and geom2 (always measured in CRS units). Distance( geom1 Geometry , geom2 Geometry , use_ellipsoid Boolean ) : Double precision return the distance between geom1 and geom2 (measured in meters). Ordering by CRS units causes unexpected item order. Fixes #411 --- .../java/net/vonforst/evmap/storage/ChargeLocationsDao.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/net/vonforst/evmap/storage/ChargeLocationsDao.kt b/app/src/main/java/net/vonforst/evmap/storage/ChargeLocationsDao.kt index 82f4a290b..935e9255e 100644 --- a/app/src/main/java/net/vonforst/evmap/storage/ChargeLocationsDao.kt +++ b/app/src/main/java/net/vonforst/evmap/storage/ChargeLocationsDao.kt @@ -101,7 +101,7 @@ abstract class ChargeLocationsDao { ): List @SkipQueryVerification - @Query("SELECT * FROM chargelocation WHERE dataSource == :dataSource AND PtDistWithin(coordinates, MakePoint(:lng, :lat, 4326), :radius) AND timeRetrieved > :after AND ROWID IN (SELECT ROWID FROM SpatialIndex WHERE f_table_name = 'ChargeLocation' AND f_geometry_column = 'coordinates' AND search_frame = BuildCircleMbr(:lng, :lat, :radius)) ORDER BY Distance(coordinates, MakePoint(:lng, :lat, 4326))") + @Query("SELECT * FROM chargelocation WHERE dataSource == :dataSource AND PtDistWithin(coordinates, MakePoint(:lng, :lat, 4326), :radius) AND timeRetrieved > :after AND ROWID IN (SELECT ROWID FROM SpatialIndex WHERE f_table_name = 'ChargeLocation' AND f_geometry_column = 'coordinates' AND search_frame = BuildCircleMbr(:lng, :lat, :radius)) ORDER BY Distance(coordinates, MakePoint(:lng, :lat, 4326), 0)") abstract suspend fun getChargeLocationsRadius( lat: Double, lng: Double, @@ -583,7 +583,7 @@ class ChargeLocationsRepository( val region = radiusSpatialIndexQuery(location, radius) val order = - "ORDER BY Distance(coordinates, MakePoint(${location.longitude}, ${location.latitude}, 4326))" + "ORDER BY Distance(coordinates, MakePoint(${location.longitude}, ${location.latitude}, 4326), 0)" return queryWithFilters(api, filters, region, order) }