View Issue Details

IDProjectCategoryView StatusLast Update
0002463SAS.ПланетаРефакторинг / Refactoringpublic14-06-2015 11:14
Reporterzed Assigned To 
PrioritynormalSeverityminorReproducibilityhave not tried
Status confirmedResolutionopen 
Product Version140505 
Target Version41xxxx 
Summary0002463: В подсистеме sml меток оптимизировать поиск вхождения элементов в прямоугольник
DescriptionСейчас производится полный перебор всех меток и сравнивается входит метка в заданный прямоугольник или нет TMarkDbSml._AddMarksToListByRect. Для такого рода операций поиска, придуман R-tree индекс. Нужно использовать его или что-то похожее.
Additional InformationРеализация на Delphi есть вот тут: R*-tree или индексация геопространственных данных, правда, там нету метода удаления элементов из индекса. Возможно, можно доработать.

Есть крохотная сишная библиотека: R-Tree Library (но с год не обновлялась и вроде как beta).

Так же, этот индекс есть в SQLite (внезапно). Чтобы не зависеть от наличия/отсутствия либы, можно воспользоваться компонентом Synopse, где есть готовые *.obj и соответствующие высокоуровнивые обёртки:
TSQLRecordRTree to implement R-Tree virtual tables.
TagsNo tags attached.

Relationships

related to 0002462 confirmed В подсистеме sml меток оптимизировать чтение геометрии 

Activities

zed

16-07-2014 18:40

manager   ~0014434

Замечу, что для операции поиска меток, нам нужен только ограничивающий прямоугольник, а не целиком вся геометрия метки. Чисто случайно, этот прямоугольник у нас хранится в sml отдельно от геометрии, так что эта оптимизация не нарушит другую: 0002462. Ну, т.е. надо делать так, чтобы не нарушила. Эти две оптимизации можно применить одновременно.

zed

16-07-2014 19:04

manager   ~0014437

Пример использования Synopse: TTestMemoryBased._RTree.

vasketsov

07-05-2015 18:41

manager   ~0015862

>этот индекс есть в SQLite (внезапно)
http://sqlite.org/rtree.html
The source code to the SQLite R*Tree module is included as part of the amalgamation but is disabled by default. To enable the R*Tree module, simply compile with the SQLITE_ENABLE_RTREE C-preprocessor macro defined. With many compilers, this is accomplished by adding the option "-DSQLITE_ENABLE_RTREE=1" to the compiler command-line.

Так что собирать надо SQLite3 для R-tree руками.

zed

07-05-2015 18:53

manager   ~0015863

Last edited: 07-05-2015 18:54

Вообще, да, но можно взять готовый obj из фреймворка mORMot:
http://synopse.info/files/sqlite3obj.7z (постоянная ссылка, сам obj регулярно обновляется до текущей актуальной версии).

Из архива брать файлик sqlite3fts3.obj (включены FTS3 и RTree) и обёртку SynSQLite3Static.pas из репо. Оно, конечно, потянет ещё чутка юнитов из фреймворка, зато "из коропки" будут нужные фичи и статическая линковка.

vasketsov

14-06-2015 11:08

manager   ~0016014

>Вообще, да, но можно взять готовый
>sqlite3fts3.obj (включены FTS3 и RTree)
Я несколько удивлён, но проверил на всех последних официальных билдах - там это есть "из коропки":
SQLite version 3.8.10.2 2015-05-20 18:17:19
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> PRAGMA compile_options;
ENABLE_FTS3
ENABLE_RTREE
SYSTEM_MALLOC
THREADSAFE=0
sqlite>

zed

14-06-2015 11:14

manager   ~0016015

О, вообще круто. Но в случае в прилинкованным объктником можно быть на 100% увернным, что эти опции доступны. А в dll сегодня есть, а завтра нет. Ну или внимательно проверять перед каждым обновлением либы, что там всё включено.

Issue History

Date Modified Username Field Change
16-07-2014 18:33 zed New Issue
16-07-2014 18:33 zed Additional Information Updated
16-07-2014 18:40 zed Note Added: 0014434
16-07-2014 18:40 zed Relationship added related to 0002462
16-07-2014 19:04 zed Note Added: 0014437
24-10-2014 14:29 vdemidov Status new => confirmed
24-10-2014 14:29 vdemidov Target Version => 41xxxx
07-05-2015 18:41 vasketsov Note Added: 0015862
07-05-2015 18:53 zed Note Added: 0015863
07-05-2015 18:54 zed Note Edited: 0015863
07-05-2015 18:54 zed Note Edited: 0015863
14-06-2015 11:08 vasketsov Note Added: 0016014
14-06-2015 11:14 zed Note Added: 0016015
08-08-2025 13:25 zed Category Рефакторинг => Рефакторинг / Refactoring