@nextgis/ngw-map 1.11.3 → 1.11.10

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.
@@ -1,4 +1,4 @@
1
- /** Bundle of @nextgis/ngw-map; version: 1.11.3; author: NextGIS */
1
+ /** Bundle of @nextgis/ngw-map; version: 1.11.10; author: NextGIS */
2
2
  import { EventEmitter } from 'events';
3
3
  import CancelablePromise from '@nextgis/cancelable-promise';
4
4
  import { deepmerge, deprecatedWarn, defined, isObject } from '@nextgis/utils';
@@ -155,9 +155,9 @@ class NgwMap extends WebMap {
155
155
  *
156
156
  * @example
157
157
  * ```javascript
158
- * // add raster layer resourceId is the style of 4004 layer
158
+ * // Add raster layer resourceId is the style of 4004 layer
159
159
  * ngwMap.addNgwLayer({ resource: 4005 });
160
- * // add vector data from layer GEOJSON source
160
+ * // Add vector data from layer GEOJSON source
161
161
  * ngwMap.addNgwLayer({
162
162
  * resource: 4038,
163
163
  * adapter: 'GEOJSON',
@@ -316,7 +316,7 @@ class NgwMap extends WebMap {
316
316
  *
317
317
  * @example
318
318
  * ```javascript
319
- * const ngwLayer = ngwMap.addNgwLayer({ id: 'ngw_layer_name', resourceId: 4005 });
319
+ * const ngwLayer = ngwMap.addNgwLayer({ id: 'ngw_layer_name', resource: 4005 });
320
320
  * ngwMap.fitLayer(ngwLayer);
321
321
  * ngwMap.fitLayer('ngw_layer_name');
322
322
  * ```
@@ -1 +1 @@
1
- {"version":3,"file":"ngw-map.esm-bundler.js","sources":["../src/utils/appendNgwResources.ts","../src/utils/prepareWebMapOptions.ts","../src/utils/getIentifyRadius.ts","../src/NgwMap.ts","../src/index.ts"],"sourcesContent":["import type { NgwLayerOptions } from '@nextgis/ngw-kit';\nimport type { NgwResourceDefinition } from '../interfaces';\n\nexport function appendNgwResources(\n options: NgwLayerOptions[],\n resource?: NgwResourceDefinition,\n defOptions?: Partial<NgwLayerOptions>,\n overwriteOptions?: Partial<NgwLayerOptions>,\n): void {\n if (typeof resource === 'number' || typeof resource === 'string') {\n resource = Number(resource);\n options.push({\n ...defOptions,\n resource,\n });\n } else if (Array.isArray(resource)) {\n const [resourceId, id] = resource;\n options.push({\n ...defOptions,\n resource: resourceId,\n id,\n ...overwriteOptions,\n });\n } else if (typeof resource === 'object') {\n options.push({ ...defOptions, ...resource, ...overwriteOptions });\n }\n}\n","import { deepmerge } from '@nextgis/utils';\nimport { StarterKit, MapOptions } from '@nextgis/webmap';\nimport NgwConnector from '@nextgis/ngw-connector';\nimport { QmsKit } from '@nextgis/qms-kit';\nimport { NgwKit } from '@nextgis/ngw-kit';\n\nimport { NgwMapOptions } from '../interfaces';\n\nexport const OPTIONS: NgwMapOptions = {\n target: 'map',\n baseUrl: '',\n whitlabel: false,\n controls: ['ZOOM', 'ATTRIBUTION'],\n controlsOptions: {\n ZOOM: { position: 'top-left' },\n ATTRIBUTION: {\n position: 'bottom-right',\n customAttribution: [\n '<a href=\"https://nextgis.com\" target=\"_blank\">©NextGIS</a>',\n ],\n },\n },\n pixelRadius: 10,\n};\n\nexport function prepareWebMapOptions(options: NgwMapOptions): MapOptions {\n const kits: StarterKit[] = [new QmsKit()];\n if (options.starterKits) {\n options.starterKits.forEach((x) => {\n kits.push(x);\n });\n }\n\n if (!options.connector) {\n options.connector = new NgwConnector({\n baseUrl: options.baseUrl || '',\n auth: options.auth,\n });\n } else if (options.connector) {\n options.baseUrl = options.connector.options.baseUrl;\n }\n options = deepmerge(OPTIONS, options);\n\n if (!options.center && !options.bounds) {\n options.bounds = [-179, -90, 180, 90];\n // options.maxBounds = options.bounds;\n }\n\n if (options.connector) {\n kits.push(\n new NgwKit({\n connector: options.connector,\n auth: options.auth,\n }),\n );\n }\n options = {\n ...options,\n starterKits: kits,\n create: false,\n };\n return options;\n}\n","import { LngLatArray } from '@nextgis/utils';\n\nexport function getIdentifyRadius(\n center: LngLatArray,\n zoom: number,\n pixelRadius: number,\n): number {\n pixelRadius = pixelRadius ?? 10;\n const metresPerPixel =\n (40075016.686 * Math.abs(Math.cos((center[1] * 180) / Math.PI))) /\n Math.pow(2, zoom + 8);\n const radius = pixelRadius * metresPerPixel * 0.0005;\n return radius;\n}\n","import StrictEventEmitter from 'strict-event-emitter-types';\nimport { EventEmitter } from 'events';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { defined, isObject } from '@nextgis/utils';\nimport { AdapterOptions, WebMap } from '@nextgis/webmap';\nimport NgwConnector from '@nextgis/ngw-connector';\n\nimport {\n fetchNgwLayerFeatureCollection,\n fetchNgwResourceExtent,\n createNgwLayerAdapter,\n fetchNgwLayerFeature,\n fetchIdentifyGeoJson,\n sendIdentifyRequest,\n createIdentifyItem,\n fetchNgwLayerItems,\n fetchIdentifyItem,\n fetchNgwLayerItem,\n getIdentifyItems,\n getCompanyLogo,\n} from '@nextgis/ngw-kit';\nimport { deprecatedWarn } from '@nextgis/utils';\nimport { getIcon } from '@nextgis/icons';\n\nimport { appendNgwResources } from './utils/appendNgwResources';\nimport { prepareWebMapOptions } from './utils/prepareWebMapOptions';\n\nimport type { JsonMap, FeatureProperties } from '@nextgis/utils';\nimport type {\n FeatureItem,\n LayerFeature,\n ResourceItem,\n FeatureLayersIdentify,\n FeatureLayersIdentifyItems,\n} from '@nextgis/ngw-connector';\nimport type {\n OnLayerMouseOptions,\n ControlPosition,\n FilterOptions,\n MapClickEvent,\n LayerAdapter,\n WebMapEvents,\n MapControls,\n FitOptions,\n LayerDef,\n} from '@nextgis/webmap';\nimport type {\n NgwIdentify,\n NgwWebmapItem,\n ResourceAdapter,\n FetchNgwItemsOptions,\n NgwFeatureItemResponse,\n NgwFeatureRequestOptions,\n} from '@nextgis/ngw-kit';\nimport type { Geometry, Feature, FeatureCollection } from 'geojson';\nimport type { PropertiesFilter } from '@nextgis/properties-filter';\nimport type { QmsAdapterOptions } from '@nextgis/qms-kit';\nimport type { NgwLayerOptions } from '@nextgis/ngw-kit';\nimport type {\n NgwIdentifyEvent,\n NgwMapOptions,\n NgwMapEvents,\n NgwLayers,\n} from './interfaces';\nimport type { FetchNgwItemOptions } from '@nextgis/ngw-kit';\nimport { getIdentifyRadius } from './utils/getIentifyRadius';\n\ntype PromiseGroup = 'select' | 'identify';\n\n/**\n * Base class containing the logic of interaction WebMap with NextGIS services.\n *\n * @example\n * ```javascript\n * import { NgwMap } from '@nextgis/ngw-map';\n * import MapAdapter from '@nextgis/leaflet-map-adapter';\n * // styles are not included in the leaflet-map-adapter\n * import 'leaflet/dist/leaflet.css';\n *\n * const ngwMap = new NgwMap({\n * mapAdapter: new MapAdapter(),\n * target: 'map',\n * qmsId: 448,\n * baseUrl: 'https://demo.nextgis.com',\n * webmapId: 3985\n * });\n * ```\n */\nexport class NgwMap<\n M = unknown,\n L = unknown,\n C = unknown,\n O extends NgwMapOptions<C> = NgwMapOptions<C>,\n> extends WebMap<M, L, C, NgwMapEvents, O> {\n static getIcon = getIcon;\n\n readonly emitter: StrictEventEmitter<EventEmitter, NgwMapEvents> =\n new EventEmitter();\n connector!: NgwConnector;\n\n protected _ngwLayers: NgwLayers = {};\n private $$selectFromNgwRaster?: (ev: MapClickEvent) => void;\n private $$selectFromNgwVector?: (ev: OnLayerMouseOptions) => void;\n private _promises: Record<PromiseGroup, CancelablePromise[]> = {\n select: [],\n identify: [],\n };\n\n constructor(options: O) {\n super(prepareWebMapOptions(options) as O);\n if (options.connector) {\n this.connector = options.connector;\n }\n this._createWebMap().then(() => {\n const container = this.getContainer();\n if (container) {\n container.classList.add('ngw-map-container');\n }\n if (this.options.whitlabel) {\n this._whiteLabel();\n }\n });\n }\n\n /**\n * Organized addition to the map design and controls elements,\n * calling `control.onAdd(this.webMap.mapAdapter)`\n * @param control - object with onAdd and onRemove methods\n * or a string value indicating the name of the control installed in the map adapter\n * @param position - position relative to the map angles\n * @param options - initialization parameters if the control is set as a string value\n *\n * @example\n * ```javascript\n * ngwMap.addControl(new CustomControl(), 'bottom-left');\n * ngwMap.addControl('ZOOM', 'top-right')\n * ```\n */\n async addControl<K extends keyof MapControls>(\n controlDef: K | C,\n position: ControlPosition,\n options?: MapControls[K],\n ): Promise<any> {\n await this.onLoad('controls:create');\n return super.addControl(controlDef, position, options);\n }\n\n /**\n * Add any (style, vector, webmap) NGW layer by resource definition.\n * @param options - set layer identification parameters and render method.\n *\n * @example\n * ```javascript\n * // add raster layer resourceId is the style of 4004 layer\n * ngwMap.addNgwLayer({ resource: 4005 });\n * // add vector data from layer GEOJSON source\n * ngwMap.addNgwLayer({\n * resource: 4038,\n * adapter: 'GEOJSON',\n * adapterOptions: { paint: { color: 'red' } }\n * });\n * ```\n */\n async addNgwLayer(\n options: NgwLayerOptions,\n ): Promise<ResourceAdapter | undefined> {\n await this.onMapLoad();\n // @ts-ignore for backward compatibility\n const { keyname, resourceId } = options;\n\n if (keyname || resourceId !== undefined) {\n deprecatedWarn(\n 'set `resource` options instead of `keyname` or `resourceId`',\n );\n }\n\n const resource = options.resource;\n if (!keyname && !resourceId && !resource) {\n throw new Error(\n 'resource, resourceId or keyname is required parameter to add NGW layer',\n );\n }\n if (defined(this.options.baseUrl)) {\n try {\n if (defined(this.options.setViewDelay)) {\n options.adapterOptions = options.adapterOptions || {};\n if (!defined(options.adapterOptions.setViewDelay)) {\n options.adapterOptions.setViewDelay = this.options.setViewDelay;\n }\n }\n const adapter = createNgwLayerAdapter(options, this, this.connector);\n const adapterOpts = {\n visibility: true,\n // TODO: do not merge options, use only `adapterOptions`\n ...options,\n ...options.adapterOptions,\n } as AdapterOptions;\n const layer = (await this.addLayer(\n adapter,\n adapterOpts,\n )) as ResourceAdapter<M, L, AdapterOptions>;\n const id = layer && this.getLayerId(layer);\n if (layer && id) {\n this._ngwLayers[id] = { layer, resourceId: layer.resourceId };\n layer.options.name =\n layer.options.name ||\n (layer.item && layer.item.resource.display_name);\n if (layer.options.baselayer) {\n const visibleLayerBaseLayer = this.getActiveBaseLayer();\n if (visibleLayerBaseLayer) {\n return layer;\n }\n }\n }\n return layer;\n } catch (er) {\n const resId =\n isObject(resource) && 'id' in resource\n ? resource.id\n : keyname || resourceId || resource;\n console.error(`Can't add NGW layer ${resId}.`, er);\n }\n }\n }\n\n /**\n * Pans and zooms the map to the initial position specified in the options\n */\n fit(): void {\n const { center, zoom, bounds } = this.options;\n if (center) {\n this.setCenter(center);\n if (zoom) {\n this.setZoom(zoom);\n }\n } else if (bounds) {\n this.fitBounds(bounds);\n }\n }\n\n fetchNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): CancelablePromise<FeatureItem> {\n return fetchNgwLayerItem<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): CancelablePromise<FeatureItem<F, G>[]> {\n return fetchNgwLayerItems<G, F>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): CancelablePromise<Feature<G, P>> {\n return fetchNgwLayerFeature<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemsOptions<P>, 'connector'>,\n ): CancelablePromise<FeatureCollection<G, P>> {\n return fetchNgwLayerFeatureCollection({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchIdentifyItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n identify: NgwIdentify,\n requestOptions?: NgwFeatureRequestOptions,\n // multiple = false\n ): CancelablePromise<NgwFeatureItemResponse<P, G> | undefined> {\n const promise = fetchIdentifyItem<G, P>({\n identify,\n connector: this.connector,\n requestOptions,\n // multiple,\n });\n\n this._addPromise('identify', promise);\n return promise;\n }\n\n fetchIdentifyGeoJson(\n identify: NgwIdentify,\n multiple = false,\n ): CancelablePromise<Feature | undefined> {\n const promise = fetchIdentifyGeoJson({\n identify,\n connector: this.connector,\n multiple,\n });\n if (promise && 'then' in promise) {\n this._addPromise('identify', promise);\n return promise;\n } else {\n return CancelablePromise.resolve(promise);\n }\n }\n\n /**\n * @deprecated use {@link fetchIdentifyGeoJson} instead\n */\n getIdentifyGeoJson(\n identify: NgwIdentify,\n multiple = false,\n ): CancelablePromise<Feature | undefined> {\n return this.fetchIdentifyGeoJson(identify, multiple);\n }\n\n async getNgwLayers(): Promise<NgwLayers> {\n await this.onLoad();\n return this._ngwLayers;\n }\n\n async getNgwLayerByResourceId(id: number): Promise<LayerAdapter | undefined> {\n for (const n in this._ngwLayers) {\n const mem = this._ngwLayers[n];\n if (mem.resourceId === id) {\n return mem && mem.layer;\n } else if (mem.layer.getIdentificationIds) {\n const ids = await mem.layer.getIdentificationIds();\n if (ids && ids.some((x) => x === id)) {\n return mem.layer;\n }\n }\n if (mem.layer.getDependLayers) {\n const dependLayers = mem.layer.getDependLayers() as NgwWebmapItem[];\n const dependFit = dependLayers.find((x) => {\n return x.item && x.item.parentId === id;\n });\n if (dependFit) {\n return dependFit.layer;\n }\n }\n }\n }\n\n /**\n * Move map to layer. If the layer is NGW resource, extent will be received from the server\n *\n * @example\n * ```javascript\n * const ngwLayer = ngwMap.addNgwLayer({ id: 'ngw_layer_name', resourceId: 4005 });\n * ngwMap.fitLayer(ngwLayer);\n * ngwMap.fitLayer('ngw_layer_name');\n * ```\n */\n async fitLayer(layerDef: LayerDef, options?: FitOptions): Promise<void> {\n let id: string | undefined;\n if (typeof layerDef === 'string' || typeof layerDef === 'number') {\n id = String(id);\n } else {\n id = layerDef.id;\n }\n const ngwLayer = id && this._ngwLayers[id];\n if (ngwLayer) {\n if (ngwLayer.layer.getBounds) {\n const bounds = await ngwLayer.layer.getBounds();\n if (bounds) {\n this.fitBounds(bounds, options);\n }\n } else {\n let item: ResourceItem | undefined;\n if (ngwLayer.layer.item) {\n item = ngwLayer.layer.item;\n } else {\n const resourceId = ngwLayer.resourceId;\n item = await this.connector.getResource(resourceId);\n }\n if (item) {\n fetchNgwResourceExtent(item, this.connector).then((extent) => {\n if (extent) {\n this.fitBounds(extent, options);\n }\n });\n }\n }\n } else {\n super.fitLayer(layerDef, options);\n }\n }\n\n /** @deprecated use {@link NgwMap.fitLayer} instead */\n async zoomToLayer(layerDef: string | ResourceAdapter): Promise<void> {\n return this.fitLayer(layerDef);\n }\n\n onLoad(event: keyof NgwMapEvents = 'ngw-map:create'): Promise<this> {\n return super.onLoad(event as keyof WebMapEvents);\n }\n\n removeLayer(layerDef: LayerDef): void {\n const layer = this.getLayer(layerDef);\n if (layer) {\n const layerId = this.getLayerId(layer);\n if (layerId) {\n delete this._ngwLayers[layerId];\n }\n super.removeLayer(layer);\n }\n }\n\n enableSelection(): void {\n if (!this.$$selectFromNgwRaster) {\n this.$$selectFromNgwRaster = (ev: MapClickEvent) => {\n const count = this.emitter.listenerCount('ngw:select');\n if (count) {\n this._selectFromNgwRaster(ev);\n }\n };\n this.$$selectFromNgwVector = (ev: OnLayerMouseOptions) => {\n if (this.emitter.listenerCount('ngw:select')) {\n this._selectFromNgwVector(ev);\n }\n };\n this.emitter.on('click', this.$$selectFromNgwRaster);\n this.emitter.on('layer:click', this.$$selectFromNgwVector);\n }\n }\n\n disableSelection(): void {\n if (this.$$selectFromNgwRaster) {\n this.emitter.removeListener('click', this.$$selectFromNgwRaster);\n this.emitter.removeListener('click', this._selectFromNgwVector);\n this.$$selectFromNgwRaster = undefined;\n this.$$selectFromNgwVector = undefined;\n }\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerItem} instead\n */\n getNgwLayerItem(options: {\n resourceId: number;\n featureId: number;\n }): CancelablePromise<FeatureItem> {\n return this.fetchNgwLayerItem(options);\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerItems} instead\n */\n getNgwLayerItems(\n options: {\n resourceId: number;\n connector?: NgwConnector;\n filters?: PropertiesFilter;\n } & FilterOptions,\n ): CancelablePromise<FeatureItem[]> {\n return this.fetchNgwLayerItems(options);\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerFeature} instead\n */\n getNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends JsonMap = JsonMap,\n >(options: {\n resourceId: number;\n featureId: number;\n }): CancelablePromise<Feature<G, P>> {\n return this.fetchNgwLayerFeature(options);\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerFeatures} instead\n */\n getNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends JsonMap = JsonMap,\n >(\n options: FetchNgwItemsOptions<P>,\n ): CancelablePromise<FeatureCollection<G, P>> {\n return this.fetchNgwLayerFeatures(options);\n }\n\n /** @deprecated use {@link NgwMap.cancelPromises} instead */\n cancelPromise(...args: PromiseGroup[]): void {\n this.cancelPromises(...args);\n }\n\n cancelPromises(...args: PromiseGroup[]): void {\n if (!args.length) {\n args = Object.keys(this._promises) as PromiseGroup[];\n }\n args.forEach((name) => {\n const group = this._promises[name];\n if (group) {\n group.forEach((x) => x.cancel());\n this._promises[name] = [];\n }\n });\n }\n\n private _addPromise(groupName: PromiseGroup, promise: CancelablePromise) {\n const group = this._promises[groupName];\n if (group && group.indexOf(promise) === -1) {\n const removeFromGroup = () => {\n const index = group.indexOf(promise);\n if (index !== -1) {\n group.splice(index, 1);\n }\n };\n promise.then(removeFromGroup);\n promise.catch(removeFromGroup);\n group.push(promise);\n }\n }\n\n private _isFitFromResource() {\n const params = this._initMapState;\n if (params.zoom && params.center) {\n return false;\n }\n return true;\n }\n\n private async _createWebMap() {\n await this.create();\n if (this.options.qmsId) {\n this._addQmsBaseLayer();\n }\n if (this.options.osm) {\n this._addOsmBaseLayer();\n }\n\n const resources: NgwLayerOptions[] = [];\n const layerFitAllowed = this._isFitFromResource();\n if (this.options.webmapId) {\n appendNgwResources(resources, this.options.webmapId, {\n fit: layerFitAllowed,\n });\n }\n if (this.options.resources && Array.isArray(this.options.resources)) {\n for (const x of this.options.resources) {\n const overwriteOptions: Partial<NgwLayerOptions> = {};\n if (!layerFitAllowed) {\n overwriteOptions.fit = false;\n }\n appendNgwResources(resources, x, {}, overwriteOptions);\n }\n }\n for (const r of resources) {\n try {\n await this.addNgwLayer(r);\n } catch (er) {\n console.warn(er);\n }\n }\n this._emitStatusEvent('ngw-map:create', this);\n this.enableSelection();\n }\n\n private _addOsmBaseLayer() {\n this.addBaseLayer('OSM');\n }\n\n private _addQmsBaseLayer() {\n let qmsId: number;\n let qmsLayerName: string | undefined;\n if (Array.isArray(this.options.qmsId)) {\n qmsId = this.options.qmsId[0];\n qmsLayerName = this.options.qmsId[1];\n } else {\n qmsId = Number(this.options.qmsId);\n }\n const qmsLayerOptions: Partial<QmsAdapterOptions> = {\n qmsId,\n };\n if (qmsLayerName) {\n qmsLayerOptions.id = qmsLayerName;\n }\n\n this.addBaseLayer('QMS', qmsLayerOptions);\n }\n\n private _selectFromNgwVector(\n ev: OnLayerMouseOptions,\n ): FeatureLayersIdentify | undefined {\n const layer: ResourceAdapter = ev.layer as ResourceAdapter;\n // item property means layer is NgwResource\n const id = layer.item && layer.item.resource.id;\n const feature = ev.feature;\n\n if (id !== undefined && feature) {\n const featureId = feature.id;\n if (featureId) {\n const identifyFeature: LayerFeature = {\n id: Number(featureId),\n fields: feature.properties || {},\n label: `#${id}`,\n layerId: Number(id),\n parent: '',\n geom: feature.geometry,\n };\n const items: FeatureLayersIdentifyItems = {\n featureCount: 1,\n features: [identifyFeature],\n };\n const identify: FeatureLayersIdentify = {\n featureCount: 1,\n [id]: items,\n };\n this._emitStatusEvent(\n 'ngw:select',\n this._prepareToIdentify({\n ...identify,\n resources: [id],\n sourceType: 'vector',\n } as NgwIdentify),\n );\n return identify;\n }\n }\n }\n\n private async _selectFromNgwRaster(ev: MapClickEvent) {\n this._emitStatusEvent('ngw:preselect');\n\n const promises: Promise<number[] | undefined>[] = [];\n const layers = Object.values(this._ngwLayers);\n layers.sort((a, b) => {\n if (a.layer.order && b.layer.order) {\n return b.layer.order - a.layer.order;\n }\n return 1;\n });\n layers.forEach((l) => {\n const layer = l.layer;\n const identFunc =\n typeof layer.getIdentificationIds === 'function'\n ? layer.getIdentificationIds\n : false;\n if (identFunc && layer.options.selectable && this.isLayerVisible(layer)) {\n promises.push(identFunc.call(layer));\n }\n });\n const getIdsPromise = Promise.all(promises);\n const getIds = await getIdsPromise;\n const ids: number[] = [];\n getIds.forEach((x) => {\n if (x) {\n x.forEach((y) => ids.push(y));\n }\n });\n\n if (!ids.length) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n\n const pixelRadius = this.options.pixelRadius || 10;\n const center = this.getCenter();\n let zoom = this.getZoom();\n zoom = zoom !== undefined ? zoom : 20;\n if (!center || !zoom) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n const radius = getIdentifyRadius(center, zoom, pixelRadius);\n\n const selectPromise = sendIdentifyRequest(ev, {\n layers: ids,\n connector: this.connector,\n radius,\n }).then((resp) => {\n this._emitStatusEvent(\n 'ngw:select',\n this._prepareToIdentify({\n ...resp,\n resources: ids,\n sourceType: 'raster',\n event: ev,\n }),\n );\n return resp;\n });\n this._addPromise('select', selectPromise);\n return selectPromise;\n }\n\n private _prepareToIdentify<\n F = FeatureProperties,\n G extends Geometry = Geometry,\n >(identify: NgwIdentify): NgwIdentifyEvent {\n const getIdentifyItems_ = () => {\n return getIdentifyItems(identify, true).map((x) => {\n return createIdentifyItem<F, G>({\n feature: x.feature,\n connector: this.connector,\n });\n });\n };\n return {\n ...identify,\n getIdentifyItems: getIdentifyItems_,\n };\n }\n\n private async _whiteLabel() {\n const container = this.getContainer();\n if (container) {\n const logo = await getCompanyLogo(\n this.connector,\n this.options.companyLogoOptions,\n );\n if (logo) {\n container.appendChild(logo);\n }\n }\n }\n}\n","/**\n * @module ngw-map\n */\n\nimport { NgwMap } from './NgwMap';\nimport type { NgwMapOptions } from './interfaces';\n\nexport * from '@nextgis/webmap';\n\nexport * from './interfaces';\n\nexport { NgwMap };\n\nexport async function createNgwMap(options: NgwMapOptions): Promise<NgwMap> {\n const ngwMap = new NgwMap(options);\n return ngwMap.onLoad();\n}\n"],"names":[],"mappings":";;;;;;;;;;;SAGgB,kBAAkB,CAChC,OAA0B,EAC1B,QAAgC,EAChC,UAAqC,EACrC,gBAA2C;IAE3C,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;QAChE,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,UAAU;YACb,QAAQ;SACT,CAAC,CAAC;KACJ;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAClC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,UAAU;YACb,QAAQ,EAAE,UAAU;YACpB,EAAE;YACF,GAAG,gBAAgB;SACpB,CAAC,CAAC;KACJ;SAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;QACvC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,GAAG,QAAQ,EAAE,GAAG,gBAAgB,EAAE,CAAC,CAAC;KACnE;AACH;;AClBO,MAAM,OAAO,GAAkB;IACpC,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,EAAE;IACX,SAAS,EAAE,KAAK;IAChB,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;IACjC,eAAe,EAAE;QACf,IAAI,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE;QAC9B,WAAW,EAAE;YACX,QAAQ,EAAE,cAAc;YACxB,iBAAiB,EAAE;gBACjB,4DAA4D;aAC7D;SACF;KACF;IACD,WAAW,EAAE,EAAE;CAChB,CAAC;SAEc,oBAAoB,CAAC,OAAsB;IACzD,MAAM,IAAI,GAAiB,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,WAAW,EAAE;QACvB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACd,CAAC,CAAC;KACJ;IAED,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QACtB,OAAO,CAAC,SAAS,GAAG,IAAI,YAAY,CAAC;YACnC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;KACJ;SAAM,IAAI,OAAO,CAAC,SAAS,EAAE;QAC5B,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;KACrD;IACD,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEtC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACtC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;;KAEvC;IAED,IAAI,OAAO,CAAC,SAAS,EAAE;QACrB,IAAI,CAAC,IAAI,CACP,IAAI,MAAM,CAAC;YACT,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CACH,CAAC;KACH;IACD,OAAO,GAAG;QACR,GAAG,OAAO;QACV,WAAW,EAAE,IAAI;QACjB,MAAM,EAAE,KAAK;KACd,CAAC;IACF,OAAO,OAAO,CAAC;AACjB;;SC5DgB,iBAAiB,CAC/B,MAAmB,EACnB,IAAY,EACZ,WAAmB;IAEnB,WAAW,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,EAAE,CAAC;IAChC,MAAM,cAAc,GAClB,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,WAAW,GAAG,cAAc,GAAG,MAAM,CAAC;IACrD,OAAO,MAAM,CAAC;AAChB;;ACwDA;;;;;;;;;;;;;;;;;;;MAmBa,MAKX,SAAQ,MAAgC;IAexC,YAAY,OAAU;QACpB,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAM,CAAC,CAAC;QAbnC,YAAO,GACd,IAAI,YAAY,EAAE,CAAC;QAGX,eAAU,GAAc,EAAE,CAAC;QAG7B,cAAS,GAA8C;YAC7D,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,EAAE;SACb,CAAC;QAIA,IAAI,OAAO,CAAC,SAAS,EAAE;YACrB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;SACpC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACtC,IAAI,SAAS,EAAE;gBACb,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;aAC9C;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gBAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;aACpB;SACF,CAAC,CAAC;KACJ;;;;;;;;;;;;;;;IAgBD,MAAM,UAAU,CACd,UAAiB,EACjB,QAAyB,EACzB,OAAwB;QAExB,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;KACxD;;;;;;;;;;;;;;;;;IAkBD,MAAM,WAAW,CACf,OAAwB;QAExB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;;QAEvB,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAExC,IAAI,OAAO,IAAI,UAAU,KAAK,SAAS,EAAE;YACvC,cAAc,CACZ,6DAA6D,CAC9D,CAAC;SACH;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE;YACxC,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;SACH;QACD,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACjC,IAAI;gBACF,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;oBACtC,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;oBACtD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE;wBACjD,OAAO,CAAC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;qBACjE;iBACF;gBACD,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACrE,MAAM,WAAW,GAAG;oBAClB,UAAU,EAAE,IAAI;;oBAEhB,GAAG,OAAO;oBACV,GAAG,OAAO,CAAC,cAAc;iBACR,CAAC;gBACpB,MAAM,KAAK,IAAI,MAAM,IAAI,CAAC,QAAQ,CAChC,OAAO,EACP,WAAW,CACZ,CAA0C,CAAC;gBAC5C,MAAM,EAAE,GAAG,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC3C,IAAI,KAAK,IAAI,EAAE,EAAE;oBACf,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;oBAC9D,KAAK,CAAC,OAAO,CAAC,IAAI;wBAChB,KAAK,CAAC,OAAO,CAAC,IAAI;6BACjB,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;oBACnD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE;wBAC3B,MAAM,qBAAqB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBACxD,IAAI,qBAAqB,EAAE;4BACzB,OAAO,KAAK,CAAC;yBACd;qBACF;iBACF;gBACD,OAAO,KAAK,CAAC;aACd;YAAC,OAAO,EAAE,EAAE;gBACX,MAAM,KAAK,GACT,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,QAAQ;sBAClC,QAAQ,CAAC,EAAE;sBACX,OAAO,IAAI,UAAU,IAAI,QAAQ,CAAC;gBACxC,OAAO,CAAC,KAAK,CAAC,uBAAuB,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC;aACpD;SACF;KACF;;;;IAKD,GAAG;QACD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9C,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACvB,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACpB;SACF;aAAM,IAAI,MAAM,EAAE;YACjB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SACxB;KACF;IAED,iBAAiB,CAIf,OAAkD;QAElD,OAAO,iBAAiB,CAAO;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,GAAG,OAAO;SACX,CAAC,CAAC;KACJ;IAED,kBAAkB,CAIhB,OAAmD;QAEnD,OAAO,kBAAkB,CAAO;YAC9B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,GAAG,OAAO;SACX,CAAC,CAAC;KACJ;IAED,oBAAoB,CAIlB,OAAkD;QAElD,OAAO,oBAAoB,CAAO;YAChC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,GAAG,OAAO;SACX,CAAC,CAAC;KACJ;IAED,qBAAqB,CAInB,OAAmD;QAEnD,OAAO,8BAA8B,CAAC;YACpC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,GAAG,OAAO;SACX,CAAC,CAAC;KACJ;IAED,iBAAiB,CAIf,QAAqB,EACrB,cAAyC;QAGzC,MAAM,OAAO,GAAG,iBAAiB,CAAO;YACtC,QAAQ;YACR,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,cAAc;;SAEf,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACtC,OAAO,OAAO,CAAC;KAChB;IAED,oBAAoB,CAClB,QAAqB,EACrB,QAAQ,GAAG,KAAK;QAEhB,MAAM,OAAO,GAAG,oBAAoB,CAAC;YACnC,QAAQ;YACR,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ;SACT,CAAC,CAAC;QACH,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,EAAE;YAChC,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACtC,OAAO,OAAO,CAAC;SAChB;aAAM;YACL,OAAO,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SAC3C;KACF;;;;IAKD,kBAAkB,CAChB,QAAqB,EACrB,QAAQ,GAAG,KAAK;QAEhB,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;KACtD;IAED,MAAM,YAAY;QAChB,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IAED,MAAM,uBAAuB,CAAC,EAAU;QACtC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;YAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,GAAG,CAAC,UAAU,KAAK,EAAE,EAAE;gBACzB,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;aACzB;iBAAM,IAAI,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE;gBACzC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;gBACnD,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE;oBACpC,OAAO,GAAG,CAAC,KAAK,CAAC;iBAClB;aACF;YACD,IAAI,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE;gBAC7B,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,EAAqB,CAAC;gBACpE,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;oBACpC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC;iBACzC,CAAC,CAAC;gBACH,IAAI,SAAS,EAAE;oBACb,OAAO,SAAS,CAAC,KAAK,CAAC;iBACxB;aACF;SACF;KACF;;;;;;;;;;;IAYD,MAAM,QAAQ,CAAC,QAAkB,EAAE,OAAoB;QACrD,IAAI,EAAsB,CAAC;QAC3B,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;YAChE,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;SACjB;aAAM;YACL,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;SAClB;QACD,MAAM,QAAQ,GAAG,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE;YACZ,IAAI,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE;gBAC5B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBAChD,IAAI,MAAM,EAAE;oBACV,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;iBACjC;aACF;iBAAM;gBACL,IAAI,IAA8B,CAAC;gBACnC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE;oBACvB,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;iBAC5B;qBAAM;oBACL,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;oBACvC,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;iBACrD;gBACD,IAAI,IAAI,EAAE;oBACR,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM;wBACvD,IAAI,MAAM,EAAE;4BACV,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;yBACjC;qBACF,CAAC,CAAC;iBACJ;aACF;SACF;aAAM;YACL,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;SACnC;KACF;;IAGD,MAAM,WAAW,CAAC,QAAkC;QAClD,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KAChC;IAED,MAAM,CAAC,QAA4B,gBAAgB;QACjD,OAAO,KAAK,CAAC,MAAM,CAAC,KAA2B,CAAC,CAAC;KAClD;IAED,WAAW,CAAC,QAAkB;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,KAAK,EAAE;YACT,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,OAAO,EAAE;gBACX,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;aACjC;YACD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAC1B;KACF;IAED,eAAe;QACb,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAC/B,IAAI,CAAC,qBAAqB,GAAG,CAAC,EAAiB;gBAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;gBACvD,IAAI,KAAK,EAAE;oBACT,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;iBAC/B;aACF,CAAC;YACF,IAAI,CAAC,qBAAqB,GAAG,CAAC,EAAuB;gBACnD,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE;oBAC5C,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;iBAC/B;aACF,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;SAC5D;KACF;IAED,gBAAgB;QACd,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACjE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAChE,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;YACvC,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;SACxC;KACF;;;;IAKD,eAAe,CAAC,OAGf;QACC,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;KACxC;;;;IAKD,gBAAgB,CACd,OAIiB;QAEjB,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;KACzC;;;;IAKD,kBAAkB,CAGhB,OAGD;QACC,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;KAC3C;;;;IAKD,mBAAmB,CAIjB,OAAgC;QAEhC,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;KAC5C;;IAGD,aAAa,CAAC,GAAG,IAAoB;QACnC,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC;KAC9B;IAED,cAAc,CAAC,GAAG,IAAoB;QACpC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAmB,CAAC;SACtD;QACD,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI;YAChB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBACjC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;aAC3B;SACF,CAAC,CAAC;KACJ;IAEO,WAAW,CAAC,SAAuB,EAAE,OAA0B;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;YAC1C,MAAM,eAAe,GAAG;gBACtB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACrC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBAChB,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBACxB;aACF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACrB;KACF;IAEO,kBAAkB;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;QAClC,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE;YAChC,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC;KACb;IAEO,MAAM,aAAa;QACzB,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACzB;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACzB;QAED,MAAM,SAAS,GAAsB,EAAE,CAAC;QACxC,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAClD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YACzB,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBACnD,GAAG,EAAE,eAAe;aACrB,CAAC,CAAC;SACJ;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YACnE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gBACtC,MAAM,gBAAgB,GAA6B,EAAE,CAAC;gBACtD,IAAI,CAAC,eAAe,EAAE;oBACpB,gBAAgB,CAAC,GAAG,GAAG,KAAK,CAAC;iBAC9B;gBACD,kBAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC;aACxD;SACF;QACD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE;YACzB,IAAI;gBACF,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;aAC3B;YAAC,OAAO,EAAE,EAAE;gBACX,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAClB;SACF;QACD,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;IAEO,gBAAgB;QACtB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KAC1B;IAEO,gBAAgB;QACtB,IAAI,KAAa,CAAC;QAClB,IAAI,YAAgC,CAAC;QACrC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9B,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACtC;aAAM;YACL,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACpC;QACD,MAAM,eAAe,GAA+B;YAClD,KAAK;SACN,CAAC;QACF,IAAI,YAAY,EAAE;YAChB,eAAe,CAAC,EAAE,GAAG,YAAY,CAAC;SACnC;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;KAC3C;IAEO,oBAAoB,CAC1B,EAAuB;QAEvB,MAAM,KAAK,GAAoB,EAAE,CAAC,KAAwB,CAAC;;QAE3D,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;QAE3B,IAAI,EAAE,KAAK,SAAS,IAAI,OAAO,EAAE;YAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;YAC7B,IAAI,SAAS,EAAE;gBACb,MAAM,eAAe,GAAiB;oBACpC,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC;oBACrB,MAAM,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE;oBAChC,KAAK,EAAE,IAAI,EAAE,EAAE;oBACf,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;oBACnB,MAAM,EAAE,EAAE;oBACV,IAAI,EAAE,OAAO,CAAC,QAAQ;iBACvB,CAAC;gBACF,MAAM,KAAK,GAA+B;oBACxC,YAAY,EAAE,CAAC;oBACf,QAAQ,EAAE,CAAC,eAAe,CAAC;iBAC5B,CAAC;gBACF,MAAM,QAAQ,GAA0B;oBACtC,YAAY,EAAE,CAAC;oBACf,CAAC,EAAE,GAAG,KAAK;iBACZ,CAAC;gBACF,IAAI,CAAC,gBAAgB,CACnB,YAAY,EACZ,IAAI,CAAC,kBAAkB,CAAC;oBACtB,GAAG,QAAQ;oBACX,SAAS,EAAE,CAAC,EAAE,CAAC;oBACf,UAAU,EAAE,QAAQ;iBACN,CAAC,CAClB,CAAC;gBACF,OAAO,QAAQ,CAAC;aACjB;SACF;KACF;IAEO,MAAM,oBAAoB,CAAC,EAAiB;QAClD,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;QAEvC,MAAM,QAAQ,GAAoC,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE;gBAClC,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;aACtC;YACD,OAAO,CAAC,CAAC;SACV,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACf,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;YACtB,MAAM,SAAS,GACb,OAAO,KAAK,CAAC,oBAAoB,KAAK,UAAU;kBAC5C,KAAK,CAAC,oBAAoB;kBAC1B,KAAK,CAAC;YACZ,IAAI,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;gBACvE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aACtC;SACF,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;QACnC,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,EAAE;gBACL,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aAC/B;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAC1C,OAAO;SACR;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,GAAG,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE;YACpB,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAC1C,OAAO;SACR;QACD,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAE5D,MAAM,aAAa,GAAG,mBAAmB,CAAC,EAAE,EAAE;YAC5C,MAAM,EAAE,GAAG;YACX,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM;SACP,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI;YACX,IAAI,CAAC,gBAAgB,CACnB,YAAY,EACZ,IAAI,CAAC,kBAAkB,CAAC;gBACtB,GAAG,IAAI;gBACP,SAAS,EAAE,GAAG;gBACd,UAAU,EAAE,QAAQ;gBACpB,KAAK,EAAE,EAAE;aACV,CAAC,CACH,CAAC;YACF,OAAO,IAAI,CAAC;SACb,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC1C,OAAO,aAAa,CAAC;KACtB;IAEO,kBAAkB,CAGxB,QAAqB;QACrB,MAAM,iBAAiB,GAAG;YACxB,OAAO,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5C,OAAO,kBAAkB,CAAO;oBAC9B,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC1B,CAAC,CAAC;aACJ,CAAC,CAAC;SACJ,CAAC;QACF,OAAO;YACL,GAAG,QAAQ;YACX,gBAAgB,EAAE,iBAAiB;SACpC,CAAC;KACH;IAEO,MAAM,WAAW;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,IAAI,SAAS,EAAE;YACb,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAChC,CAAC;YACF,IAAI,IAAI,EAAE;gBACR,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aAC7B;SACF;KACF;;AAloBM,cAAO,GAAG,OAAO;;AC9F1B;;;AAaO,eAAe,YAAY,CAAC,OAAsB;IACvD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;AACzB;;;;"}
1
+ {"version":3,"file":"ngw-map.esm-bundler.js","sources":["../src/utils/appendNgwResources.ts","../src/utils/prepareWebMapOptions.ts","../src/utils/getIentifyRadius.ts","../src/NgwMap.ts","../src/index.ts"],"sourcesContent":["import type { NgwLayerOptions } from '@nextgis/ngw-kit';\nimport type { NgwResourceDefinition } from '../interfaces';\n\nexport function appendNgwResources(\n options: NgwLayerOptions[],\n resource?: NgwResourceDefinition,\n defOptions?: Partial<NgwLayerOptions>,\n overwriteOptions?: Partial<NgwLayerOptions>,\n): void {\n if (typeof resource === 'number' || typeof resource === 'string') {\n resource = Number(resource);\n options.push({\n ...defOptions,\n resource,\n });\n } else if (Array.isArray(resource)) {\n const [resourceId, id] = resource;\n options.push({\n ...defOptions,\n resource: resourceId,\n id,\n ...overwriteOptions,\n });\n } else if (typeof resource === 'object') {\n options.push({ ...defOptions, ...resource, ...overwriteOptions });\n }\n}\n","import { deepmerge } from '@nextgis/utils';\nimport { StarterKit, MapOptions } from '@nextgis/webmap';\nimport NgwConnector from '@nextgis/ngw-connector';\nimport { QmsKit } from '@nextgis/qms-kit';\nimport { NgwKit } from '@nextgis/ngw-kit';\n\nimport { NgwMapOptions } from '../interfaces';\n\nexport const OPTIONS: NgwMapOptions = {\n target: 'map',\n baseUrl: '',\n whitlabel: false,\n controls: ['ZOOM', 'ATTRIBUTION'],\n controlsOptions: {\n ZOOM: { position: 'top-left' },\n ATTRIBUTION: {\n position: 'bottom-right',\n customAttribution: [\n '<a href=\"https://nextgis.com\" target=\"_blank\">©NextGIS</a>',\n ],\n },\n },\n pixelRadius: 10,\n};\n\nexport function prepareWebMapOptions(options: NgwMapOptions): MapOptions {\n const kits: StarterKit[] = [new QmsKit()];\n if (options.starterKits) {\n options.starterKits.forEach((x) => {\n kits.push(x);\n });\n }\n\n if (!options.connector) {\n options.connector = new NgwConnector({\n baseUrl: options.baseUrl || '',\n auth: options.auth,\n });\n } else if (options.connector) {\n options.baseUrl = options.connector.options.baseUrl;\n }\n options = deepmerge(OPTIONS, options);\n\n if (!options.center && !options.bounds) {\n options.bounds = [-179, -90, 180, 90];\n // options.maxBounds = options.bounds;\n }\n\n if (options.connector) {\n kits.push(\n new NgwKit({\n connector: options.connector,\n auth: options.auth,\n }),\n );\n }\n options = {\n ...options,\n starterKits: kits,\n create: false,\n };\n return options;\n}\n","import { LngLatArray } from '@nextgis/utils';\n\nexport function getIdentifyRadius(\n center: LngLatArray,\n zoom: number,\n pixelRadius: number,\n): number {\n pixelRadius = pixelRadius ?? 10;\n const metresPerPixel =\n (40075016.686 * Math.abs(Math.cos((center[1] * 180) / Math.PI))) /\n Math.pow(2, zoom + 8);\n const radius = pixelRadius * metresPerPixel * 0.0005;\n return radius;\n}\n","import StrictEventEmitter from 'strict-event-emitter-types';\nimport { EventEmitter } from 'events';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { defined, isObject } from '@nextgis/utils';\nimport { AdapterOptions, WebMap } from '@nextgis/webmap';\nimport NgwConnector from '@nextgis/ngw-connector';\n\nimport {\n fetchNgwLayerFeatureCollection,\n fetchNgwResourceExtent,\n createNgwLayerAdapter,\n fetchNgwLayerFeature,\n fetchIdentifyGeoJson,\n sendIdentifyRequest,\n createIdentifyItem,\n fetchNgwLayerItems,\n fetchIdentifyItem,\n fetchNgwLayerItem,\n getIdentifyItems,\n getCompanyLogo,\n} from '@nextgis/ngw-kit';\nimport { deprecatedWarn } from '@nextgis/utils';\nimport { getIcon } from '@nextgis/icons';\n\nimport { appendNgwResources } from './utils/appendNgwResources';\nimport { prepareWebMapOptions } from './utils/prepareWebMapOptions';\n\nimport type { JsonMap, FeatureProperties } from '@nextgis/utils';\nimport type {\n FeatureItem,\n LayerFeature,\n ResourceItem,\n FeatureLayersIdentify,\n FeatureLayersIdentifyItems,\n} from '@nextgis/ngw-connector';\nimport type {\n OnLayerMouseOptions,\n ControlPosition,\n FilterOptions,\n MapClickEvent,\n LayerAdapter,\n WebMapEvents,\n MapControls,\n FitOptions,\n LayerDef,\n} from '@nextgis/webmap';\nimport type {\n NgwIdentify,\n NgwWebmapItem,\n ResourceAdapter,\n FetchNgwItemsOptions,\n NgwFeatureItemResponse,\n NgwFeatureRequestOptions,\n} from '@nextgis/ngw-kit';\nimport type { Geometry, Feature, FeatureCollection } from 'geojson';\nimport type { PropertiesFilter } from '@nextgis/properties-filter';\nimport type { QmsAdapterOptions } from '@nextgis/qms-kit';\nimport type { NgwLayerOptions } from '@nextgis/ngw-kit';\nimport type {\n NgwIdentifyEvent,\n NgwMapOptions,\n NgwMapEvents,\n NgwLayers,\n} from './interfaces';\nimport type { FetchNgwItemOptions } from '@nextgis/ngw-kit';\nimport { getIdentifyRadius } from './utils/getIentifyRadius';\n\ntype PromiseGroup = 'select' | 'identify';\n\n/**\n * Base class containing the logic of interaction WebMap with NextGIS services.\n *\n * @example\n * ```javascript\n * import { NgwMap } from '@nextgis/ngw-map';\n * import MapAdapter from '@nextgis/leaflet-map-adapter';\n * // styles are not included in the leaflet-map-adapter\n * import 'leaflet/dist/leaflet.css';\n *\n * const ngwMap = new NgwMap({\n * mapAdapter: new MapAdapter(),\n * target: 'map',\n * qmsId: 448,\n * baseUrl: 'https://demo.nextgis.com',\n * webmapId: 3985\n * });\n * ```\n */\nexport class NgwMap<\n M = unknown,\n L = unknown,\n C = unknown,\n O extends NgwMapOptions<C> = NgwMapOptions<C>,\n> extends WebMap<M, L, C, NgwMapEvents, O> {\n static getIcon = getIcon;\n\n readonly emitter: StrictEventEmitter<EventEmitter, NgwMapEvents> =\n new EventEmitter();\n connector!: NgwConnector;\n\n protected _ngwLayers: NgwLayers = {};\n private $$selectFromNgwRaster?: (ev: MapClickEvent) => void;\n private $$selectFromNgwVector?: (ev: OnLayerMouseOptions) => void;\n private _promises: Record<PromiseGroup, CancelablePromise[]> = {\n select: [],\n identify: [],\n };\n\n constructor(options: O) {\n super(prepareWebMapOptions(options) as O);\n if (options.connector) {\n this.connector = options.connector;\n }\n this._createWebMap().then(() => {\n const container = this.getContainer();\n if (container) {\n container.classList.add('ngw-map-container');\n }\n if (this.options.whitlabel) {\n this._whiteLabel();\n }\n });\n }\n\n /**\n * Organized addition to the map design and controls elements,\n * calling `control.onAdd(this.webMap.mapAdapter)`\n * @param control - object with onAdd and onRemove methods\n * or a string value indicating the name of the control installed in the map adapter\n * @param position - position relative to the map angles\n * @param options - initialization parameters if the control is set as a string value\n *\n * @example\n * ```javascript\n * ngwMap.addControl(new CustomControl(), 'bottom-left');\n * ngwMap.addControl('ZOOM', 'top-right')\n * ```\n */\n async addControl<K extends keyof MapControls>(\n controlDef: K | C,\n position: ControlPosition,\n options?: MapControls[K],\n ): Promise<any> {\n await this.onLoad('controls:create');\n return super.addControl(controlDef, position, options);\n }\n\n /**\n * Add any (style, vector, webmap) NGW layer by resource definition.\n * @param options - set layer identification parameters and render method.\n *\n * @example\n * ```javascript\n * // Add raster layer resourceId is the style of 4004 layer\n * ngwMap.addNgwLayer({ resource: 4005 });\n * // Add vector data from layer GEOJSON source\n * ngwMap.addNgwLayer({\n * resource: 4038,\n * adapter: 'GEOJSON',\n * adapterOptions: { paint: { color: 'red' } }\n * });\n * ```\n */\n async addNgwLayer(\n options: NgwLayerOptions,\n ): Promise<ResourceAdapter | undefined> {\n await this.onMapLoad();\n // @ts-ignore for backward compatibility\n const { keyname, resourceId } = options;\n\n if (keyname || resourceId !== undefined) {\n deprecatedWarn(\n 'set `resource` options instead of `keyname` or `resourceId`',\n );\n }\n\n const resource = options.resource;\n if (!keyname && !resourceId && !resource) {\n throw new Error(\n 'resource, resourceId or keyname is required parameter to add NGW layer',\n );\n }\n if (defined(this.options.baseUrl)) {\n try {\n if (defined(this.options.setViewDelay)) {\n options.adapterOptions = options.adapterOptions || {};\n if (!defined(options.adapterOptions.setViewDelay)) {\n options.adapterOptions.setViewDelay = this.options.setViewDelay;\n }\n }\n const adapter = createNgwLayerAdapter(options, this, this.connector);\n const adapterOpts = {\n visibility: true,\n // TODO: do not merge options, use only `adapterOptions`\n ...options,\n ...options.adapterOptions,\n } as AdapterOptions;\n const layer = (await this.addLayer(\n adapter,\n adapterOpts,\n )) as ResourceAdapter<M, L, AdapterOptions>;\n const id = layer && this.getLayerId(layer);\n if (layer && id) {\n this._ngwLayers[id] = { layer, resourceId: layer.resourceId };\n layer.options.name =\n layer.options.name ||\n (layer.item && layer.item.resource.display_name);\n if (layer.options.baselayer) {\n const visibleLayerBaseLayer = this.getActiveBaseLayer();\n if (visibleLayerBaseLayer) {\n return layer;\n }\n }\n }\n return layer;\n } catch (er) {\n const resId =\n isObject(resource) && 'id' in resource\n ? resource.id\n : keyname || resourceId || resource;\n console.error(`Can't add NGW layer ${resId}.`, er);\n }\n }\n }\n\n /**\n * Pans and zooms the map to the initial position specified in the options\n */\n fit(): void {\n const { center, zoom, bounds } = this.options;\n if (center) {\n this.setCenter(center);\n if (zoom) {\n this.setZoom(zoom);\n }\n } else if (bounds) {\n this.fitBounds(bounds);\n }\n }\n\n fetchNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): CancelablePromise<FeatureItem> {\n return fetchNgwLayerItem<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): CancelablePromise<FeatureItem<F, G>[]> {\n return fetchNgwLayerItems<G, F>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): CancelablePromise<Feature<G, P>> {\n return fetchNgwLayerFeature<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemsOptions<P>, 'connector'>,\n ): CancelablePromise<FeatureCollection<G, P>> {\n return fetchNgwLayerFeatureCollection({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchIdentifyItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n identify: NgwIdentify,\n requestOptions?: NgwFeatureRequestOptions,\n // multiple = false\n ): CancelablePromise<NgwFeatureItemResponse<P, G> | undefined> {\n const promise = fetchIdentifyItem<G, P>({\n identify,\n connector: this.connector,\n requestOptions,\n // multiple,\n });\n\n this._addPromise('identify', promise);\n return promise;\n }\n\n fetchIdentifyGeoJson(\n identify: NgwIdentify,\n multiple = false,\n ): CancelablePromise<Feature | undefined> {\n const promise = fetchIdentifyGeoJson({\n identify,\n connector: this.connector,\n multiple,\n });\n if (promise && 'then' in promise) {\n this._addPromise('identify', promise);\n return promise;\n } else {\n return CancelablePromise.resolve(promise);\n }\n }\n\n /**\n * @deprecated use {@link fetchIdentifyGeoJson} instead\n */\n getIdentifyGeoJson(\n identify: NgwIdentify,\n multiple = false,\n ): CancelablePromise<Feature | undefined> {\n return this.fetchIdentifyGeoJson(identify, multiple);\n }\n\n async getNgwLayers(): Promise<NgwLayers> {\n await this.onLoad();\n return this._ngwLayers;\n }\n\n async getNgwLayerByResourceId(id: number): Promise<LayerAdapter | undefined> {\n for (const n in this._ngwLayers) {\n const mem = this._ngwLayers[n];\n if (mem.resourceId === id) {\n return mem && mem.layer;\n } else if (mem.layer.getIdentificationIds) {\n const ids = await mem.layer.getIdentificationIds();\n if (ids && ids.some((x) => x === id)) {\n return mem.layer;\n }\n }\n if (mem.layer.getDependLayers) {\n const dependLayers = mem.layer.getDependLayers() as NgwWebmapItem[];\n const dependFit = dependLayers.find((x) => {\n return x.item && x.item.parentId === id;\n });\n if (dependFit) {\n return dependFit.layer;\n }\n }\n }\n }\n\n /**\n * Move map to layer. If the layer is NGW resource, extent will be received from the server\n *\n * @example\n * ```javascript\n * const ngwLayer = ngwMap.addNgwLayer({ id: 'ngw_layer_name', resource: 4005 });\n * ngwMap.fitLayer(ngwLayer);\n * ngwMap.fitLayer('ngw_layer_name');\n * ```\n */\n async fitLayer(layerDef: LayerDef, options?: FitOptions): Promise<void> {\n let id: string | undefined;\n if (typeof layerDef === 'string' || typeof layerDef === 'number') {\n id = String(id);\n } else {\n id = layerDef.id;\n }\n const ngwLayer = id && this._ngwLayers[id];\n if (ngwLayer) {\n if (ngwLayer.layer.getBounds) {\n const bounds = await ngwLayer.layer.getBounds();\n if (bounds) {\n this.fitBounds(bounds, options);\n }\n } else {\n let item: ResourceItem | undefined;\n if (ngwLayer.layer.item) {\n item = ngwLayer.layer.item;\n } else {\n const resourceId = ngwLayer.resourceId;\n item = await this.connector.getResource(resourceId);\n }\n if (item) {\n fetchNgwResourceExtent(item, this.connector).then((extent) => {\n if (extent) {\n this.fitBounds(extent, options);\n }\n });\n }\n }\n } else {\n super.fitLayer(layerDef, options);\n }\n }\n\n /** @deprecated use {@link NgwMap.fitLayer} instead */\n async zoomToLayer(layerDef: string | ResourceAdapter): Promise<void> {\n return this.fitLayer(layerDef);\n }\n\n onLoad(event: keyof NgwMapEvents = 'ngw-map:create'): Promise<this> {\n return super.onLoad(event as keyof WebMapEvents);\n }\n\n removeLayer(layerDef: LayerDef): void {\n const layer = this.getLayer(layerDef);\n if (layer) {\n const layerId = this.getLayerId(layer);\n if (layerId) {\n delete this._ngwLayers[layerId];\n }\n super.removeLayer(layer);\n }\n }\n\n enableSelection(): void {\n if (!this.$$selectFromNgwRaster) {\n this.$$selectFromNgwRaster = (ev: MapClickEvent) => {\n const count = this.emitter.listenerCount('ngw:select');\n if (count) {\n this._selectFromNgwRaster(ev);\n }\n };\n this.$$selectFromNgwVector = (ev: OnLayerMouseOptions) => {\n if (this.emitter.listenerCount('ngw:select')) {\n this._selectFromNgwVector(ev);\n }\n };\n this.emitter.on('click', this.$$selectFromNgwRaster);\n this.emitter.on('layer:click', this.$$selectFromNgwVector);\n }\n }\n\n disableSelection(): void {\n if (this.$$selectFromNgwRaster) {\n this.emitter.removeListener('click', this.$$selectFromNgwRaster);\n this.emitter.removeListener('click', this._selectFromNgwVector);\n this.$$selectFromNgwRaster = undefined;\n this.$$selectFromNgwVector = undefined;\n }\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerItem} instead\n */\n getNgwLayerItem(options: {\n resourceId: number;\n featureId: number;\n }): CancelablePromise<FeatureItem> {\n return this.fetchNgwLayerItem(options);\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerItems} instead\n */\n getNgwLayerItems(\n options: {\n resourceId: number;\n connector?: NgwConnector;\n filters?: PropertiesFilter;\n } & FilterOptions,\n ): CancelablePromise<FeatureItem[]> {\n return this.fetchNgwLayerItems(options);\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerFeature} instead\n */\n getNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends JsonMap = JsonMap,\n >(options: {\n resourceId: number;\n featureId: number;\n }): CancelablePromise<Feature<G, P>> {\n return this.fetchNgwLayerFeature(options);\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerFeatures} instead\n */\n getNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends JsonMap = JsonMap,\n >(\n options: FetchNgwItemsOptions<P>,\n ): CancelablePromise<FeatureCollection<G, P>> {\n return this.fetchNgwLayerFeatures(options);\n }\n\n /** @deprecated use {@link NgwMap.cancelPromises} instead */\n cancelPromise(...args: PromiseGroup[]): void {\n this.cancelPromises(...args);\n }\n\n cancelPromises(...args: PromiseGroup[]): void {\n if (!args.length) {\n args = Object.keys(this._promises) as PromiseGroup[];\n }\n args.forEach((name) => {\n const group = this._promises[name];\n if (group) {\n group.forEach((x) => x.cancel());\n this._promises[name] = [];\n }\n });\n }\n\n private _addPromise(groupName: PromiseGroup, promise: CancelablePromise) {\n const group = this._promises[groupName];\n if (group && group.indexOf(promise) === -1) {\n const removeFromGroup = () => {\n const index = group.indexOf(promise);\n if (index !== -1) {\n group.splice(index, 1);\n }\n };\n promise.then(removeFromGroup);\n promise.catch(removeFromGroup);\n group.push(promise);\n }\n }\n\n private _isFitFromResource() {\n const params = this._initMapState;\n if (params.zoom && params.center) {\n return false;\n }\n return true;\n }\n\n private async _createWebMap() {\n await this.create();\n if (this.options.qmsId) {\n this._addQmsBaseLayer();\n }\n if (this.options.osm) {\n this._addOsmBaseLayer();\n }\n\n const resources: NgwLayerOptions[] = [];\n const layerFitAllowed = this._isFitFromResource();\n if (this.options.webmapId) {\n appendNgwResources(resources, this.options.webmapId, {\n fit: layerFitAllowed,\n });\n }\n if (this.options.resources && Array.isArray(this.options.resources)) {\n for (const x of this.options.resources) {\n const overwriteOptions: Partial<NgwLayerOptions> = {};\n if (!layerFitAllowed) {\n overwriteOptions.fit = false;\n }\n appendNgwResources(resources, x, {}, overwriteOptions);\n }\n }\n for (const r of resources) {\n try {\n await this.addNgwLayer(r);\n } catch (er) {\n console.warn(er);\n }\n }\n this._emitStatusEvent('ngw-map:create', this);\n this.enableSelection();\n }\n\n private _addOsmBaseLayer() {\n this.addBaseLayer('OSM');\n }\n\n private _addQmsBaseLayer() {\n let qmsId: number;\n let qmsLayerName: string | undefined;\n if (Array.isArray(this.options.qmsId)) {\n qmsId = this.options.qmsId[0];\n qmsLayerName = this.options.qmsId[1];\n } else {\n qmsId = Number(this.options.qmsId);\n }\n const qmsLayerOptions: Partial<QmsAdapterOptions> = {\n qmsId,\n };\n if (qmsLayerName) {\n qmsLayerOptions.id = qmsLayerName;\n }\n\n this.addBaseLayer('QMS', qmsLayerOptions);\n }\n\n private _selectFromNgwVector(\n ev: OnLayerMouseOptions,\n ): FeatureLayersIdentify | undefined {\n const layer: ResourceAdapter = ev.layer as ResourceAdapter;\n // item property means layer is NgwResource\n const id = layer.item && layer.item.resource.id;\n const feature = ev.feature;\n\n if (id !== undefined && feature) {\n const featureId = feature.id;\n if (featureId) {\n const identifyFeature: LayerFeature = {\n id: Number(featureId),\n fields: feature.properties || {},\n label: `#${id}`,\n layerId: Number(id),\n parent: '',\n geom: feature.geometry,\n };\n const items: FeatureLayersIdentifyItems = {\n featureCount: 1,\n features: [identifyFeature],\n };\n const identify: FeatureLayersIdentify = {\n featureCount: 1,\n [id]: items,\n };\n this._emitStatusEvent(\n 'ngw:select',\n this._prepareToIdentify({\n ...identify,\n resources: [id],\n sourceType: 'vector',\n } as NgwIdentify),\n );\n return identify;\n }\n }\n }\n\n private async _selectFromNgwRaster(ev: MapClickEvent) {\n this._emitStatusEvent('ngw:preselect');\n\n const promises: Promise<number[] | undefined>[] = [];\n const layers = Object.values(this._ngwLayers);\n layers.sort((a, b) => {\n if (a.layer.order && b.layer.order) {\n return b.layer.order - a.layer.order;\n }\n return 1;\n });\n layers.forEach((l) => {\n const layer = l.layer;\n const identFunc =\n typeof layer.getIdentificationIds === 'function'\n ? layer.getIdentificationIds\n : false;\n if (identFunc && layer.options.selectable && this.isLayerVisible(layer)) {\n promises.push(identFunc.call(layer));\n }\n });\n const getIdsPromise = Promise.all(promises);\n const getIds = await getIdsPromise;\n const ids: number[] = [];\n getIds.forEach((x) => {\n if (x) {\n x.forEach((y) => ids.push(y));\n }\n });\n\n if (!ids.length) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n\n const pixelRadius = this.options.pixelRadius || 10;\n const center = this.getCenter();\n let zoom = this.getZoom();\n zoom = zoom !== undefined ? zoom : 20;\n if (!center || !zoom) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n const radius = getIdentifyRadius(center, zoom, pixelRadius);\n\n const selectPromise = sendIdentifyRequest(ev, {\n layers: ids,\n connector: this.connector,\n radius,\n }).then((resp) => {\n this._emitStatusEvent(\n 'ngw:select',\n this._prepareToIdentify({\n ...resp,\n resources: ids,\n sourceType: 'raster',\n event: ev,\n }),\n );\n return resp;\n });\n this._addPromise('select', selectPromise);\n return selectPromise;\n }\n\n private _prepareToIdentify<\n F = FeatureProperties,\n G extends Geometry = Geometry,\n >(identify: NgwIdentify): NgwIdentifyEvent {\n const getIdentifyItems_ = () => {\n return getIdentifyItems(identify, true).map((x) => {\n return createIdentifyItem<F, G>({\n feature: x.feature,\n connector: this.connector,\n });\n });\n };\n return {\n ...identify,\n getIdentifyItems: getIdentifyItems_,\n };\n }\n\n private async _whiteLabel() {\n const container = this.getContainer();\n if (container) {\n const logo = await getCompanyLogo(\n this.connector,\n this.options.companyLogoOptions,\n );\n if (logo) {\n container.appendChild(logo);\n }\n }\n }\n}\n","/**\n * @module ngw-map\n */\n\nimport { NgwMap } from './NgwMap';\nimport type { NgwMapOptions } from './interfaces';\n\nexport * from '@nextgis/webmap';\n\nexport * from './interfaces';\n\nexport { NgwMap };\n\nexport async function createNgwMap(options: NgwMapOptions): Promise<NgwMap> {\n const ngwMap = new NgwMap(options);\n return ngwMap.onLoad();\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ngw-map.esm-bundler.prod.js","sources":["../src/utils/appendNgwResources.ts","../src/utils/prepareWebMapOptions.ts","../src/NgwMap.ts","../src/utils/getIentifyRadius.ts","../src/index.ts"],"sourcesContent":["import type { NgwLayerOptions } from '@nextgis/ngw-kit';\nimport type { NgwResourceDefinition } from '../interfaces';\n\nexport function appendNgwResources(\n options: NgwLayerOptions[],\n resource?: NgwResourceDefinition,\n defOptions?: Partial<NgwLayerOptions>,\n overwriteOptions?: Partial<NgwLayerOptions>,\n): void {\n if (typeof resource === 'number' || typeof resource === 'string') {\n resource = Number(resource);\n options.push({\n ...defOptions,\n resource,\n });\n } else if (Array.isArray(resource)) {\n const [resourceId, id] = resource;\n options.push({\n ...defOptions,\n resource: resourceId,\n id,\n ...overwriteOptions,\n });\n } else if (typeof resource === 'object') {\n options.push({ ...defOptions, ...resource, ...overwriteOptions });\n }\n}\n","import { deepmerge } from '@nextgis/utils';\nimport { StarterKit, MapOptions } from '@nextgis/webmap';\nimport NgwConnector from '@nextgis/ngw-connector';\nimport { QmsKit } from '@nextgis/qms-kit';\nimport { NgwKit } from '@nextgis/ngw-kit';\n\nimport { NgwMapOptions } from '../interfaces';\n\nexport const OPTIONS: NgwMapOptions = {\n target: 'map',\n baseUrl: '',\n whitlabel: false,\n controls: ['ZOOM', 'ATTRIBUTION'],\n controlsOptions: {\n ZOOM: { position: 'top-left' },\n ATTRIBUTION: {\n position: 'bottom-right',\n customAttribution: [\n '<a href=\"https://nextgis.com\" target=\"_blank\">©NextGIS</a>',\n ],\n },\n },\n pixelRadius: 10,\n};\n\nexport function prepareWebMapOptions(options: NgwMapOptions): MapOptions {\n const kits: StarterKit[] = [new QmsKit()];\n if (options.starterKits) {\n options.starterKits.forEach((x) => {\n kits.push(x);\n });\n }\n\n if (!options.connector) {\n options.connector = new NgwConnector({\n baseUrl: options.baseUrl || '',\n auth: options.auth,\n });\n } else if (options.connector) {\n options.baseUrl = options.connector.options.baseUrl;\n }\n options = deepmerge(OPTIONS, options);\n\n if (!options.center && !options.bounds) {\n options.bounds = [-179, -90, 180, 90];\n // options.maxBounds = options.bounds;\n }\n\n if (options.connector) {\n kits.push(\n new NgwKit({\n connector: options.connector,\n auth: options.auth,\n }),\n );\n }\n options = {\n ...options,\n starterKits: kits,\n create: false,\n };\n return options;\n}\n","import StrictEventEmitter from 'strict-event-emitter-types';\nimport { EventEmitter } from 'events';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { defined, isObject } from '@nextgis/utils';\nimport { AdapterOptions, WebMap } from '@nextgis/webmap';\nimport NgwConnector from '@nextgis/ngw-connector';\n\nimport {\n fetchNgwLayerFeatureCollection,\n fetchNgwResourceExtent,\n createNgwLayerAdapter,\n fetchNgwLayerFeature,\n fetchIdentifyGeoJson,\n sendIdentifyRequest,\n createIdentifyItem,\n fetchNgwLayerItems,\n fetchIdentifyItem,\n fetchNgwLayerItem,\n getIdentifyItems,\n getCompanyLogo,\n} from '@nextgis/ngw-kit';\nimport { deprecatedWarn } from '@nextgis/utils';\nimport { getIcon } from '@nextgis/icons';\n\nimport { appendNgwResources } from './utils/appendNgwResources';\nimport { prepareWebMapOptions } from './utils/prepareWebMapOptions';\n\nimport type { JsonMap, FeatureProperties } from '@nextgis/utils';\nimport type {\n FeatureItem,\n LayerFeature,\n ResourceItem,\n FeatureLayersIdentify,\n FeatureLayersIdentifyItems,\n} from '@nextgis/ngw-connector';\nimport type {\n OnLayerMouseOptions,\n ControlPosition,\n FilterOptions,\n MapClickEvent,\n LayerAdapter,\n WebMapEvents,\n MapControls,\n FitOptions,\n LayerDef,\n} from '@nextgis/webmap';\nimport type {\n NgwIdentify,\n NgwWebmapItem,\n ResourceAdapter,\n FetchNgwItemsOptions,\n NgwFeatureItemResponse,\n NgwFeatureRequestOptions,\n} from '@nextgis/ngw-kit';\nimport type { Geometry, Feature, FeatureCollection } from 'geojson';\nimport type { PropertiesFilter } from '@nextgis/properties-filter';\nimport type { QmsAdapterOptions } from '@nextgis/qms-kit';\nimport type { NgwLayerOptions } from '@nextgis/ngw-kit';\nimport type {\n NgwIdentifyEvent,\n NgwMapOptions,\n NgwMapEvents,\n NgwLayers,\n} from './interfaces';\nimport type { FetchNgwItemOptions } from '@nextgis/ngw-kit';\nimport { getIdentifyRadius } from './utils/getIentifyRadius';\n\ntype PromiseGroup = 'select' | 'identify';\n\n/**\n * Base class containing the logic of interaction WebMap with NextGIS services.\n *\n * @example\n * ```javascript\n * import { NgwMap } from '@nextgis/ngw-map';\n * import MapAdapter from '@nextgis/leaflet-map-adapter';\n * // styles are not included in the leaflet-map-adapter\n * import 'leaflet/dist/leaflet.css';\n *\n * const ngwMap = new NgwMap({\n * mapAdapter: new MapAdapter(),\n * target: 'map',\n * qmsId: 448,\n * baseUrl: 'https://demo.nextgis.com',\n * webmapId: 3985\n * });\n * ```\n */\nexport class NgwMap<\n M = unknown,\n L = unknown,\n C = unknown,\n O extends NgwMapOptions<C> = NgwMapOptions<C>,\n> extends WebMap<M, L, C, NgwMapEvents, O> {\n static getIcon = getIcon;\n\n readonly emitter: StrictEventEmitter<EventEmitter, NgwMapEvents> =\n new EventEmitter();\n connector!: NgwConnector;\n\n protected _ngwLayers: NgwLayers = {};\n private $$selectFromNgwRaster?: (ev: MapClickEvent) => void;\n private $$selectFromNgwVector?: (ev: OnLayerMouseOptions) => void;\n private _promises: Record<PromiseGroup, CancelablePromise[]> = {\n select: [],\n identify: [],\n };\n\n constructor(options: O) {\n super(prepareWebMapOptions(options) as O);\n if (options.connector) {\n this.connector = options.connector;\n }\n this._createWebMap().then(() => {\n const container = this.getContainer();\n if (container) {\n container.classList.add('ngw-map-container');\n }\n if (this.options.whitlabel) {\n this._whiteLabel();\n }\n });\n }\n\n /**\n * Organized addition to the map design and controls elements,\n * calling `control.onAdd(this.webMap.mapAdapter)`\n * @param control - object with onAdd and onRemove methods\n * or a string value indicating the name of the control installed in the map adapter\n * @param position - position relative to the map angles\n * @param options - initialization parameters if the control is set as a string value\n *\n * @example\n * ```javascript\n * ngwMap.addControl(new CustomControl(), 'bottom-left');\n * ngwMap.addControl('ZOOM', 'top-right')\n * ```\n */\n async addControl<K extends keyof MapControls>(\n controlDef: K | C,\n position: ControlPosition,\n options?: MapControls[K],\n ): Promise<any> {\n await this.onLoad('controls:create');\n return super.addControl(controlDef, position, options);\n }\n\n /**\n * Add any (style, vector, webmap) NGW layer by resource definition.\n * @param options - set layer identification parameters and render method.\n *\n * @example\n * ```javascript\n * // add raster layer resourceId is the style of 4004 layer\n * ngwMap.addNgwLayer({ resource: 4005 });\n * // add vector data from layer GEOJSON source\n * ngwMap.addNgwLayer({\n * resource: 4038,\n * adapter: 'GEOJSON',\n * adapterOptions: { paint: { color: 'red' } }\n * });\n * ```\n */\n async addNgwLayer(\n options: NgwLayerOptions,\n ): Promise<ResourceAdapter | undefined> {\n await this.onMapLoad();\n // @ts-ignore for backward compatibility\n const { keyname, resourceId } = options;\n\n if (keyname || resourceId !== undefined) {\n deprecatedWarn(\n 'set `resource` options instead of `keyname` or `resourceId`',\n );\n }\n\n const resource = options.resource;\n if (!keyname && !resourceId && !resource) {\n throw new Error(\n 'resource, resourceId or keyname is required parameter to add NGW layer',\n );\n }\n if (defined(this.options.baseUrl)) {\n try {\n if (defined(this.options.setViewDelay)) {\n options.adapterOptions = options.adapterOptions || {};\n if (!defined(options.adapterOptions.setViewDelay)) {\n options.adapterOptions.setViewDelay = this.options.setViewDelay;\n }\n }\n const adapter = createNgwLayerAdapter(options, this, this.connector);\n const adapterOpts = {\n visibility: true,\n // TODO: do not merge options, use only `adapterOptions`\n ...options,\n ...options.adapterOptions,\n } as AdapterOptions;\n const layer = (await this.addLayer(\n adapter,\n adapterOpts,\n )) as ResourceAdapter<M, L, AdapterOptions>;\n const id = layer && this.getLayerId(layer);\n if (layer && id) {\n this._ngwLayers[id] = { layer, resourceId: layer.resourceId };\n layer.options.name =\n layer.options.name ||\n (layer.item && layer.item.resource.display_name);\n if (layer.options.baselayer) {\n const visibleLayerBaseLayer = this.getActiveBaseLayer();\n if (visibleLayerBaseLayer) {\n return layer;\n }\n }\n }\n return layer;\n } catch (er) {\n const resId =\n isObject(resource) && 'id' in resource\n ? resource.id\n : keyname || resourceId || resource;\n console.error(`Can't add NGW layer ${resId}.`, er);\n }\n }\n }\n\n /**\n * Pans and zooms the map to the initial position specified in the options\n */\n fit(): void {\n const { center, zoom, bounds } = this.options;\n if (center) {\n this.setCenter(center);\n if (zoom) {\n this.setZoom(zoom);\n }\n } else if (bounds) {\n this.fitBounds(bounds);\n }\n }\n\n fetchNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): CancelablePromise<FeatureItem> {\n return fetchNgwLayerItem<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): CancelablePromise<FeatureItem<F, G>[]> {\n return fetchNgwLayerItems<G, F>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): CancelablePromise<Feature<G, P>> {\n return fetchNgwLayerFeature<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemsOptions<P>, 'connector'>,\n ): CancelablePromise<FeatureCollection<G, P>> {\n return fetchNgwLayerFeatureCollection({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchIdentifyItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n identify: NgwIdentify,\n requestOptions?: NgwFeatureRequestOptions,\n // multiple = false\n ): CancelablePromise<NgwFeatureItemResponse<P, G> | undefined> {\n const promise = fetchIdentifyItem<G, P>({\n identify,\n connector: this.connector,\n requestOptions,\n // multiple,\n });\n\n this._addPromise('identify', promise);\n return promise;\n }\n\n fetchIdentifyGeoJson(\n identify: NgwIdentify,\n multiple = false,\n ): CancelablePromise<Feature | undefined> {\n const promise = fetchIdentifyGeoJson({\n identify,\n connector: this.connector,\n multiple,\n });\n if (promise && 'then' in promise) {\n this._addPromise('identify', promise);\n return promise;\n } else {\n return CancelablePromise.resolve(promise);\n }\n }\n\n /**\n * @deprecated use {@link fetchIdentifyGeoJson} instead\n */\n getIdentifyGeoJson(\n identify: NgwIdentify,\n multiple = false,\n ): CancelablePromise<Feature | undefined> {\n return this.fetchIdentifyGeoJson(identify, multiple);\n }\n\n async getNgwLayers(): Promise<NgwLayers> {\n await this.onLoad();\n return this._ngwLayers;\n }\n\n async getNgwLayerByResourceId(id: number): Promise<LayerAdapter | undefined> {\n for (const n in this._ngwLayers) {\n const mem = this._ngwLayers[n];\n if (mem.resourceId === id) {\n return mem && mem.layer;\n } else if (mem.layer.getIdentificationIds) {\n const ids = await mem.layer.getIdentificationIds();\n if (ids && ids.some((x) => x === id)) {\n return mem.layer;\n }\n }\n if (mem.layer.getDependLayers) {\n const dependLayers = mem.layer.getDependLayers() as NgwWebmapItem[];\n const dependFit = dependLayers.find((x) => {\n return x.item && x.item.parentId === id;\n });\n if (dependFit) {\n return dependFit.layer;\n }\n }\n }\n }\n\n /**\n * Move map to layer. If the layer is NGW resource, extent will be received from the server\n *\n * @example\n * ```javascript\n * const ngwLayer = ngwMap.addNgwLayer({ id: 'ngw_layer_name', resourceId: 4005 });\n * ngwMap.fitLayer(ngwLayer);\n * ngwMap.fitLayer('ngw_layer_name');\n * ```\n */\n async fitLayer(layerDef: LayerDef, options?: FitOptions): Promise<void> {\n let id: string | undefined;\n if (typeof layerDef === 'string' || typeof layerDef === 'number') {\n id = String(id);\n } else {\n id = layerDef.id;\n }\n const ngwLayer = id && this._ngwLayers[id];\n if (ngwLayer) {\n if (ngwLayer.layer.getBounds) {\n const bounds = await ngwLayer.layer.getBounds();\n if (bounds) {\n this.fitBounds(bounds, options);\n }\n } else {\n let item: ResourceItem | undefined;\n if (ngwLayer.layer.item) {\n item = ngwLayer.layer.item;\n } else {\n const resourceId = ngwLayer.resourceId;\n item = await this.connector.getResource(resourceId);\n }\n if (item) {\n fetchNgwResourceExtent(item, this.connector).then((extent) => {\n if (extent) {\n this.fitBounds(extent, options);\n }\n });\n }\n }\n } else {\n super.fitLayer(layerDef, options);\n }\n }\n\n /** @deprecated use {@link NgwMap.fitLayer} instead */\n async zoomToLayer(layerDef: string | ResourceAdapter): Promise<void> {\n return this.fitLayer(layerDef);\n }\n\n onLoad(event: keyof NgwMapEvents = 'ngw-map:create'): Promise<this> {\n return super.onLoad(event as keyof WebMapEvents);\n }\n\n removeLayer(layerDef: LayerDef): void {\n const layer = this.getLayer(layerDef);\n if (layer) {\n const layerId = this.getLayerId(layer);\n if (layerId) {\n delete this._ngwLayers[layerId];\n }\n super.removeLayer(layer);\n }\n }\n\n enableSelection(): void {\n if (!this.$$selectFromNgwRaster) {\n this.$$selectFromNgwRaster = (ev: MapClickEvent) => {\n const count = this.emitter.listenerCount('ngw:select');\n if (count) {\n this._selectFromNgwRaster(ev);\n }\n };\n this.$$selectFromNgwVector = (ev: OnLayerMouseOptions) => {\n if (this.emitter.listenerCount('ngw:select')) {\n this._selectFromNgwVector(ev);\n }\n };\n this.emitter.on('click', this.$$selectFromNgwRaster);\n this.emitter.on('layer:click', this.$$selectFromNgwVector);\n }\n }\n\n disableSelection(): void {\n if (this.$$selectFromNgwRaster) {\n this.emitter.removeListener('click', this.$$selectFromNgwRaster);\n this.emitter.removeListener('click', this._selectFromNgwVector);\n this.$$selectFromNgwRaster = undefined;\n this.$$selectFromNgwVector = undefined;\n }\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerItem} instead\n */\n getNgwLayerItem(options: {\n resourceId: number;\n featureId: number;\n }): CancelablePromise<FeatureItem> {\n return this.fetchNgwLayerItem(options);\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerItems} instead\n */\n getNgwLayerItems(\n options: {\n resourceId: number;\n connector?: NgwConnector;\n filters?: PropertiesFilter;\n } & FilterOptions,\n ): CancelablePromise<FeatureItem[]> {\n return this.fetchNgwLayerItems(options);\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerFeature} instead\n */\n getNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends JsonMap = JsonMap,\n >(options: {\n resourceId: number;\n featureId: number;\n }): CancelablePromise<Feature<G, P>> {\n return this.fetchNgwLayerFeature(options);\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerFeatures} instead\n */\n getNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends JsonMap = JsonMap,\n >(\n options: FetchNgwItemsOptions<P>,\n ): CancelablePromise<FeatureCollection<G, P>> {\n return this.fetchNgwLayerFeatures(options);\n }\n\n /** @deprecated use {@link NgwMap.cancelPromises} instead */\n cancelPromise(...args: PromiseGroup[]): void {\n this.cancelPromises(...args);\n }\n\n cancelPromises(...args: PromiseGroup[]): void {\n if (!args.length) {\n args = Object.keys(this._promises) as PromiseGroup[];\n }\n args.forEach((name) => {\n const group = this._promises[name];\n if (group) {\n group.forEach((x) => x.cancel());\n this._promises[name] = [];\n }\n });\n }\n\n private _addPromise(groupName: PromiseGroup, promise: CancelablePromise) {\n const group = this._promises[groupName];\n if (group && group.indexOf(promise) === -1) {\n const removeFromGroup = () => {\n const index = group.indexOf(promise);\n if (index !== -1) {\n group.splice(index, 1);\n }\n };\n promise.then(removeFromGroup);\n promise.catch(removeFromGroup);\n group.push(promise);\n }\n }\n\n private _isFitFromResource() {\n const params = this._initMapState;\n if (params.zoom && params.center) {\n return false;\n }\n return true;\n }\n\n private async _createWebMap() {\n await this.create();\n if (this.options.qmsId) {\n this._addQmsBaseLayer();\n }\n if (this.options.osm) {\n this._addOsmBaseLayer();\n }\n\n const resources: NgwLayerOptions[] = [];\n const layerFitAllowed = this._isFitFromResource();\n if (this.options.webmapId) {\n appendNgwResources(resources, this.options.webmapId, {\n fit: layerFitAllowed,\n });\n }\n if (this.options.resources && Array.isArray(this.options.resources)) {\n for (const x of this.options.resources) {\n const overwriteOptions: Partial<NgwLayerOptions> = {};\n if (!layerFitAllowed) {\n overwriteOptions.fit = false;\n }\n appendNgwResources(resources, x, {}, overwriteOptions);\n }\n }\n for (const r of resources) {\n try {\n await this.addNgwLayer(r);\n } catch (er) {\n console.warn(er);\n }\n }\n this._emitStatusEvent('ngw-map:create', this);\n this.enableSelection();\n }\n\n private _addOsmBaseLayer() {\n this.addBaseLayer('OSM');\n }\n\n private _addQmsBaseLayer() {\n let qmsId: number;\n let qmsLayerName: string | undefined;\n if (Array.isArray(this.options.qmsId)) {\n qmsId = this.options.qmsId[0];\n qmsLayerName = this.options.qmsId[1];\n } else {\n qmsId = Number(this.options.qmsId);\n }\n const qmsLayerOptions: Partial<QmsAdapterOptions> = {\n qmsId,\n };\n if (qmsLayerName) {\n qmsLayerOptions.id = qmsLayerName;\n }\n\n this.addBaseLayer('QMS', qmsLayerOptions);\n }\n\n private _selectFromNgwVector(\n ev: OnLayerMouseOptions,\n ): FeatureLayersIdentify | undefined {\n const layer: ResourceAdapter = ev.layer as ResourceAdapter;\n // item property means layer is NgwResource\n const id = layer.item && layer.item.resource.id;\n const feature = ev.feature;\n\n if (id !== undefined && feature) {\n const featureId = feature.id;\n if (featureId) {\n const identifyFeature: LayerFeature = {\n id: Number(featureId),\n fields: feature.properties || {},\n label: `#${id}`,\n layerId: Number(id),\n parent: '',\n geom: feature.geometry,\n };\n const items: FeatureLayersIdentifyItems = {\n featureCount: 1,\n features: [identifyFeature],\n };\n const identify: FeatureLayersIdentify = {\n featureCount: 1,\n [id]: items,\n };\n this._emitStatusEvent(\n 'ngw:select',\n this._prepareToIdentify({\n ...identify,\n resources: [id],\n sourceType: 'vector',\n } as NgwIdentify),\n );\n return identify;\n }\n }\n }\n\n private async _selectFromNgwRaster(ev: MapClickEvent) {\n this._emitStatusEvent('ngw:preselect');\n\n const promises: Promise<number[] | undefined>[] = [];\n const layers = Object.values(this._ngwLayers);\n layers.sort((a, b) => {\n if (a.layer.order && b.layer.order) {\n return b.layer.order - a.layer.order;\n }\n return 1;\n });\n layers.forEach((l) => {\n const layer = l.layer;\n const identFunc =\n typeof layer.getIdentificationIds === 'function'\n ? layer.getIdentificationIds\n : false;\n if (identFunc && layer.options.selectable && this.isLayerVisible(layer)) {\n promises.push(identFunc.call(layer));\n }\n });\n const getIdsPromise = Promise.all(promises);\n const getIds = await getIdsPromise;\n const ids: number[] = [];\n getIds.forEach((x) => {\n if (x) {\n x.forEach((y) => ids.push(y));\n }\n });\n\n if (!ids.length) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n\n const pixelRadius = this.options.pixelRadius || 10;\n const center = this.getCenter();\n let zoom = this.getZoom();\n zoom = zoom !== undefined ? zoom : 20;\n if (!center || !zoom) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n const radius = getIdentifyRadius(center, zoom, pixelRadius);\n\n const selectPromise = sendIdentifyRequest(ev, {\n layers: ids,\n connector: this.connector,\n radius,\n }).then((resp) => {\n this._emitStatusEvent(\n 'ngw:select',\n this._prepareToIdentify({\n ...resp,\n resources: ids,\n sourceType: 'raster',\n event: ev,\n }),\n );\n return resp;\n });\n this._addPromise('select', selectPromise);\n return selectPromise;\n }\n\n private _prepareToIdentify<\n F = FeatureProperties,\n G extends Geometry = Geometry,\n >(identify: NgwIdentify): NgwIdentifyEvent {\n const getIdentifyItems_ = () => {\n return getIdentifyItems(identify, true).map((x) => {\n return createIdentifyItem<F, G>({\n feature: x.feature,\n connector: this.connector,\n });\n });\n };\n return {\n ...identify,\n getIdentifyItems: getIdentifyItems_,\n };\n }\n\n private async _whiteLabel() {\n const container = this.getContainer();\n if (container) {\n const logo = await getCompanyLogo(\n this.connector,\n this.options.companyLogoOptions,\n );\n if (logo) {\n container.appendChild(logo);\n }\n }\n }\n}\n","import { LngLatArray } from '@nextgis/utils';\n\nexport function getIdentifyRadius(\n center: LngLatArray,\n zoom: number,\n pixelRadius: number,\n): number {\n pixelRadius = pixelRadius ?? 10;\n const metresPerPixel =\n (40075016.686 * Math.abs(Math.cos((center[1] * 180) / Math.PI))) /\n Math.pow(2, zoom + 8);\n const radius = pixelRadius * metresPerPixel * 0.0005;\n return radius;\n}\n","/**\n * @module ngw-map\n */\n\nimport { NgwMap } from './NgwMap';\nimport type { NgwMapOptions } from './interfaces';\n\nexport * from '@nextgis/webmap';\n\nexport * from './interfaces';\n\nexport { NgwMap };\n\nexport async function createNgwMap(options: NgwMapOptions): Promise<NgwMap> {\n const ngwMap = new NgwMap(options);\n return ngwMap.onLoad();\n}\n"],"names":["appendNgwResources","options","resource","defOptions","overwriteOptions","Number","push","Array","isArray","resourceId","id","OPTIONS","target","baseUrl","whitlabel","controls","controlsOptions","ZOOM","position","ATTRIBUTION","customAttribution","pixelRadius","NgwMap","WebMap","constructor","super","kits","QmsKit","starterKits","forEach","x","connector","NgwConnector","auth","deepmerge","center","bounds","NgwKit","create","prepareWebMapOptions","this","EventEmitter","select","identify","_createWebMap","then","container","getContainer","classList","add","_whiteLabel","addControl","controlDef","onLoad","addNgwLayer","onMapLoad","keyname","undefined","deprecatedWarn","Error","defined","setViewDelay","adapterOptions","adapter","createNgwLayerAdapter","adapterOpts","visibility","layer","addLayer","getLayerId","_ngwLayers","name","item","display_name","baselayer","getActiveBaseLayer","er","resId","isObject","console","error","fit","zoom","setCenter","setZoom","fitBounds","fetchNgwLayerItem","fetchNgwLayerItems","fetchNgwLayerFeature","fetchNgwLayerFeatures","fetchNgwLayerFeatureCollection","fetchIdentifyItem","requestOptions","promise","_addPromise","fetchIdentifyGeoJson","multiple","CancelablePromise","resolve","getIdentifyGeoJson","getNgwLayers","getNgwLayerByResourceId","n","mem","getIdentificationIds","ids","some","getDependLayers","dependFit","find","parentId","fitLayer","layerDef","String","ngwLayer","getBounds","getResource","fetchNgwResourceExtent","extent","zoomToLayer","event","removeLayer","getLayer","layerId","enableSelection","$$selectFromNgwRaster","ev","emitter","listenerCount","_selectFromNgwRaster","$$selectFromNgwVector","_selectFromNgwVector","on","disableSelection","removeListener","getNgwLayerItem","getNgwLayerItems","getNgwLayerFeature","getNgwLayerFeatures","cancelPromise","args","cancelPromises","length","Object","keys","_promises","group","cancel","groupName","indexOf","removeFromGroup","index","splice","catch","_isFitFromResource","params","_initMapState","qmsId","_addQmsBaseLayer","osm","_addOsmBaseLayer","resources","layerFitAllowed","webmapId","r","warn","_emitStatusEvent","addBaseLayer","qmsLayerName","qmsLayerOptions","feature","featureId","featureCount","features","fields","properties","label","parent","geom","geometry","_prepareToIdentify","sourceType","promises","layers","values","sort","a","b","order","l","identFunc","selectable","isLayerVisible","call","getIdsPromise","Promise","all","getIds","y","getCenter","getZoom","radius","Math","abs","cos","PI","pow","getIdentifyRadius","selectPromise","sendIdentifyRequest","resp","getIdentifyItems","map","createIdentifyItem","logo","getCompanyLogo","companyLogoOptions","appendChild","async","createNgwMap","getIcon"],"mappings":"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"}
1
+ {"version":3,"file":"ngw-map.esm-bundler.prod.js","sources":["../src/utils/appendNgwResources.ts","../src/utils/prepareWebMapOptions.ts","../src/NgwMap.ts","../src/utils/getIentifyRadius.ts","../src/index.ts"],"sourcesContent":["import type { NgwLayerOptions } from '@nextgis/ngw-kit';\nimport type { NgwResourceDefinition } from '../interfaces';\n\nexport function appendNgwResources(\n options: NgwLayerOptions[],\n resource?: NgwResourceDefinition,\n defOptions?: Partial<NgwLayerOptions>,\n overwriteOptions?: Partial<NgwLayerOptions>,\n): void {\n if (typeof resource === 'number' || typeof resource === 'string') {\n resource = Number(resource);\n options.push({\n ...defOptions,\n resource,\n });\n } else if (Array.isArray(resource)) {\n const [resourceId, id] = resource;\n options.push({\n ...defOptions,\n resource: resourceId,\n id,\n ...overwriteOptions,\n });\n } else if (typeof resource === 'object') {\n options.push({ ...defOptions, ...resource, ...overwriteOptions });\n }\n}\n","import { deepmerge } from '@nextgis/utils';\nimport { StarterKit, MapOptions } from '@nextgis/webmap';\nimport NgwConnector from '@nextgis/ngw-connector';\nimport { QmsKit } from '@nextgis/qms-kit';\nimport { NgwKit } from '@nextgis/ngw-kit';\n\nimport { NgwMapOptions } from '../interfaces';\n\nexport const OPTIONS: NgwMapOptions = {\n target: 'map',\n baseUrl: '',\n whitlabel: false,\n controls: ['ZOOM', 'ATTRIBUTION'],\n controlsOptions: {\n ZOOM: { position: 'top-left' },\n ATTRIBUTION: {\n position: 'bottom-right',\n customAttribution: [\n '<a href=\"https://nextgis.com\" target=\"_blank\">©NextGIS</a>',\n ],\n },\n },\n pixelRadius: 10,\n};\n\nexport function prepareWebMapOptions(options: NgwMapOptions): MapOptions {\n const kits: StarterKit[] = [new QmsKit()];\n if (options.starterKits) {\n options.starterKits.forEach((x) => {\n kits.push(x);\n });\n }\n\n if (!options.connector) {\n options.connector = new NgwConnector({\n baseUrl: options.baseUrl || '',\n auth: options.auth,\n });\n } else if (options.connector) {\n options.baseUrl = options.connector.options.baseUrl;\n }\n options = deepmerge(OPTIONS, options);\n\n if (!options.center && !options.bounds) {\n options.bounds = [-179, -90, 180, 90];\n // options.maxBounds = options.bounds;\n }\n\n if (options.connector) {\n kits.push(\n new NgwKit({\n connector: options.connector,\n auth: options.auth,\n }),\n );\n }\n options = {\n ...options,\n starterKits: kits,\n create: false,\n };\n return options;\n}\n","import StrictEventEmitter from 'strict-event-emitter-types';\nimport { EventEmitter } from 'events';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { defined, isObject } from '@nextgis/utils';\nimport { AdapterOptions, WebMap } from '@nextgis/webmap';\nimport NgwConnector from '@nextgis/ngw-connector';\n\nimport {\n fetchNgwLayerFeatureCollection,\n fetchNgwResourceExtent,\n createNgwLayerAdapter,\n fetchNgwLayerFeature,\n fetchIdentifyGeoJson,\n sendIdentifyRequest,\n createIdentifyItem,\n fetchNgwLayerItems,\n fetchIdentifyItem,\n fetchNgwLayerItem,\n getIdentifyItems,\n getCompanyLogo,\n} from '@nextgis/ngw-kit';\nimport { deprecatedWarn } from '@nextgis/utils';\nimport { getIcon } from '@nextgis/icons';\n\nimport { appendNgwResources } from './utils/appendNgwResources';\nimport { prepareWebMapOptions } from './utils/prepareWebMapOptions';\n\nimport type { JsonMap, FeatureProperties } from '@nextgis/utils';\nimport type {\n FeatureItem,\n LayerFeature,\n ResourceItem,\n FeatureLayersIdentify,\n FeatureLayersIdentifyItems,\n} from '@nextgis/ngw-connector';\nimport type {\n OnLayerMouseOptions,\n ControlPosition,\n FilterOptions,\n MapClickEvent,\n LayerAdapter,\n WebMapEvents,\n MapControls,\n FitOptions,\n LayerDef,\n} from '@nextgis/webmap';\nimport type {\n NgwIdentify,\n NgwWebmapItem,\n ResourceAdapter,\n FetchNgwItemsOptions,\n NgwFeatureItemResponse,\n NgwFeatureRequestOptions,\n} from '@nextgis/ngw-kit';\nimport type { Geometry, Feature, FeatureCollection } from 'geojson';\nimport type { PropertiesFilter } from '@nextgis/properties-filter';\nimport type { QmsAdapterOptions } from '@nextgis/qms-kit';\nimport type { NgwLayerOptions } from '@nextgis/ngw-kit';\nimport type {\n NgwIdentifyEvent,\n NgwMapOptions,\n NgwMapEvents,\n NgwLayers,\n} from './interfaces';\nimport type { FetchNgwItemOptions } from '@nextgis/ngw-kit';\nimport { getIdentifyRadius } from './utils/getIentifyRadius';\n\ntype PromiseGroup = 'select' | 'identify';\n\n/**\n * Base class containing the logic of interaction WebMap with NextGIS services.\n *\n * @example\n * ```javascript\n * import { NgwMap } from '@nextgis/ngw-map';\n * import MapAdapter from '@nextgis/leaflet-map-adapter';\n * // styles are not included in the leaflet-map-adapter\n * import 'leaflet/dist/leaflet.css';\n *\n * const ngwMap = new NgwMap({\n * mapAdapter: new MapAdapter(),\n * target: 'map',\n * qmsId: 448,\n * baseUrl: 'https://demo.nextgis.com',\n * webmapId: 3985\n * });\n * ```\n */\nexport class NgwMap<\n M = unknown,\n L = unknown,\n C = unknown,\n O extends NgwMapOptions<C> = NgwMapOptions<C>,\n> extends WebMap<M, L, C, NgwMapEvents, O> {\n static getIcon = getIcon;\n\n readonly emitter: StrictEventEmitter<EventEmitter, NgwMapEvents> =\n new EventEmitter();\n connector!: NgwConnector;\n\n protected _ngwLayers: NgwLayers = {};\n private $$selectFromNgwRaster?: (ev: MapClickEvent) => void;\n private $$selectFromNgwVector?: (ev: OnLayerMouseOptions) => void;\n private _promises: Record<PromiseGroup, CancelablePromise[]> = {\n select: [],\n identify: [],\n };\n\n constructor(options: O) {\n super(prepareWebMapOptions(options) as O);\n if (options.connector) {\n this.connector = options.connector;\n }\n this._createWebMap().then(() => {\n const container = this.getContainer();\n if (container) {\n container.classList.add('ngw-map-container');\n }\n if (this.options.whitlabel) {\n this._whiteLabel();\n }\n });\n }\n\n /**\n * Organized addition to the map design and controls elements,\n * calling `control.onAdd(this.webMap.mapAdapter)`\n * @param control - object with onAdd and onRemove methods\n * or a string value indicating the name of the control installed in the map adapter\n * @param position - position relative to the map angles\n * @param options - initialization parameters if the control is set as a string value\n *\n * @example\n * ```javascript\n * ngwMap.addControl(new CustomControl(), 'bottom-left');\n * ngwMap.addControl('ZOOM', 'top-right')\n * ```\n */\n async addControl<K extends keyof MapControls>(\n controlDef: K | C,\n position: ControlPosition,\n options?: MapControls[K],\n ): Promise<any> {\n await this.onLoad('controls:create');\n return super.addControl(controlDef, position, options);\n }\n\n /**\n * Add any (style, vector, webmap) NGW layer by resource definition.\n * @param options - set layer identification parameters and render method.\n *\n * @example\n * ```javascript\n * // Add raster layer resourceId is the style of 4004 layer\n * ngwMap.addNgwLayer({ resource: 4005 });\n * // Add vector data from layer GEOJSON source\n * ngwMap.addNgwLayer({\n * resource: 4038,\n * adapter: 'GEOJSON',\n * adapterOptions: { paint: { color: 'red' } }\n * });\n * ```\n */\n async addNgwLayer(\n options: NgwLayerOptions,\n ): Promise<ResourceAdapter | undefined> {\n await this.onMapLoad();\n // @ts-ignore for backward compatibility\n const { keyname, resourceId } = options;\n\n if (keyname || resourceId !== undefined) {\n deprecatedWarn(\n 'set `resource` options instead of `keyname` or `resourceId`',\n );\n }\n\n const resource = options.resource;\n if (!keyname && !resourceId && !resource) {\n throw new Error(\n 'resource, resourceId or keyname is required parameter to add NGW layer',\n );\n }\n if (defined(this.options.baseUrl)) {\n try {\n if (defined(this.options.setViewDelay)) {\n options.adapterOptions = options.adapterOptions || {};\n if (!defined(options.adapterOptions.setViewDelay)) {\n options.adapterOptions.setViewDelay = this.options.setViewDelay;\n }\n }\n const adapter = createNgwLayerAdapter(options, this, this.connector);\n const adapterOpts = {\n visibility: true,\n // TODO: do not merge options, use only `adapterOptions`\n ...options,\n ...options.adapterOptions,\n } as AdapterOptions;\n const layer = (await this.addLayer(\n adapter,\n adapterOpts,\n )) as ResourceAdapter<M, L, AdapterOptions>;\n const id = layer && this.getLayerId(layer);\n if (layer && id) {\n this._ngwLayers[id] = { layer, resourceId: layer.resourceId };\n layer.options.name =\n layer.options.name ||\n (layer.item && layer.item.resource.display_name);\n if (layer.options.baselayer) {\n const visibleLayerBaseLayer = this.getActiveBaseLayer();\n if (visibleLayerBaseLayer) {\n return layer;\n }\n }\n }\n return layer;\n } catch (er) {\n const resId =\n isObject(resource) && 'id' in resource\n ? resource.id\n : keyname || resourceId || resource;\n console.error(`Can't add NGW layer ${resId}.`, er);\n }\n }\n }\n\n /**\n * Pans and zooms the map to the initial position specified in the options\n */\n fit(): void {\n const { center, zoom, bounds } = this.options;\n if (center) {\n this.setCenter(center);\n if (zoom) {\n this.setZoom(zoom);\n }\n } else if (bounds) {\n this.fitBounds(bounds);\n }\n }\n\n fetchNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): CancelablePromise<FeatureItem> {\n return fetchNgwLayerItem<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): CancelablePromise<FeatureItem<F, G>[]> {\n return fetchNgwLayerItems<G, F>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): CancelablePromise<Feature<G, P>> {\n return fetchNgwLayerFeature<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemsOptions<P>, 'connector'>,\n ): CancelablePromise<FeatureCollection<G, P>> {\n return fetchNgwLayerFeatureCollection({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchIdentifyItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n identify: NgwIdentify,\n requestOptions?: NgwFeatureRequestOptions,\n // multiple = false\n ): CancelablePromise<NgwFeatureItemResponse<P, G> | undefined> {\n const promise = fetchIdentifyItem<G, P>({\n identify,\n connector: this.connector,\n requestOptions,\n // multiple,\n });\n\n this._addPromise('identify', promise);\n return promise;\n }\n\n fetchIdentifyGeoJson(\n identify: NgwIdentify,\n multiple = false,\n ): CancelablePromise<Feature | undefined> {\n const promise = fetchIdentifyGeoJson({\n identify,\n connector: this.connector,\n multiple,\n });\n if (promise && 'then' in promise) {\n this._addPromise('identify', promise);\n return promise;\n } else {\n return CancelablePromise.resolve(promise);\n }\n }\n\n /**\n * @deprecated use {@link fetchIdentifyGeoJson} instead\n */\n getIdentifyGeoJson(\n identify: NgwIdentify,\n multiple = false,\n ): CancelablePromise<Feature | undefined> {\n return this.fetchIdentifyGeoJson(identify, multiple);\n }\n\n async getNgwLayers(): Promise<NgwLayers> {\n await this.onLoad();\n return this._ngwLayers;\n }\n\n async getNgwLayerByResourceId(id: number): Promise<LayerAdapter | undefined> {\n for (const n in this._ngwLayers) {\n const mem = this._ngwLayers[n];\n if (mem.resourceId === id) {\n return mem && mem.layer;\n } else if (mem.layer.getIdentificationIds) {\n const ids = await mem.layer.getIdentificationIds();\n if (ids && ids.some((x) => x === id)) {\n return mem.layer;\n }\n }\n if (mem.layer.getDependLayers) {\n const dependLayers = mem.layer.getDependLayers() as NgwWebmapItem[];\n const dependFit = dependLayers.find((x) => {\n return x.item && x.item.parentId === id;\n });\n if (dependFit) {\n return dependFit.layer;\n }\n }\n }\n }\n\n /**\n * Move map to layer. If the layer is NGW resource, extent will be received from the server\n *\n * @example\n * ```javascript\n * const ngwLayer = ngwMap.addNgwLayer({ id: 'ngw_layer_name', resource: 4005 });\n * ngwMap.fitLayer(ngwLayer);\n * ngwMap.fitLayer('ngw_layer_name');\n * ```\n */\n async fitLayer(layerDef: LayerDef, options?: FitOptions): Promise<void> {\n let id: string | undefined;\n if (typeof layerDef === 'string' || typeof layerDef === 'number') {\n id = String(id);\n } else {\n id = layerDef.id;\n }\n const ngwLayer = id && this._ngwLayers[id];\n if (ngwLayer) {\n if (ngwLayer.layer.getBounds) {\n const bounds = await ngwLayer.layer.getBounds();\n if (bounds) {\n this.fitBounds(bounds, options);\n }\n } else {\n let item: ResourceItem | undefined;\n if (ngwLayer.layer.item) {\n item = ngwLayer.layer.item;\n } else {\n const resourceId = ngwLayer.resourceId;\n item = await this.connector.getResource(resourceId);\n }\n if (item) {\n fetchNgwResourceExtent(item, this.connector).then((extent) => {\n if (extent) {\n this.fitBounds(extent, options);\n }\n });\n }\n }\n } else {\n super.fitLayer(layerDef, options);\n }\n }\n\n /** @deprecated use {@link NgwMap.fitLayer} instead */\n async zoomToLayer(layerDef: string | ResourceAdapter): Promise<void> {\n return this.fitLayer(layerDef);\n }\n\n onLoad(event: keyof NgwMapEvents = 'ngw-map:create'): Promise<this> {\n return super.onLoad(event as keyof WebMapEvents);\n }\n\n removeLayer(layerDef: LayerDef): void {\n const layer = this.getLayer(layerDef);\n if (layer) {\n const layerId = this.getLayerId(layer);\n if (layerId) {\n delete this._ngwLayers[layerId];\n }\n super.removeLayer(layer);\n }\n }\n\n enableSelection(): void {\n if (!this.$$selectFromNgwRaster) {\n this.$$selectFromNgwRaster = (ev: MapClickEvent) => {\n const count = this.emitter.listenerCount('ngw:select');\n if (count) {\n this._selectFromNgwRaster(ev);\n }\n };\n this.$$selectFromNgwVector = (ev: OnLayerMouseOptions) => {\n if (this.emitter.listenerCount('ngw:select')) {\n this._selectFromNgwVector(ev);\n }\n };\n this.emitter.on('click', this.$$selectFromNgwRaster);\n this.emitter.on('layer:click', this.$$selectFromNgwVector);\n }\n }\n\n disableSelection(): void {\n if (this.$$selectFromNgwRaster) {\n this.emitter.removeListener('click', this.$$selectFromNgwRaster);\n this.emitter.removeListener('click', this._selectFromNgwVector);\n this.$$selectFromNgwRaster = undefined;\n this.$$selectFromNgwVector = undefined;\n }\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerItem} instead\n */\n getNgwLayerItem(options: {\n resourceId: number;\n featureId: number;\n }): CancelablePromise<FeatureItem> {\n return this.fetchNgwLayerItem(options);\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerItems} instead\n */\n getNgwLayerItems(\n options: {\n resourceId: number;\n connector?: NgwConnector;\n filters?: PropertiesFilter;\n } & FilterOptions,\n ): CancelablePromise<FeatureItem[]> {\n return this.fetchNgwLayerItems(options);\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerFeature} instead\n */\n getNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends JsonMap = JsonMap,\n >(options: {\n resourceId: number;\n featureId: number;\n }): CancelablePromise<Feature<G, P>> {\n return this.fetchNgwLayerFeature(options);\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerFeatures} instead\n */\n getNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends JsonMap = JsonMap,\n >(\n options: FetchNgwItemsOptions<P>,\n ): CancelablePromise<FeatureCollection<G, P>> {\n return this.fetchNgwLayerFeatures(options);\n }\n\n /** @deprecated use {@link NgwMap.cancelPromises} instead */\n cancelPromise(...args: PromiseGroup[]): void {\n this.cancelPromises(...args);\n }\n\n cancelPromises(...args: PromiseGroup[]): void {\n if (!args.length) {\n args = Object.keys(this._promises) as PromiseGroup[];\n }\n args.forEach((name) => {\n const group = this._promises[name];\n if (group) {\n group.forEach((x) => x.cancel());\n this._promises[name] = [];\n }\n });\n }\n\n private _addPromise(groupName: PromiseGroup, promise: CancelablePromise) {\n const group = this._promises[groupName];\n if (group && group.indexOf(promise) === -1) {\n const removeFromGroup = () => {\n const index = group.indexOf(promise);\n if (index !== -1) {\n group.splice(index, 1);\n }\n };\n promise.then(removeFromGroup);\n promise.catch(removeFromGroup);\n group.push(promise);\n }\n }\n\n private _isFitFromResource() {\n const params = this._initMapState;\n if (params.zoom && params.center) {\n return false;\n }\n return true;\n }\n\n private async _createWebMap() {\n await this.create();\n if (this.options.qmsId) {\n this._addQmsBaseLayer();\n }\n if (this.options.osm) {\n this._addOsmBaseLayer();\n }\n\n const resources: NgwLayerOptions[] = [];\n const layerFitAllowed = this._isFitFromResource();\n if (this.options.webmapId) {\n appendNgwResources(resources, this.options.webmapId, {\n fit: layerFitAllowed,\n });\n }\n if (this.options.resources && Array.isArray(this.options.resources)) {\n for (const x of this.options.resources) {\n const overwriteOptions: Partial<NgwLayerOptions> = {};\n if (!layerFitAllowed) {\n overwriteOptions.fit = false;\n }\n appendNgwResources(resources, x, {}, overwriteOptions);\n }\n }\n for (const r of resources) {\n try {\n await this.addNgwLayer(r);\n } catch (er) {\n console.warn(er);\n }\n }\n this._emitStatusEvent('ngw-map:create', this);\n this.enableSelection();\n }\n\n private _addOsmBaseLayer() {\n this.addBaseLayer('OSM');\n }\n\n private _addQmsBaseLayer() {\n let qmsId: number;\n let qmsLayerName: string | undefined;\n if (Array.isArray(this.options.qmsId)) {\n qmsId = this.options.qmsId[0];\n qmsLayerName = this.options.qmsId[1];\n } else {\n qmsId = Number(this.options.qmsId);\n }\n const qmsLayerOptions: Partial<QmsAdapterOptions> = {\n qmsId,\n };\n if (qmsLayerName) {\n qmsLayerOptions.id = qmsLayerName;\n }\n\n this.addBaseLayer('QMS', qmsLayerOptions);\n }\n\n private _selectFromNgwVector(\n ev: OnLayerMouseOptions,\n ): FeatureLayersIdentify | undefined {\n const layer: ResourceAdapter = ev.layer as ResourceAdapter;\n // item property means layer is NgwResource\n const id = layer.item && layer.item.resource.id;\n const feature = ev.feature;\n\n if (id !== undefined && feature) {\n const featureId = feature.id;\n if (featureId) {\n const identifyFeature: LayerFeature = {\n id: Number(featureId),\n fields: feature.properties || {},\n label: `#${id}`,\n layerId: Number(id),\n parent: '',\n geom: feature.geometry,\n };\n const items: FeatureLayersIdentifyItems = {\n featureCount: 1,\n features: [identifyFeature],\n };\n const identify: FeatureLayersIdentify = {\n featureCount: 1,\n [id]: items,\n };\n this._emitStatusEvent(\n 'ngw:select',\n this._prepareToIdentify({\n ...identify,\n resources: [id],\n sourceType: 'vector',\n } as NgwIdentify),\n );\n return identify;\n }\n }\n }\n\n private async _selectFromNgwRaster(ev: MapClickEvent) {\n this._emitStatusEvent('ngw:preselect');\n\n const promises: Promise<number[] | undefined>[] = [];\n const layers = Object.values(this._ngwLayers);\n layers.sort((a, b) => {\n if (a.layer.order && b.layer.order) {\n return b.layer.order - a.layer.order;\n }\n return 1;\n });\n layers.forEach((l) => {\n const layer = l.layer;\n const identFunc =\n typeof layer.getIdentificationIds === 'function'\n ? layer.getIdentificationIds\n : false;\n if (identFunc && layer.options.selectable && this.isLayerVisible(layer)) {\n promises.push(identFunc.call(layer));\n }\n });\n const getIdsPromise = Promise.all(promises);\n const getIds = await getIdsPromise;\n const ids: number[] = [];\n getIds.forEach((x) => {\n if (x) {\n x.forEach((y) => ids.push(y));\n }\n });\n\n if (!ids.length) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n\n const pixelRadius = this.options.pixelRadius || 10;\n const center = this.getCenter();\n let zoom = this.getZoom();\n zoom = zoom !== undefined ? zoom : 20;\n if (!center || !zoom) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n const radius = getIdentifyRadius(center, zoom, pixelRadius);\n\n const selectPromise = sendIdentifyRequest(ev, {\n layers: ids,\n connector: this.connector,\n radius,\n }).then((resp) => {\n this._emitStatusEvent(\n 'ngw:select',\n this._prepareToIdentify({\n ...resp,\n resources: ids,\n sourceType: 'raster',\n event: ev,\n }),\n );\n return resp;\n });\n this._addPromise('select', selectPromise);\n return selectPromise;\n }\n\n private _prepareToIdentify<\n F = FeatureProperties,\n G extends Geometry = Geometry,\n >(identify: NgwIdentify): NgwIdentifyEvent {\n const getIdentifyItems_ = () => {\n return getIdentifyItems(identify, true).map((x) => {\n return createIdentifyItem<F, G>({\n feature: x.feature,\n connector: this.connector,\n });\n });\n };\n return {\n ...identify,\n getIdentifyItems: getIdentifyItems_,\n };\n }\n\n private async _whiteLabel() {\n const container = this.getContainer();\n if (container) {\n const logo = await getCompanyLogo(\n this.connector,\n this.options.companyLogoOptions,\n );\n if (logo) {\n container.appendChild(logo);\n }\n }\n }\n}\n","import { LngLatArray } from '@nextgis/utils';\n\nexport function getIdentifyRadius(\n center: LngLatArray,\n zoom: number,\n pixelRadius: number,\n): number {\n pixelRadius = pixelRadius ?? 10;\n const metresPerPixel =\n (40075016.686 * Math.abs(Math.cos((center[1] * 180) / Math.PI))) /\n Math.pow(2, zoom + 8);\n const radius = pixelRadius * metresPerPixel * 0.0005;\n return radius;\n}\n","/**\n * @module ngw-map\n */\n\nimport { NgwMap } from './NgwMap';\nimport type { NgwMapOptions } from './interfaces';\n\nexport * from '@nextgis/webmap';\n\nexport * from './interfaces';\n\nexport { NgwMap };\n\nexport async function createNgwMap(options: NgwMapOptions): Promise<NgwMap> {\n const ngwMap = new NgwMap(options);\n return ngwMap.onLoad();\n}\n"],"names":["appendNgwResources","options","resource","defOptions","overwriteOptions","Number","push","Array","isArray","resourceId","id","OPTIONS","target","baseUrl","whitlabel","controls","controlsOptions","ZOOM","position","ATTRIBUTION","customAttribution","pixelRadius","NgwMap","WebMap","constructor","super","kits","QmsKit","starterKits","forEach","x","connector","NgwConnector","auth","deepmerge","center","bounds","NgwKit","create","prepareWebMapOptions","this","EventEmitter","select","identify","_createWebMap","then","container","getContainer","classList","add","_whiteLabel","addControl","controlDef","onLoad","addNgwLayer","onMapLoad","keyname","undefined","deprecatedWarn","Error","defined","setViewDelay","adapterOptions","adapter","createNgwLayerAdapter","adapterOpts","visibility","layer","addLayer","getLayerId","_ngwLayers","name","item","display_name","baselayer","getActiveBaseLayer","er","resId","isObject","console","error","fit","zoom","setCenter","setZoom","fitBounds","fetchNgwLayerItem","fetchNgwLayerItems","fetchNgwLayerFeature","fetchNgwLayerFeatures","fetchNgwLayerFeatureCollection","fetchIdentifyItem","requestOptions","promise","_addPromise","fetchIdentifyGeoJson","multiple","CancelablePromise","resolve","getIdentifyGeoJson","getNgwLayers","getNgwLayerByResourceId","n","mem","getIdentificationIds","ids","some","getDependLayers","dependFit","find","parentId","fitLayer","layerDef","String","ngwLayer","getBounds","getResource","fetchNgwResourceExtent","extent","zoomToLayer","event","removeLayer","getLayer","layerId","enableSelection","$$selectFromNgwRaster","ev","emitter","listenerCount","_selectFromNgwRaster","$$selectFromNgwVector","_selectFromNgwVector","on","disableSelection","removeListener","getNgwLayerItem","getNgwLayerItems","getNgwLayerFeature","getNgwLayerFeatures","cancelPromise","args","cancelPromises","length","Object","keys","_promises","group","cancel","groupName","indexOf","removeFromGroup","index","splice","catch","_isFitFromResource","params","_initMapState","qmsId","_addQmsBaseLayer","osm","_addOsmBaseLayer","resources","layerFitAllowed","webmapId","r","warn","_emitStatusEvent","addBaseLayer","qmsLayerName","qmsLayerOptions","feature","featureId","featureCount","features","fields","properties","label","parent","geom","geometry","_prepareToIdentify","sourceType","promises","layers","values","sort","a","b","order","l","identFunc","selectable","isLayerVisible","call","getIdsPromise","Promise","all","getIds","y","getCenter","getZoom","radius","Math","abs","cos","PI","pow","getIdentifyRadius","selectPromise","sendIdentifyRequest","resp","getIdentifyItems","map","createIdentifyItem","logo","getCompanyLogo","companyLogoOptions","appendChild","async","createNgwMap","getIcon"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** Bundle of @nextgis/ngw-map; version: 1.11.3; author: NextGIS */
1
+ /** Bundle of @nextgis/ngw-map; version: 1.11.10; author: NextGIS */
2
2
  var NgwMap = (function (exports) {
3
3
  'use strict';
4
4
 
@@ -1632,9 +1632,6 @@ var NgwMap = (function (exports) {
1632
1632
  line: 'path',
1633
1633
  point: 'circle',
1634
1634
  };
1635
- /**
1636
- * @internal
1637
- */
1638
1635
  var typeAlias = {
1639
1636
  Point: 'point',
1640
1637
  LineString: 'line',
@@ -5090,6 +5087,13 @@ var NgwMap = (function (exports) {
5090
5087
  }
5091
5088
  });
5092
5089
  }
5090
+ function fetchNgwExtent(options) {
5091
+ return options.connector.getResource(options.resourceId).then(function (resource) {
5092
+ if (resource) {
5093
+ return fetchNgwResourceExtent(resource, options.connector);
5094
+ }
5095
+ });
5096
+ }
5093
5097
  /** @deprecated use {@link fetchNgwExtent} instead */
5094
5098
  function fetchNgwResourceExtent(item, connector) {
5095
5099
  if (item.webmap) {
@@ -5189,7 +5193,19 @@ var NgwMap = (function (exports) {
5189
5193
  }
5190
5194
  // NGW REST API is not able to filtering by combined queries
5191
5195
  // therefore the filter is divided into several requests
5192
- function createFeatureFieldFilterQueries(opt, _queries, _parentAllParams) {
5196
+ function createFeatureFieldFilterQueries(opt) {
5197
+ var queries = getQueries(opt);
5198
+ return CancelablePromise.all(queries).then(function (itemsParts) {
5199
+ var items = itemsParts.reduce(function (a, b) { return a.concat(b); }, []);
5200
+ var offset = opt.offset !== undefined ? opt.offset : 0;
5201
+ var limit = opt.limit !== undefined ? opt.limit : items.length;
5202
+ if (opt.offset || opt.limit) {
5203
+ return items.splice(offset, limit);
5204
+ }
5205
+ return items;
5206
+ });
5207
+ }
5208
+ function getQueries(opt, _queries, _parentAllParams) {
5193
5209
  if (_queries === void 0) { _queries = []; }
5194
5210
  if (_parentAllParams === void 0) { _parentAllParams = []; }
5195
5211
  var filters = opt.filters;
@@ -5211,46 +5227,39 @@ var NgwMap = (function (exports) {
5211
5227
  return ["".concat(isFldStr).concat(field_, "__").concat(operation), v];
5212
5228
  };
5213
5229
  if (logic === 'any') {
5214
- filters_.forEach(function (f) {
5230
+ for (var _i = 0, filters_1 = filters_; _i < filters_1.length; _i++) {
5231
+ var f = filters_1[_i];
5215
5232
  if (isPropertyFilter(f)) {
5216
5233
  _queries.push(fetchNgwLayerItemsRequest(__assign(__assign({}, opt), { paramList: __spreadArray(__spreadArray([], _parentAllParams, true), [createParam(f)], false) })));
5217
5234
  }
5218
5235
  else {
5219
- createFeatureFieldFilterQueries(__assign(__assign({}, opt), { filters: f }), _queries, __spreadArray([], _parentAllParams, true));
5236
+ getQueries(__assign(__assign({}, opt), { filters: f }), _queries, __spreadArray([], _parentAllParams, true));
5220
5237
  }
5221
- });
5238
+ }
5222
5239
  }
5223
5240
  else if (logic === 'all') {
5224
- var filters_2 = [];
5241
+ var filters_3 = [];
5225
5242
  var propertiesFilterList = [];
5226
- for (var _i = 0, filters_1 = filters_; _i < filters_1.length; _i++) {
5227
- var f = filters_1[_i];
5243
+ for (var _a = 0, filters_2 = filters_; _a < filters_2.length; _a++) {
5244
+ var f = filters_2[_a];
5228
5245
  if (isPropertyFilter(f)) {
5229
- filters_2.push(createParam(f));
5246
+ filters_3.push(createParam(f));
5230
5247
  }
5231
5248
  else {
5232
5249
  propertiesFilterList.push(f);
5233
5250
  }
5234
5251
  }
5235
5252
  if (propertiesFilterList.length) {
5236
- for (var _a = 0, propertiesFilterList_1 = propertiesFilterList; _a < propertiesFilterList_1.length; _a++) {
5237
- var x = propertiesFilterList_1[_a];
5238
- createFeatureFieldFilterQueries(__assign(__assign({}, opt), { filters: x }), _queries, __spreadArray(__spreadArray([], _parentAllParams, true), filters_2, true));
5253
+ for (var _b = 0, propertiesFilterList_1 = propertiesFilterList; _b < propertiesFilterList_1.length; _b++) {
5254
+ var x = propertiesFilterList_1[_b];
5255
+ getQueries(__assign(__assign({}, opt), { filters: x }), _queries, __spreadArray(__spreadArray([], _parentAllParams, true), filters_3, true));
5239
5256
  }
5240
5257
  }
5241
5258
  else {
5242
- _queries.push(fetchNgwLayerItemsRequest(__assign(__assign({}, opt), { paramList: __spreadArray(__spreadArray([], _parentAllParams, true), filters_2, true) })));
5259
+ _queries.push(fetchNgwLayerItemsRequest(__assign(__assign({}, opt), { paramList: __spreadArray(__spreadArray([], _parentAllParams, true), filters_3, true) })));
5243
5260
  }
5244
5261
  }
5245
- return CancelablePromise.all(_queries).then(function (itemsParts) {
5246
- var items = itemsParts.reduce(function (a, b) { return a.concat(b); }, []);
5247
- var offset = opt.offset !== undefined ? opt.offset : 0;
5248
- var limit = opt.limit !== undefined ? opt.limit : items.length;
5249
- if (opt.offset || opt.limit) {
5250
- return items.splice(offset, limit);
5251
- }
5252
- return items;
5253
- });
5262
+ return _queries;
5254
5263
  }
5255
5264
  function createWktFromCoordArray(coord) {
5256
5265
  var polygon = coord.map(function (_a) {
@@ -5327,12 +5336,16 @@ var NgwMap = (function (exports) {
5327
5336
  var filters = options.filters;
5328
5337
  if (filters) {
5329
5338
  return createFeatureFieldFilterQueries(__assign(__assign({}, options), { filters: filters })).then(function (data) {
5339
+ var _a;
5340
+ var clientFilterValidate = (_a = options.clientFilterValidate) !== null && _a !== void 0 ? _a : true;
5330
5341
  // Additional client-side filter check
5331
- data.filter(function (y) {
5332
- var fields = prepareNgwFieldsToPropertiesFilter(__assign({}, y.fields));
5333
- var result = propertiesFilter(fields, filters);
5334
- return result;
5335
- });
5342
+ if (clientFilterValidate) {
5343
+ data = data.filter(function (y) {
5344
+ var fields = prepareNgwFieldsToPropertiesFilter(__assign(__assign({}, y.fields), { id: y.id }));
5345
+ var result = propertiesFilter(fields, filters);
5346
+ return result;
5347
+ });
5348
+ }
5336
5349
  return data;
5337
5350
  });
5338
5351
  }
@@ -5486,7 +5499,7 @@ var NgwMap = (function (exports) {
5486
5499
  hasData = this.getLayers && this.getLayers().length;
5487
5500
  strategy = this.options.strategy;
5488
5501
  if ((strategy === null || strategy === void 0 ? void 0 : strategy.startsWith('BBOX')) || hasData) {
5489
- return [2 /*return*/, fetchNgwResourceExtent(item, connector)];
5502
+ return [2 /*return*/, fetchNgwExtent({ connector: connector, resourceId: item.resource.id })];
5490
5503
  }
5491
5504
  else {
5492
5505
  if (_super.prototype.getBounds) {
@@ -8233,9 +8246,9 @@ var NgwMap = (function (exports) {
8233
8246
  *
8234
8247
  * @example
8235
8248
  * ```javascript
8236
- * // add raster layer resourceId is the style of 4004 layer
8249
+ * // Add raster layer resourceId is the style of 4004 layer
8237
8250
  * ngwMap.addNgwLayer({ resource: 4005 });
8238
- * // add vector data from layer GEOJSON source
8251
+ * // Add vector data from layer GEOJSON source
8239
8252
  * ngwMap.addNgwLayer({
8240
8253
  * resource: 4038,
8241
8254
  * adapter: 'GEOJSON',
@@ -8421,7 +8434,7 @@ var NgwMap = (function (exports) {
8421
8434
  *
8422
8435
  * @example
8423
8436
  * ```javascript
8424
- * const ngwLayer = ngwMap.addNgwLayer({ id: 'ngw_layer_name', resourceId: 4005 });
8437
+ * const ngwLayer = ngwMap.addNgwLayer({ id: 'ngw_layer_name', resource: 4005 });
8425
8438
  * ngwMap.fitLayer(ngwLayer);
8426
8439
  * ngwMap.fitLayer('ngw_layer_name');
8427
8440
  * ```