osmgl 0.7.0 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/osmgl.cjs +41 -41
- package/dist/osmgl.cjs.map +1 -1
- package/dist/osmgl.d.cts +81 -11
- package/dist/osmgl.d.ts +81 -11
- package/dist/osmgl.global.js +42 -42
- package/dist/osmgl.js +41 -41
- package/dist/osmgl.js.map +1 -1
- package/package.json +1 -1
package/dist/osmgl.d.cts
CHANGED
|
@@ -1780,25 +1780,43 @@ interface ErrorResponse {
|
|
|
1780
1780
|
}
|
|
1781
1781
|
type WorkerResponse = LoadedResponse | ErrorResponse;
|
|
1782
1782
|
|
|
1783
|
-
/**
|
|
1784
|
-
* Пул воркеров с round-robin раздачей.
|
|
1785
|
-
*
|
|
1786
|
-
* Если бандл воркера недоступен (dev из исходников, запрет Blob-воркеров политикой
|
|
1787
|
-
* CSP), пул честно работает в главном потоке: карта тормозит на разборе, но не падает.
|
|
1788
|
-
*/
|
|
1789
1783
|
declare class WorkerPool {
|
|
1790
1784
|
private workers;
|
|
1791
1785
|
private blobUrl;
|
|
1792
1786
|
private pending;
|
|
1787
|
+
private queue;
|
|
1788
|
+
/** Сколько задач сейчас у каждого воркера. */
|
|
1789
|
+
private busy;
|
|
1793
1790
|
private nextId;
|
|
1794
|
-
private cursor;
|
|
1795
1791
|
private mainThreadAborts;
|
|
1796
1792
|
private destroyed;
|
|
1797
1793
|
readonly usingWorkers: boolean;
|
|
1798
1794
|
constructor(size?: number);
|
|
1799
1795
|
get size(): number;
|
|
1800
|
-
/**
|
|
1801
|
-
|
|
1796
|
+
/**
|
|
1797
|
+
* Ставит тайл в очередь. Возвращает id — им же и отменяют.
|
|
1798
|
+
*
|
|
1799
|
+
* `priority` — чем меньше, тем раньше. Порядок постановки значения не имеет: очередь разбирается
|
|
1800
|
+
* по важности, а не по времени (см. [[pump]]).
|
|
1801
|
+
*/
|
|
1802
|
+
load(req: Omit<LoadRequest, 'type' | 'id'>, onDone: (res: WorkerResponse) => void, priority?: number): number;
|
|
1803
|
+
/**
|
|
1804
|
+
* Раздаёт задачи наименее загруженному воркеру, пока у него меньше PER_WORKER задач.
|
|
1805
|
+
*
|
|
1806
|
+
* Почему НЕ по одной. Освобождает воркера главный поток — он получает ответ и отправляет
|
|
1807
|
+
* следующую задачу. Значит при одной задаче на воркера пропускная способность упирается в
|
|
1808
|
+
* главный поток: пока он занят кадром (или притормаживается в скрытой вкладке), воркеры стоят.
|
|
1809
|
+
* Второй задачи в запасе хватает, чтобы работа не прерывалась, и при этом неотменяемыми
|
|
1810
|
+
* оказываются лишь единицы задач вместо трёхсот.
|
|
1811
|
+
*
|
|
1812
|
+
* ПОРЯДОК — ПО ВАЖНОСТИ, А НЕ ПО ОЧЕРЕДИ. На широком экране одно движение камеры ставит триста
|
|
1813
|
+
* с лишним тайлов на семь источников, и в порядке поступления полсотни тайлов самой карты
|
|
1814
|
+
* оказывались перемешаны с двумя с половиной сотнями пробок, точек и размещений: карта под
|
|
1815
|
+
* курсором ждала, пока разберут декор на другом краю кадра. Важность считает источник — она
|
|
1816
|
+
* складывается из его ранга и расстояния до камеры, так что первой приезжает основа в середине
|
|
1817
|
+
* экрана. Выбор минимума перебором: очередь живёт сотнями записей, куча тут не окупается.
|
|
1818
|
+
*/
|
|
1819
|
+
private pump;
|
|
1802
1820
|
abort(id: number): void;
|
|
1803
1821
|
private onMessage;
|
|
1804
1822
|
private disposeWorkers;
|
|
@@ -1968,6 +1986,14 @@ interface TileSourceOptions extends CoverOptions {
|
|
|
1968
1986
|
plan: LayerPlan[];
|
|
1969
1987
|
/** Сколько тайлов держать в кеше сверх видимых. */
|
|
1970
1988
|
cacheSize?: number;
|
|
1989
|
+
/**
|
|
1990
|
+
* Важность источника в общей очереди воркеров: 0 — основа карты, дальше по убыванию.
|
|
1991
|
+
*
|
|
1992
|
+
* Пул один на все источники, и на широком экране пробки с размещениями ставят в него вчетверо
|
|
1993
|
+
* больше тайлов, чем сама карта. Ранг решает, кого разбирать первым. По умолчанию 1 — «поверх
|
|
1994
|
+
* основы».
|
|
1995
|
+
*/
|
|
1996
|
+
rank?: number;
|
|
1971
1997
|
}
|
|
1972
1998
|
interface TileSourceEvents extends Record<string, unknown> {
|
|
1973
1999
|
/** Пришли новые данные — надо перерисовать кадр. */
|
|
@@ -1984,8 +2010,6 @@ declare class TileSource extends Evented<TileSourceEvents> {
|
|
|
1984
2010
|
private pool;
|
|
1985
2011
|
private cache;
|
|
1986
2012
|
private visible;
|
|
1987
|
-
/** Момент, с которого держим прежний набор вместо нового. 0 — не держим. */
|
|
1988
|
-
private holdSince;
|
|
1989
2013
|
/** Показывали ли уже готовую картину. См. [[warm]]. */
|
|
1990
2014
|
private warmed;
|
|
1991
2015
|
/**
|
|
@@ -2022,6 +2046,34 @@ declare class TileSource extends Evented<TileSourceEvents> {
|
|
|
2022
2046
|
get pendingCount(): number;
|
|
2023
2047
|
/** Пересчитывает видимый набор под текущую камеру и запускает недостающие загрузки. */
|
|
2024
2048
|
update(tr: Transform): void;
|
|
2049
|
+
/**
|
|
2050
|
+
* Покрытие из ГОТОВЫХ тайлов: где нужного ещё нет, его место занимает загруженный предок.
|
|
2051
|
+
*
|
|
2052
|
+
* Предок покрывает весь свой квадрат, поэтому подменять им один тайл, оставив рядом второй,
|
|
2053
|
+
* значит закрасить это место дважды — полупрозрачный слой там лёг бы вдвое плотнее. Значит
|
|
2054
|
+
* квадрат берётся целиком, и отсюда главное ограничение: предок годится, только если под ним
|
|
2055
|
+
* НЕТ НИ ОДНОЙ уже готовой цели. Иначе подмена не добавляла бы картинку, а стирала — грубый
|
|
2056
|
+
* предок уносил с собой всю подробность на своей площади, и дальний план пустел. Проверено.
|
|
2057
|
+
*/
|
|
2058
|
+
private coverFor;
|
|
2059
|
+
/**
|
|
2060
|
+
* Готовые потомки целей — по одному проходу ПО КЕШУ, а не перебором дерева вниз.
|
|
2061
|
+
*
|
|
2062
|
+
* Перебор вниз стоит четыре тайла на уровень, шестнадцать на два, шестьдесят четыре на три — и
|
|
2063
|
+
* всё равно упирается в свою глубину: после отдаления на пять зумов загруженное лежит ещё ниже,
|
|
2064
|
+
* и до него так не достать. Проход по кешу дешевле (в нём сотни тайлов, а не тысячи гипотез) и
|
|
2065
|
+
* глубиной не ограничен вовсе.
|
|
2066
|
+
*
|
|
2067
|
+
* Потомки безопасны без оговорок: они лежат ВНУТРИ своей цели, рисовать которую всё равно нечем,
|
|
2068
|
+
* и не пересекаются между собой.
|
|
2069
|
+
*/
|
|
2070
|
+
private descendantsOf;
|
|
2071
|
+
/**
|
|
2072
|
+
* Есть ли в наборе хоть один готовый тайл.
|
|
2073
|
+
*
|
|
2074
|
+
* Порог для «ждать надоело»: показывать набор, где не приехало НИЧЕГО, значит показать пустоту.
|
|
2075
|
+
*/
|
|
2076
|
+
private anyReady;
|
|
2025
2077
|
/** Готов ли набор целиком: у каждого тайла есть ответ — с геометрией, пустой или с ошибкой. */
|
|
2026
2078
|
private readyFor;
|
|
2027
2079
|
/**
|
|
@@ -2032,6 +2084,16 @@ declare class TileSource extends Evented<TileSourceEvents> {
|
|
|
2032
2084
|
* нельзя: за краем кадра его просто не существует, и мы показали бы пустоту вместо загрузки.
|
|
2033
2085
|
*/
|
|
2034
2086
|
private covers;
|
|
2087
|
+
/**
|
|
2088
|
+
* Источник никто не рисует: снять загрузки и очистить видимый набор.
|
|
2089
|
+
*
|
|
2090
|
+
* Набор считался и качался всегда, даже когда ни один его слой на этом зуме не показывают. На
|
|
2091
|
+
* широком экране это давало полторы сотни тайлов размещений на зуме, где 3D-объектов ещё нет
|
|
2092
|
+
* вовсе, и столько же выключенных пробок — и всё это стояло в очереди перед самой картой.
|
|
2093
|
+
* Загруженное остаётся в кеше: вернуться в свой диапазон зума источник должен без повторной
|
|
2094
|
+
* загрузки.
|
|
2095
|
+
*/
|
|
2096
|
+
deactivate(): void;
|
|
2035
2097
|
private loadTile;
|
|
2036
2098
|
/**
|
|
2037
2099
|
* Готовый предок для тайла, который ещё грузится — чтобы на его месте не зияла
|
|
@@ -5507,6 +5569,14 @@ declare class Map$1 extends Evented<MapEvents> {
|
|
|
5507
5569
|
* при смене темы, — и забытое место означало бы «объекты пропали после
|
|
5508
5570
|
* переключения темы».
|
|
5509
5571
|
*/
|
|
5572
|
+
/**
|
|
5573
|
+
* Рисует ли этот набор хоть кто-нибудь на текущем зуме.
|
|
5574
|
+
*
|
|
5575
|
+
* Считаем по СТИЛЮ, а не по плану воркера: план нарочно не знает ни зумов слоя, ни тумблеров
|
|
5576
|
+
* видимости — тайл кешируется один раз и обязан оставаться пригодным на любом зуме. А вот
|
|
5577
|
+
* КАЧАТЬ его, пока ни один слой набора не показывают, смысла нет.
|
|
5578
|
+
*/
|
|
5579
|
+
private sourceDrawn;
|
|
5510
5580
|
private planFor;
|
|
5511
5581
|
/**
|
|
5512
5582
|
* Пересчёт детальных 3D-объектов по текущей камере.
|
package/dist/osmgl.d.ts
CHANGED
|
@@ -1780,25 +1780,43 @@ interface ErrorResponse {
|
|
|
1780
1780
|
}
|
|
1781
1781
|
type WorkerResponse = LoadedResponse | ErrorResponse;
|
|
1782
1782
|
|
|
1783
|
-
/**
|
|
1784
|
-
* Пул воркеров с round-robin раздачей.
|
|
1785
|
-
*
|
|
1786
|
-
* Если бандл воркера недоступен (dev из исходников, запрет Blob-воркеров политикой
|
|
1787
|
-
* CSP), пул честно работает в главном потоке: карта тормозит на разборе, но не падает.
|
|
1788
|
-
*/
|
|
1789
1783
|
declare class WorkerPool {
|
|
1790
1784
|
private workers;
|
|
1791
1785
|
private blobUrl;
|
|
1792
1786
|
private pending;
|
|
1787
|
+
private queue;
|
|
1788
|
+
/** Сколько задач сейчас у каждого воркера. */
|
|
1789
|
+
private busy;
|
|
1793
1790
|
private nextId;
|
|
1794
|
-
private cursor;
|
|
1795
1791
|
private mainThreadAborts;
|
|
1796
1792
|
private destroyed;
|
|
1797
1793
|
readonly usingWorkers: boolean;
|
|
1798
1794
|
constructor(size?: number);
|
|
1799
1795
|
get size(): number;
|
|
1800
|
-
/**
|
|
1801
|
-
|
|
1796
|
+
/**
|
|
1797
|
+
* Ставит тайл в очередь. Возвращает id — им же и отменяют.
|
|
1798
|
+
*
|
|
1799
|
+
* `priority` — чем меньше, тем раньше. Порядок постановки значения не имеет: очередь разбирается
|
|
1800
|
+
* по важности, а не по времени (см. [[pump]]).
|
|
1801
|
+
*/
|
|
1802
|
+
load(req: Omit<LoadRequest, 'type' | 'id'>, onDone: (res: WorkerResponse) => void, priority?: number): number;
|
|
1803
|
+
/**
|
|
1804
|
+
* Раздаёт задачи наименее загруженному воркеру, пока у него меньше PER_WORKER задач.
|
|
1805
|
+
*
|
|
1806
|
+
* Почему НЕ по одной. Освобождает воркера главный поток — он получает ответ и отправляет
|
|
1807
|
+
* следующую задачу. Значит при одной задаче на воркера пропускная способность упирается в
|
|
1808
|
+
* главный поток: пока он занят кадром (или притормаживается в скрытой вкладке), воркеры стоят.
|
|
1809
|
+
* Второй задачи в запасе хватает, чтобы работа не прерывалась, и при этом неотменяемыми
|
|
1810
|
+
* оказываются лишь единицы задач вместо трёхсот.
|
|
1811
|
+
*
|
|
1812
|
+
* ПОРЯДОК — ПО ВАЖНОСТИ, А НЕ ПО ОЧЕРЕДИ. На широком экране одно движение камеры ставит триста
|
|
1813
|
+
* с лишним тайлов на семь источников, и в порядке поступления полсотни тайлов самой карты
|
|
1814
|
+
* оказывались перемешаны с двумя с половиной сотнями пробок, точек и размещений: карта под
|
|
1815
|
+
* курсором ждала, пока разберут декор на другом краю кадра. Важность считает источник — она
|
|
1816
|
+
* складывается из его ранга и расстояния до камеры, так что первой приезжает основа в середине
|
|
1817
|
+
* экрана. Выбор минимума перебором: очередь живёт сотнями записей, куча тут не окупается.
|
|
1818
|
+
*/
|
|
1819
|
+
private pump;
|
|
1802
1820
|
abort(id: number): void;
|
|
1803
1821
|
private onMessage;
|
|
1804
1822
|
private disposeWorkers;
|
|
@@ -1968,6 +1986,14 @@ interface TileSourceOptions extends CoverOptions {
|
|
|
1968
1986
|
plan: LayerPlan[];
|
|
1969
1987
|
/** Сколько тайлов держать в кеше сверх видимых. */
|
|
1970
1988
|
cacheSize?: number;
|
|
1989
|
+
/**
|
|
1990
|
+
* Важность источника в общей очереди воркеров: 0 — основа карты, дальше по убыванию.
|
|
1991
|
+
*
|
|
1992
|
+
* Пул один на все источники, и на широком экране пробки с размещениями ставят в него вчетверо
|
|
1993
|
+
* больше тайлов, чем сама карта. Ранг решает, кого разбирать первым. По умолчанию 1 — «поверх
|
|
1994
|
+
* основы».
|
|
1995
|
+
*/
|
|
1996
|
+
rank?: number;
|
|
1971
1997
|
}
|
|
1972
1998
|
interface TileSourceEvents extends Record<string, unknown> {
|
|
1973
1999
|
/** Пришли новые данные — надо перерисовать кадр. */
|
|
@@ -1984,8 +2010,6 @@ declare class TileSource extends Evented<TileSourceEvents> {
|
|
|
1984
2010
|
private pool;
|
|
1985
2011
|
private cache;
|
|
1986
2012
|
private visible;
|
|
1987
|
-
/** Момент, с которого держим прежний набор вместо нового. 0 — не держим. */
|
|
1988
|
-
private holdSince;
|
|
1989
2013
|
/** Показывали ли уже готовую картину. См. [[warm]]. */
|
|
1990
2014
|
private warmed;
|
|
1991
2015
|
/**
|
|
@@ -2022,6 +2046,34 @@ declare class TileSource extends Evented<TileSourceEvents> {
|
|
|
2022
2046
|
get pendingCount(): number;
|
|
2023
2047
|
/** Пересчитывает видимый набор под текущую камеру и запускает недостающие загрузки. */
|
|
2024
2048
|
update(tr: Transform): void;
|
|
2049
|
+
/**
|
|
2050
|
+
* Покрытие из ГОТОВЫХ тайлов: где нужного ещё нет, его место занимает загруженный предок.
|
|
2051
|
+
*
|
|
2052
|
+
* Предок покрывает весь свой квадрат, поэтому подменять им один тайл, оставив рядом второй,
|
|
2053
|
+
* значит закрасить это место дважды — полупрозрачный слой там лёг бы вдвое плотнее. Значит
|
|
2054
|
+
* квадрат берётся целиком, и отсюда главное ограничение: предок годится, только если под ним
|
|
2055
|
+
* НЕТ НИ ОДНОЙ уже готовой цели. Иначе подмена не добавляла бы картинку, а стирала — грубый
|
|
2056
|
+
* предок уносил с собой всю подробность на своей площади, и дальний план пустел. Проверено.
|
|
2057
|
+
*/
|
|
2058
|
+
private coverFor;
|
|
2059
|
+
/**
|
|
2060
|
+
* Готовые потомки целей — по одному проходу ПО КЕШУ, а не перебором дерева вниз.
|
|
2061
|
+
*
|
|
2062
|
+
* Перебор вниз стоит четыре тайла на уровень, шестнадцать на два, шестьдесят четыре на три — и
|
|
2063
|
+
* всё равно упирается в свою глубину: после отдаления на пять зумов загруженное лежит ещё ниже,
|
|
2064
|
+
* и до него так не достать. Проход по кешу дешевле (в нём сотни тайлов, а не тысячи гипотез) и
|
|
2065
|
+
* глубиной не ограничен вовсе.
|
|
2066
|
+
*
|
|
2067
|
+
* Потомки безопасны без оговорок: они лежат ВНУТРИ своей цели, рисовать которую всё равно нечем,
|
|
2068
|
+
* и не пересекаются между собой.
|
|
2069
|
+
*/
|
|
2070
|
+
private descendantsOf;
|
|
2071
|
+
/**
|
|
2072
|
+
* Есть ли в наборе хоть один готовый тайл.
|
|
2073
|
+
*
|
|
2074
|
+
* Порог для «ждать надоело»: показывать набор, где не приехало НИЧЕГО, значит показать пустоту.
|
|
2075
|
+
*/
|
|
2076
|
+
private anyReady;
|
|
2025
2077
|
/** Готов ли набор целиком: у каждого тайла есть ответ — с геометрией, пустой или с ошибкой. */
|
|
2026
2078
|
private readyFor;
|
|
2027
2079
|
/**
|
|
@@ -2032,6 +2084,16 @@ declare class TileSource extends Evented<TileSourceEvents> {
|
|
|
2032
2084
|
* нельзя: за краем кадра его просто не существует, и мы показали бы пустоту вместо загрузки.
|
|
2033
2085
|
*/
|
|
2034
2086
|
private covers;
|
|
2087
|
+
/**
|
|
2088
|
+
* Источник никто не рисует: снять загрузки и очистить видимый набор.
|
|
2089
|
+
*
|
|
2090
|
+
* Набор считался и качался всегда, даже когда ни один его слой на этом зуме не показывают. На
|
|
2091
|
+
* широком экране это давало полторы сотни тайлов размещений на зуме, где 3D-объектов ещё нет
|
|
2092
|
+
* вовсе, и столько же выключенных пробок — и всё это стояло в очереди перед самой картой.
|
|
2093
|
+
* Загруженное остаётся в кеше: вернуться в свой диапазон зума источник должен без повторной
|
|
2094
|
+
* загрузки.
|
|
2095
|
+
*/
|
|
2096
|
+
deactivate(): void;
|
|
2035
2097
|
private loadTile;
|
|
2036
2098
|
/**
|
|
2037
2099
|
* Готовый предок для тайла, который ещё грузится — чтобы на его месте не зияла
|
|
@@ -5507,6 +5569,14 @@ declare class Map$1 extends Evented<MapEvents> {
|
|
|
5507
5569
|
* при смене темы, — и забытое место означало бы «объекты пропали после
|
|
5508
5570
|
* переключения темы».
|
|
5509
5571
|
*/
|
|
5572
|
+
/**
|
|
5573
|
+
* Рисует ли этот набор хоть кто-нибудь на текущем зуме.
|
|
5574
|
+
*
|
|
5575
|
+
* Считаем по СТИЛЮ, а не по плану воркера: план нарочно не знает ни зумов слоя, ни тумблеров
|
|
5576
|
+
* видимости — тайл кешируется один раз и обязан оставаться пригодным на любом зуме. А вот
|
|
5577
|
+
* КАЧАТЬ его, пока ни один слой набора не показывают, смысла нет.
|
|
5578
|
+
*/
|
|
5579
|
+
private sourceDrawn;
|
|
5510
5580
|
private planFor;
|
|
5511
5581
|
/**
|
|
5512
5582
|
* Пересчёт детальных 3D-объектов по текущей камере.
|