@nextgis/ngw-map 1.15.0 → 1.16.1

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 +1 @@
1
- {"version":3,"file":"ngw-map.cjs.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 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 { 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<M, C> = NgwMapOptions<M, 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._getSelectListenersCount();\n if (count) {\n this._selectFromNgwRaster(ev);\n }\n };\n this.$$selectFromNgwVector = (ev: OnLayerMouseOptions) => {\n const count = this._getSelectListenersCount();\n if (count) {\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.$$selectFromNgwRaster = undefined;\n }\n if (this.$$selectFromNgwVector) {\n this.emitter.removeListener('layer:click', this.$$selectFromNgwVector);\n\n this.$$selectFromNgwVector = undefined;\n }\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerItem} instead\n */\n getNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): CancelablePromise<FeatureItem> {\n return this.fetchNgwLayerItem<G, P>(options);\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerItems} instead\n */\n getNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): CancelablePromise<FeatureItem<F, G>[]> {\n return this.fetchNgwLayerItems<F, G>(options);\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerFeature} instead\n */\n getNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): CancelablePromise<Feature<G, P>> {\n return this.fetchNgwLayerFeature<G, P>(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 const selectable = layer.options.selectable && this.isLayerVisible(layer);\n if (!selectable) {\n return undefined;\n }\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 for (const l of layers) {\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 for (const x of getIds) {\n if (x) {\n ids.push(...x);\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 _getSelectListenersCount() {\n return this.emitter.listenerCount('ngw:select');\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","__assign","Array","isArray","resourceId","id","OPTIONS","target","baseUrl","whitlabel","controls","controlsOptions","ZOOM","position","ATTRIBUTION","customAttribution","pixelRadius","NgwMap","_super","_this","kits","QmsKit","starterKits","forEach","x","connector","NgwConnector","auth","deepmerge","center","bounds","NgwKit","create","prepareWebMapOptions","this","emitter","EventEmitter","_ngwLayers","_promises","select","identify","_createWebMap","then","container","getContainer","classList","add","_whiteLabel","__extends","prototype","addControl","controlDef","onLoad","_a","sent","call","addNgwLayer","onMapLoad","keyname","undefined","deprecatedWarn","Error","defined","setViewDelay","adapterOptions","adapter","createNgwLayerAdapter","adapterOpts","visibility","addLayer","layer","getLayerId","name","item","display_name","baselayer","getActiveBaseLayer","resId","isObject","console","error","concat","er_1","fit","zoom","setCenter","setZoom","fitBounds","fetchNgwLayerItem","fetchNgwLayerItems","fetchNgwLayerFeature","fetchNgwLayerFeatures","fetchNgwLayerFeatureCollection","fetchIdentifyItem","requestOptions","promise","_addPromise","fetchIdentifyGeoJson","multiple","CancelablePromise","resolve","getIdentifyGeoJson","getNgwLayers","getNgwLayerByResourceId","_b","mem","getIdentificationIds","ids","_c","some","getDependLayers","dependLayers","dependFit","find","parentId","fitLayer","layerDef","String","ngwLayer","getBounds","getResource","fetchNgwResourceExtent","extent","zoomToLayer","event","removeLayer","getLayer","layerId","enableSelection","$$selectFromNgwRaster","ev","_getSelectListenersCount","_selectFromNgwRaster","$$selectFromNgwVector","_selectFromNgwVector","on","disableSelection","removeListener","getNgwLayerItem","getNgwLayerItems","getNgwLayerFeature","getNgwLayerFeatures","cancelPromise","args","_i","arguments","length","cancelPromises","apply","Object","keys","group","cancel","groupName","indexOf","removeFromGroup","index","splice","catch","_isFitFromResource","params","_initMapState","qmsId","_addQmsBaseLayer","osm","_addOsmBaseLayer","resources","layerFitAllowed","webmapId","resources_1","r","warn","er_2","_emitStatusEvent","addBaseLayer","qmsLayerName","qmsLayerOptions","selectable","isLayerVisible","feature","featureId","identifyFeature","fields","properties","label","parent","geom","geometry","featureCount","features","_prepareToIdentify","sourceType","promises","layers","values","sort","a","b","order","layers_1","identFunc","Promise","all","getIds","getIds_1","getCenter","getZoom","radius","Math","abs","cos","PI","pow","getIdentifyRadius","selectPromise","sendIdentifyRequest","resp","getIdentifyItems","map","createIdentifyItem","listenerCount","getCompanyLogo","companyLogoOptions","logo","appendChild","getIcon","WebMap"],"mappings":"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"}
1
+ {"version":3,"file":"ngw-map.cjs.prod.js","sources":["../src/utils/appendNgwResources.ts","../src/utils/prepareWebMapOptions.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 StrictEventEmitter from 'strict-event-emitter-types';\nimport { EventEmitter } from 'events';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { defined, isObject, getIdentifyRadius } 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 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 { 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';\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<M, C> = NgwMapOptions<M, 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._getSelectListenersCount();\n if (count) {\n this.selectFromNgwRaster(ev);\n }\n };\n this.$$selectFromNgwVector = (ev: OnLayerMouseOptions) => {\n const count = this._getSelectListenersCount();\n if (count) {\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.$$selectFromNgwRaster = undefined;\n }\n if (this.$$selectFromNgwVector) {\n this.emitter.removeListener('layer:click', this.$$selectFromNgwVector);\n\n this.$$selectFromNgwVector = undefined;\n }\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerItem} instead\n */\n getNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): CancelablePromise<FeatureItem> {\n return this.fetchNgwLayerItem<G, P>(options);\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerItems} instead\n */\n getNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): CancelablePromise<FeatureItem<F, G>[]> {\n return this.fetchNgwLayerItems<F, G>(options);\n }\n\n /**\n * @deprecated use {@link NgwMap.fetchNgwLayerFeature} instead\n */\n getNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): CancelablePromise<Feature<G, P>> {\n return this.fetchNgwLayerFeature<G, P>(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 async selectFromNgwRaster(\n ev: MapClickEvent,\n ): Promise<NgwIdentifyEvent | undefined> {\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 for (const l of layers) {\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 for (const x of getIds) {\n if (x) {\n ids.push(...x);\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 const identify: NgwIdentify = {\n ...resp,\n resources: ids,\n sourceType: 'raster',\n event: ev,\n };\n const identifyEvent: NgwIdentifyEvent = this._prepareToIdentify(identify);\n this._emitStatusEvent('ngw:select', identify);\n return identifyEvent;\n });\n this._addPromise('select', selectPromise);\n return selectPromise;\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 const selectable = layer.options.selectable && this.isLayerVisible(layer);\n if (!selectable) {\n return undefined;\n }\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 _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 _getSelectListenersCount() {\n return this.emitter.listenerCount('ngw:select');\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":["appendNgwResources","options","resource","defOptions","overwriteOptions","Number","push","__assign","Array","isArray","resourceId","id","OPTIONS","target","baseUrl","whitlabel","controls","controlsOptions","ZOOM","position","ATTRIBUTION","customAttribution","pixelRadius","NgwMap","_super","_this","kits","QmsKit","starterKits","forEach","x","connector","NgwConnector","auth","deepmerge","center","bounds","NgwKit","create","prepareWebMapOptions","this","emitter","EventEmitter","_ngwLayers","_promises","select","identify","_createWebMap","then","container","getContainer","classList","add","_whiteLabel","__extends","prototype","addControl","controlDef","onLoad","_a","sent","call","addNgwLayer","onMapLoad","keyname","undefined","deprecatedWarn","Error","defined","setViewDelay","adapterOptions","adapter","createNgwLayerAdapter","adapterOpts","visibility","addLayer","layer","getLayerId","name","item","display_name","baselayer","getActiveBaseLayer","resId","isObject","console","error","concat","er_1","fit","zoom","setCenter","setZoom","fitBounds","fetchNgwLayerItem","fetchNgwLayerItems","fetchNgwLayerFeature","fetchNgwLayerFeatures","fetchNgwLayerFeatureCollection","fetchIdentifyItem","requestOptions","promise","_addPromise","fetchIdentifyGeoJson","multiple","CancelablePromise","resolve","getIdentifyGeoJson","getNgwLayers","getNgwLayerByResourceId","_b","mem","getIdentificationIds","ids","_c","some","getDependLayers","dependLayers","dependFit","find","parentId","fitLayer","layerDef","String","ngwLayer","getBounds","getResource","fetchNgwResourceExtent","extent","zoomToLayer","event","removeLayer","getLayer","layerId","enableSelection","$$selectFromNgwRaster","ev","_getSelectListenersCount","selectFromNgwRaster","$$selectFromNgwVector","_selectFromNgwVector","on","disableSelection","removeListener","getNgwLayerItem","getNgwLayerItems","getNgwLayerFeature","getNgwLayerFeatures","cancelPromise","args","_i","arguments","length","cancelPromises","apply","Object","keys","group","cancel","_emitStatusEvent","promises","layers","values","sort","a","b","order","layers_1","identFunc","selectable","isLayerVisible","Promise","all","getIds","getIds_1","getCenter","getZoom","radius","getIdentifyRadius","selectPromise","sendIdentifyRequest","resp","resources","sourceType","identifyEvent","_prepareToIdentify","groupName","indexOf","removeFromGroup","index","splice","catch","_isFitFromResource","params","_initMapState","qmsId","_addQmsBaseLayer","osm","_addOsmBaseLayer","layerFitAllowed","webmapId","resources_1","r","warn","er_2","addBaseLayer","qmsLayerName","qmsLayerOptions","feature","featureId","identifyFeature","fields","properties","label","parent","geom","geometry","featureCount","features","getIdentifyItems","map","createIdentifyItem","listenerCount","getCompanyLogo","companyLogoOptions","logo","appendChild","getIcon","WebMap"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** Bundle of @nextgis/ngw-map; version: 1.15.0; author: NextGIS */
1
+ /** Bundle of @nextgis/ngw-map; version: 1.16.1; author: NextGIS */
2
2
  /******************************************************************************
3
3
  Copyright (c) Microsoft Corporation.
4
4
 
@@ -1172,7 +1172,9 @@ function getBoundsFeature(b) {
1172
1172
 
1173
1173
  var d2r = Math.PI / 180; // degrees to radians
1174
1174
  var r2d = 180 / Math.PI; // radians to degrees
1175
- function getCirclePolygonCoordinates(lng, lat, radius, points) {
1175
+ function getCirclePolygonCoordinates(lng, lat,
1176
+ /** In kilometers */
1177
+ radius, points) {
1176
1178
  if (radius === void 0) { radius = 10; }
1177
1179
  if (points === void 0) { points = 6; }
1178
1180
  // find the radius in lat/lon
@@ -1222,6 +1224,14 @@ function isLngLatBoundsArray(array) {
1222
1224
  array.every(function (x) { return typeof x === 'number'; }));
1223
1225
  }
1224
1226
 
1227
+ function getIdentifyRadius(center, zoom, pixelRadius) {
1228
+ pixelRadius = pixelRadius !== null && pixelRadius !== void 0 ? pixelRadius : 10;
1229
+ var metresPerPixel = (40075016.686 * Math.abs(Math.cos((center[1] * 180) / Math.PI))) /
1230
+ Math.pow(2, zoom + 8);
1231
+ var radius = pixelRadius * metresPerPixel * 0.0005;
1232
+ return radius;
1233
+ }
1234
+
1225
1235
  /**
1226
1236
  * Copy the values of all of the enumerable own properties from one or more source objects to a
1227
1237
  * target object. Returns the target object.
@@ -1522,6 +1532,24 @@ function createPropertiesPaint(propertiesPaint) {
1522
1532
  return mask;
1523
1533
  };
1524
1534
  }
1535
+ function expressionCallback(paint, defaultPaint, getPaintFunctions) {
1536
+ var expressionCallback = createExpressionCallback(paint);
1537
+ if (expressionCallback) {
1538
+ var expressionPaintCb = function (feature) {
1539
+ return preparePaint(expressionCallback(feature), defaultPaint, getPaintFunctions);
1540
+ };
1541
+ expressionPaintCb.paint = paint;
1542
+ return expressionPaintCb;
1543
+ }
1544
+ var newPaint = __assign({}, defaultPaint);
1545
+ newPaint = __assign(__assign({}, newPaint), paint);
1546
+ newPaint.fill = newPaint.fill !== undefined ? newPaint.fill : true;
1547
+ newPaint.stroke =
1548
+ newPaint.stroke !== undefined
1549
+ ? newPaint.stroke
1550
+ : !newPaint.fill || !!(newPaint.strokeColor || newPaint.strokeOpacity);
1551
+ return newPaint;
1552
+ }
1525
1553
  function preparePaint(paint, defaultPaint, getPaintFunctions) {
1526
1554
  if (!paint) {
1527
1555
  throw new Error('paint is empty');
@@ -1551,20 +1579,7 @@ function preparePaint(paint, defaultPaint, getPaintFunctions) {
1551
1579
  return paint;
1552
1580
  }
1553
1581
  else {
1554
- var expressionCallback_1 = createExpressionCallback(paint);
1555
- if (expressionCallback_1) {
1556
- var expressionPaintCb = function (feature) {
1557
- return preparePaint(expressionCallback_1(feature), defaultPaint, getPaintFunctions);
1558
- };
1559
- expressionPaintCb.paint = paint;
1560
- return expressionPaintCb;
1561
- }
1562
- newPaint = __assign(__assign({}, newPaint), paint);
1563
- newPaint.fill = newPaint.fill !== undefined ? newPaint.fill : true;
1564
- newPaint.stroke =
1565
- newPaint.stroke !== undefined
1566
- ? newPaint.stroke
1567
- : !newPaint.fill || !!(newPaint.strokeColor || newPaint.strokeOpacity);
1582
+ newPaint = expressionCallback(paint, defaultPaint, getPaintFunctions);
1568
1583
  }
1569
1584
  if (isPaintCallback(newPaint)) {
1570
1585
  return newPaint;
@@ -4644,6 +4659,9 @@ var NgwConnector$1 = /** @class */ (function () {
4644
4659
  if (this.options.route) {
4645
4660
  this.routeStr = this.options.route;
4646
4661
  }
4662
+ if (this.options.requestTransform) {
4663
+ this.requestTransform = this.options.requestTransform;
4664
+ }
4647
4665
  this.resources = new ResourcesControl(this);
4648
4666
  addConnector(this);
4649
4667
  }
@@ -4651,6 +4669,9 @@ var NgwConnector$1 = /** @class */ (function () {
4651
4669
  NgwConnector.create = function (options) {
4652
4670
  return new this(options);
4653
4671
  };
4672
+ NgwConnector.prototype.setRequestTransform = function (requestTransform) {
4673
+ this.requestTransform = requestTransform;
4674
+ };
4654
4675
  /**
4655
4676
  * Fast way to specify the connection address to NextGIS Web.
4656
4677
  * The current connection will be severed.
@@ -4910,9 +4931,8 @@ var NgwConnector$1 = /** @class */ (function () {
4910
4931
  if (params) {
4911
4932
  url = template(url, params);
4912
4933
  }
4913
- // remove double slash
4914
- url = fixUrlStr(url);
4915
- return this._loadData(encodeURI(url), options);
4934
+ url = encodeURI(fixUrlStr(url));
4935
+ return this._loadData(url, options);
4916
4936
  }
4917
4937
  else {
4918
4938
  throw new Error('Empty `url` not allowed');
@@ -5005,6 +5025,11 @@ var NgwConnector$1 = /** @class */ (function () {
5005
5025
  // options.withCredentials = true;
5006
5026
  options.headers = __assign(__assign({}, _this.getAuthorizationHeaders()), options.headers);
5007
5027
  }
5028
+ if (_this.requestTransform) {
5029
+ var _a = _this.requestTransform(url, options), transUrl = _a[0], transOptions = _a[1];
5030
+ url = transUrl;
5031
+ options = transOptions;
5032
+ }
5008
5033
  loadData(url, resolve, options, reject, onCancel);
5009
5034
  })
5010
5035
  .then(function (resp) {
@@ -5029,6 +5054,7 @@ var NgwConnector$1 = /** @class */ (function () {
5029
5054
  typeof options.signal.addEventListener === 'function') {
5030
5055
  options.signal.addEventListener('abort', function () {
5031
5056
  request.cancel();
5057
+ _this._cleanActiveRequests(request);
5032
5058
  });
5033
5059
  }
5034
5060
  this.activeRequests.push(request);
@@ -6631,10 +6657,12 @@ var NgwWebmapItem = /** @class */ (function (_super) {
6631
6657
  };
6632
6658
  if (item.item_type === 'group' || item.item_type === 'root') {
6633
6659
  if (item.children && item.children.length) {
6634
- this.getChildren(item).forEach(function (x) {
6635
- var children = new NgwWebmapItem(_this.webMap, x, _this.options, _this.connector, _this);
6636
- _this.tree.addChild(children);
6637
- });
6660
+ var children = this.getChildren(item);
6661
+ for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {
6662
+ var x = children_1[_i];
6663
+ var children_2 = new this.constructor(this.webMap, x, this.options, this.connector, this);
6664
+ this.tree.addChild(children_2);
6665
+ }
6638
6666
  }
6639
6667
  return Promise.resolve();
6640
6668
  }
@@ -6675,7 +6703,7 @@ var NgwWebmapItem = /** @class */ (function (_super) {
6675
6703
  headers: this.options.headers,
6676
6704
  crossOrigin: this.options.crossOrigin,
6677
6705
  setViewDelay: this.options.setViewDelay,
6678
- params: { resource: this.item.resourceId },
6706
+ params: { resource: this.item.resourceId, item: this.item },
6679
6707
  };
6680
6708
  if (this.options.order) {
6681
6709
  var subOrder = this.options.drawOrderEnabled && 'draw_order_position' in item
@@ -6686,6 +6714,9 @@ var NgwWebmapItem = /** @class */ (function (_super) {
6686
6714
  var subLevel = String(subOrder).padStart(4, '0');
6687
6715
  options.order = Number((this.options.order | 0) + '.' + subLevel);
6688
6716
  }
6717
+ if (this.options.popupOptions) {
6718
+ options.popupOptions = this.options.popupOptions;
6719
+ }
6689
6720
  if (item.item_type === 'layer') {
6690
6721
  var _a = this._getZoomRange(item), maxZoom = _a.maxZoom, minZoom = _a.minZoom;
6691
6722
  objectAssign(options, {
@@ -6733,8 +6764,8 @@ var NgwWebmapItem = /** @class */ (function (_super) {
6733
6764
  };
6734
6765
  NgwWebmapItem.prototype._sumUp = function (children, totalValue) {
6735
6766
  if (totalValue === void 0) { totalValue = 0; }
6736
- for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {
6737
- var child = children_1[_i];
6767
+ for (var _i = 0, children_3 = children; _i < children_3.length; _i++) {
6768
+ var child = children_3[_i];
6738
6769
  if (child.item_type === 'layer') {
6739
6770
  totalValue += 1;
6740
6771
  child.draw_order_position = child.draw_order_position || totalValue;
@@ -7041,8 +7072,6 @@ var NgwWebmapLayerAdapter = /** @class */ (function () {
7041
7072
  this._extent &&
7042
7073
  extentConstrained) {
7043
7074
  this.options.webMap.setView({ maxBounds: this._extent });
7044
- // @ts-ignore
7045
- window.webmap = this.options.webMap;
7046
7075
  }
7047
7076
  return [2 /*return*/, this.layer];
7048
7077
  }
@@ -7215,6 +7244,7 @@ var NgwWebmapLayerAdapter = /** @class */ (function () {
7215
7244
  options.minZoom = _this.options.minZoom;
7216
7245
  options.maxZoom = _this.options.maxZoom;
7217
7246
  options.drawOrderEnabled = webmap_1.draw_order_enabled;
7247
+ options.popupOptions = _this.options.popupOptions;
7218
7248
  var layer = new _this.NgwWebmapItem(_this.options.webMap, webmap_1.root_item, options, _this.options.connector);
7219
7249
  layer.emitter.on('init', function () { return resolve(layer); });
7220
7250
  })];
@@ -7345,30 +7375,34 @@ var NgwWebmapLayerAdapter = /** @class */ (function () {
7345
7375
  };
7346
7376
  NgwWebmapLayerAdapter.prototype._getWebMapIds = function () {
7347
7377
  return __awaiter(this, void 0, void 0, function () {
7348
- var webMapItem, layers, promises_1, ids;
7349
- var _this = this;
7378
+ var webMapItem, layers, promises, _loop_2, this_2, _i, layers_1, x, ids;
7350
7379
  return __generator(this, function (_a) {
7351
7380
  switch (_a.label) {
7352
7381
  case 0:
7353
7382
  webMapItem = this.layer;
7354
7383
  if (!(webMapItem && webMapItem.item.item_type === 'root')) return [3 /*break*/, 2];
7355
7384
  layers = webMapItem.tree.getDescendants();
7356
- promises_1 = [];
7357
- layers.forEach(function (x) {
7385
+ promises = [];
7386
+ _loop_2 = function (x) {
7358
7387
  var item = x.item;
7359
7388
  if (item.item_type === 'layer') {
7360
7389
  var id = item.layer_style_id;
7361
- var promise = _this.options.connector.getResource(id).then(function (y) {
7390
+ var promise = this_2.options.connector.getResource(id).then(function (y) {
7362
7391
  if (y) {
7363
7392
  var parentId = Number(y.resource.parent.id);
7364
7393
  item.parentId = parentId;
7365
7394
  return parentId;
7366
7395
  }
7367
7396
  });
7368
- promises_1.push(promise);
7397
+ promises.push(promise);
7369
7398
  }
7370
- });
7371
- return [4 /*yield*/, Promise.all(promises_1)];
7399
+ };
7400
+ this_2 = this;
7401
+ for (_i = 0, layers_1 = layers; _i < layers_1.length; _i++) {
7402
+ x = layers_1[_i];
7403
+ _loop_2(x);
7404
+ }
7405
+ return [4 /*yield*/, Promise.all(promises)];
7372
7406
  case 1:
7373
7407
  ids = _a.sent();
7374
7408
  return [2 /*return*/, ids.filter(function (x) { return x !== undefined; })];
@@ -8295,14 +8329,6 @@ function prepareWebMapOptions(options) {
8295
8329
  return options;
8296
8330
  }
8297
8331
 
8298
- function getIdentifyRadius(center, zoom, pixelRadius) {
8299
- pixelRadius = pixelRadius !== null && pixelRadius !== void 0 ? pixelRadius : 10;
8300
- var metresPerPixel = (40075016.686 * Math.abs(Math.cos((center[1] * 180) / Math.PI))) /
8301
- Math.pow(2, zoom + 8);
8302
- var radius = pixelRadius * metresPerPixel * 0.0005;
8303
- return radius;
8304
- }
8305
-
8306
8332
  /**
8307
8333
  * Base class containing the logic of interaction WebMap with NextGIS services.
8308
8334
  *
@@ -8651,7 +8677,7 @@ var NgwMap = /** @class */ (function (_super) {
8651
8677
  this.$$selectFromNgwRaster = function (ev) {
8652
8678
  var count = _this._getSelectListenersCount();
8653
8679
  if (count) {
8654
- _this._selectFromNgwRaster(ev);
8680
+ _this.selectFromNgwRaster(ev);
8655
8681
  }
8656
8682
  };
8657
8683
  this.$$selectFromNgwVector = function (ev) {
@@ -8723,6 +8749,72 @@ var NgwMap = /** @class */ (function (_super) {
8723
8749
  }
8724
8750
  });
8725
8751
  };
8752
+ NgwMap.prototype.selectFromNgwRaster = function (ev) {
8753
+ return __awaiter(this, void 0, void 0, function () {
8754
+ var promises, layers, _i, layers_1, l, layer, identFunc, getIdsPromise, getIds, ids, _a, getIds_1, x, pixelRadius, center, zoom, radius, selectPromise;
8755
+ var _this = this;
8756
+ return __generator(this, function (_b) {
8757
+ switch (_b.label) {
8758
+ case 0:
8759
+ this._emitStatusEvent('ngw:preselect');
8760
+ promises = [];
8761
+ layers = Object.values(this._ngwLayers);
8762
+ layers.sort(function (a, b) {
8763
+ if (a.layer.order && b.layer.order) {
8764
+ return b.layer.order - a.layer.order;
8765
+ }
8766
+ return 1;
8767
+ });
8768
+ for (_i = 0, layers_1 = layers; _i < layers_1.length; _i++) {
8769
+ l = layers_1[_i];
8770
+ layer = l.layer;
8771
+ identFunc = typeof layer.getIdentificationIds === 'function'
8772
+ ? layer.getIdentificationIds
8773
+ : false;
8774
+ if (identFunc && layer.options.selectable && this.isLayerVisible(layer)) {
8775
+ promises.push(identFunc.call(layer));
8776
+ }
8777
+ }
8778
+ getIdsPromise = Promise.all(promises);
8779
+ return [4 /*yield*/, getIdsPromise];
8780
+ case 1:
8781
+ getIds = _b.sent();
8782
+ ids = [];
8783
+ for (_a = 0, getIds_1 = getIds; _a < getIds_1.length; _a++) {
8784
+ x = getIds_1[_a];
8785
+ if (x) {
8786
+ ids.push.apply(ids, x);
8787
+ }
8788
+ }
8789
+ if (!ids.length) {
8790
+ this._emitStatusEvent('ngw:select', null);
8791
+ return [2 /*return*/];
8792
+ }
8793
+ pixelRadius = this.options.pixelRadius || 10;
8794
+ center = this.getCenter();
8795
+ zoom = this.getZoom();
8796
+ zoom = zoom !== undefined ? zoom : 20;
8797
+ if (!center || !zoom) {
8798
+ this._emitStatusEvent('ngw:select', null);
8799
+ return [2 /*return*/];
8800
+ }
8801
+ radius = getIdentifyRadius(center, zoom, pixelRadius);
8802
+ selectPromise = sendIdentifyRequest(ev, {
8803
+ layers: ids,
8804
+ connector: this.connector,
8805
+ radius: radius,
8806
+ }).then(function (resp) {
8807
+ var identify = __assign(__assign({}, resp), { resources: ids, sourceType: 'raster', event: ev });
8808
+ var identifyEvent = _this._prepareToIdentify(identify);
8809
+ _this._emitStatusEvent('ngw:select', identify);
8810
+ return identifyEvent;
8811
+ });
8812
+ this._addPromise('select', selectPromise);
8813
+ return [2 /*return*/, selectPromise];
8814
+ }
8815
+ });
8816
+ });
8817
+ };
8726
8818
  NgwMap.prototype._addPromise = function (groupName, promise) {
8727
8819
  var group = this._promises[groupName];
8728
8820
  if (group && group.indexOf(promise) === -1) {
@@ -8858,70 +8950,6 @@ var NgwMap = /** @class */ (function (_super) {
8858
8950
  }
8859
8951
  }
8860
8952
  };
8861
- NgwMap.prototype._selectFromNgwRaster = function (ev) {
8862
- return __awaiter(this, void 0, void 0, function () {
8863
- var promises, layers, _i, layers_1, l, layer, identFunc, getIdsPromise, getIds, ids, _a, getIds_1, x, pixelRadius, center, zoom, radius, selectPromise;
8864
- var _this = this;
8865
- return __generator(this, function (_b) {
8866
- switch (_b.label) {
8867
- case 0:
8868
- this._emitStatusEvent('ngw:preselect');
8869
- promises = [];
8870
- layers = Object.values(this._ngwLayers);
8871
- layers.sort(function (a, b) {
8872
- if (a.layer.order && b.layer.order) {
8873
- return b.layer.order - a.layer.order;
8874
- }
8875
- return 1;
8876
- });
8877
- for (_i = 0, layers_1 = layers; _i < layers_1.length; _i++) {
8878
- l = layers_1[_i];
8879
- layer = l.layer;
8880
- identFunc = typeof layer.getIdentificationIds === 'function'
8881
- ? layer.getIdentificationIds
8882
- : false;
8883
- if (identFunc && layer.options.selectable && this.isLayerVisible(layer)) {
8884
- promises.push(identFunc.call(layer));
8885
- }
8886
- }
8887
- getIdsPromise = Promise.all(promises);
8888
- return [4 /*yield*/, getIdsPromise];
8889
- case 1:
8890
- getIds = _b.sent();
8891
- ids = [];
8892
- for (_a = 0, getIds_1 = getIds; _a < getIds_1.length; _a++) {
8893
- x = getIds_1[_a];
8894
- if (x) {
8895
- ids.push.apply(ids, x);
8896
- }
8897
- }
8898
- if (!ids.length) {
8899
- this._emitStatusEvent('ngw:select', null);
8900
- return [2 /*return*/];
8901
- }
8902
- pixelRadius = this.options.pixelRadius || 10;
8903
- center = this.getCenter();
8904
- zoom = this.getZoom();
8905
- zoom = zoom !== undefined ? zoom : 20;
8906
- if (!center || !zoom) {
8907
- this._emitStatusEvent('ngw:select', null);
8908
- return [2 /*return*/];
8909
- }
8910
- radius = getIdentifyRadius(center, zoom, pixelRadius);
8911
- selectPromise = sendIdentifyRequest(ev, {
8912
- layers: ids,
8913
- connector: this.connector,
8914
- radius: radius,
8915
- }).then(function (resp) {
8916
- _this._emitStatusEvent('ngw:select', _this._prepareToIdentify(__assign(__assign({}, resp), { resources: ids, sourceType: 'raster', event: ev })));
8917
- return resp;
8918
- });
8919
- this._addPromise('select', selectPromise);
8920
- return [2 /*return*/, selectPromise];
8921
- }
8922
- });
8923
- });
8924
- };
8925
8953
  NgwMap.prototype._prepareToIdentify = function (identify) {
8926
8954
  var _this = this;
8927
8955
  var getIdentifyItems_ = function () {