Anonymous | Login | Signup for a new account | 22-11-24 02:22 UTC |
All Projects | SAS.Планета | Домен, сайт, форум, багтрекер | Доработка карты (ZMP) | Переводы и локализации | Прочее |
My View | View Issues | Change Log | Roadmap | Search |
View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||||||
0002463 | SAS.Планета | Рефакторинг | public | 16-07-2014 18:33 | 14-06-2015 11:14 | ||||||||
Reporter | zed | ||||||||||||
Assigned To | |||||||||||||
Priority | normal | Severity | minor | Reproducibility | have not tried | ||||||||
Status | confirmed | Resolution | open | ||||||||||
Platform | OS | OS Version | |||||||||||
Product Version | 140505 | ||||||||||||
Target Version | 24xxxx | Fixed in Version | |||||||||||
Summary | 0002463: В подсистеме 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. | ||||||||||||
Tags | No tags attached. | ||||||||||||
Attached Files | |||||||||||||
Relationships | ||||||
|
Notes | |
(0014434) zed (manager) 16-07-2014 18:40 |
Замечу, что для операции поиска меток, нам нужен только ограничивающий прямоугольник, а не целиком вся геометрия метки. Чисто случайно, этот прямоугольник у нас хранится в sml отдельно от геометрии, так что эта оптимизация не нарушит другую: 0002462. Ну, т.е. надо делать так, чтобы не нарушила. Эти две оптимизации можно применить одновременно. |
(0014437) zed (manager) 16-07-2014 19:04 |
Пример использования Synopse: TTestMemoryBased._RTree. |
(0015862) vasketsov (manager) 07-05-2015 18:41 |
>этот индекс есть в 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 руками. |
(0015863) zed (manager) 07-05-2015 18:53 edited on: 07-05-2015 18:54 |
Вообще, да, но можно взять готовый obj из фреймворка mORMot: http://synopse.info/files/sqlite3obj.7z (постоянная ссылка, сам obj регулярно обновляется до текущей актуальной версии). Из архива брать файлик sqlite3fts3.obj (включены FTS3 и RTree) и обёртку SynSQLite3Static.pas из репо. Оно, конечно, потянет ещё чутка юнитов из фреймворка, зато "из коропки" будут нужные фичи и статическая линковка. |
(0016014) vasketsov (manager) 14-06-2015 11:08 |
>Вообще, да, но можно взять готовый >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> |
(0016015) zed (manager) 14-06-2015 11:14 |
О, вообще круто. Но в случае в прилинкованным объктником можно быть на 100% увернным, что эти опции доступны. А в dll сегодня есть, а завтра нет. Ну или внимательно проверять перед каждым обновлением либы, что там всё включено. |
Users who viewed this issue | |
User List | Anonymous (3164x), vdemidov (2x), ygorigor (1x), Robbi (2x), bk99 (1x), zed (3x), vasketsov (3x) |
Total Views | 3176 |
Last View | 22-11-2024 02:22 |
Issue History | |||
Date Modified | Username | Field | Change |
16-07-2014 18:33 | zed | New Issue | |
16-07-2014 18:33 | zed | Additional Information Updated | View Revisions |
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 | => 24xxxx |
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 | View Revisions |
07-05-2015 18:54 | zed | Note Edited: 0015863 | View Revisions |
14-06-2015 11:08 | vasketsov | Note Added: 0016014 | |
14-06-2015 11:14 | zed | Note Added: 0016015 |
My View | View Issues | Change Log | Roadmap | Search |
Copyright © 2007 - 2024 SAS.Planet Team |