mirror of
https://github.com/tumic0/GPXSee.git
synced 2025-06-27 03:29:16 +02:00
Fix the POI search algorithm
(At least so, that it does not trigger the rtree assert. The whole RectC logic has to be fixed to properly handle poles/dateline "overflows")
This commit is contained in:
@ -1,3 +1,4 @@
|
||||
#include <cmath>
|
||||
#include "wgs84.h"
|
||||
#include "rectc.h"
|
||||
|
||||
@ -6,6 +7,16 @@
|
||||
#define MIN_LON deg2rad(-180.0)
|
||||
#define MAX_LON deg2rad(180.0)
|
||||
|
||||
static inline double WLON(double lon)
|
||||
{
|
||||
return remainder(lon, 360.0);
|
||||
}
|
||||
|
||||
static inline double LLAT(double lat)
|
||||
{
|
||||
return (lat < 0.0) ? qMax(lat, -90.0) : qMin(lat, 90.0);
|
||||
}
|
||||
|
||||
RectC::RectC(const Coordinates ¢er, double radius)
|
||||
{
|
||||
double radDist = radius / WGS84_RADIUS;
|
||||
@ -151,6 +162,12 @@ RectC RectC::united(const Coordinates &c) const
|
||||
return RectC(Coordinates(l, t), Coordinates(r, b));
|
||||
}
|
||||
|
||||
RectC RectC::adjusted(double lon1, double lat1, double lon2, double lat2) const
|
||||
{
|
||||
return RectC(Coordinates(WLON(_tl.lon() + lon1), LLAT(_tl.lat() + lat1)),
|
||||
Coordinates(WLON(_br.lon() + lon2), LLAT(_br.lat() + lat2)));
|
||||
}
|
||||
|
||||
#ifndef QT_NO_DEBUG
|
||||
QDebug operator<<(QDebug dbg, const RectC &rect)
|
||||
{
|
||||
|
@ -40,6 +40,7 @@ public:
|
||||
RectC &operator&=(const RectC &r) {*this = *this & r; return *this;}
|
||||
|
||||
RectC united(const Coordinates &c) const;
|
||||
RectC adjusted(double lon1, double lat1, double lon2, double lat2) const;
|
||||
|
||||
bool intersects(const RectC &r) const
|
||||
{return (right() >= r.left() && bottom() <= r.top() && left() <= r.right()
|
||||
|
Reference in New Issue
Block a user