Tobias Kolb wrote:
Hi,

I'm currently experimenting with the R*Tree support in SQLite. I have to
collect some log data over a timespan and save it linked to the area (not
the exact path, just a minimum bounding rect around) it was collected
(min/max latitude and min/max longitude). Based on this data I want to do
range queries like "get all records within a area (rectangle)". R*Trees
seems perfect for this use case.

So I've created my log data table (but that doesn't matter) and a virtual
rtree table:

CREATE VIRTUAL TABLE log_chunks_geoindex USING rtree(
   id,
   latitude_min,
   latitude_max,
   longitude_min,
   longitude_max
);

The latitude/longitude values are stored as floating point values (e.g.
49.12345, 8.67890). I generated a million records for testing and tried
inserting them in the virtual table. A few hundrets inserted fine, then I
got stucked with this one:

insert into log_chunks_geoindex (id, latitude_min, latitude_max,
longitude_min, longitude_max)
values(473, 49.000472, 49.000473, 8.000472, 8.000473);

Error: constraint failed

Which constraint is affected in this case? The only constraint I know is
that max value has to be greater or equal than min value. But this is the
case! I guess it has something to do with that SQLite stores R*Tree values
only as single precision (32bit) floating point values. But the
documentation says that if the inserted value cannot be represented by a
32bit floating point the value is rounded down for lower-bound coordinated
and rounded up for upper-bound coordinates. So the constraint (min<=max)
should always be met in this case. If I change latitude_max from 49.000473
to 49.0004731 it inserts well.
At a guess you might be running into some rounding error. Why are your bounding areas so small? Can you make them bigger?

I use a much larger area (about 10 miles square in my case) and then do a brute force search on all results returned to find the one I want. This works quite reliably.

--
Project Management Consulting and Training
http://www.ridgelineconsultingllc.com

_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to