@nextgis/ngw-map 1.9.4 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.d.ts +39 -12
- package/lib/ngw-map.cjs.js +5 -5
- package/lib/ngw-map.cjs.js.map +1 -1
- package/lib/ngw-map.cjs.prod.js +1 -1
- package/lib/ngw-map.cjs.prod.js.map +1 -1
- package/lib/ngw-map.esm-browser.js +51 -20
- package/lib/ngw-map.esm-browser.js.map +1 -1
- package/lib/ngw-map.esm-browser.prod.js +1 -1
- package/lib/ngw-map.esm-browser.prod.js.map +1 -1
- package/lib/ngw-map.esm-bundler.js +5 -5
- package/lib/ngw-map.esm-bundler.js.map +1 -1
- package/lib/ngw-map.esm-bundler.prod.js +1 -1
- package/lib/ngw-map.esm-bundler.prod.js.map +1 -1
- package/lib/ngw-map.global.js +55 -24
- package/lib/ngw-map.global.js.map +1 -1
- package/lib/ngw-map.global.prod.js +1 -1
- package/lib/ngw-map.global.prod.js.map +1 -1
- package/package.json +6 -6
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Bundle of @nextgis/ngw-map; version: 1.
|
|
1
|
+
/** Bundle of @nextgis/ngw-map; version: 1.10.0; 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';
|
|
@@ -64,10 +64,10 @@ function prepareWebMapOptions(options) {
|
|
|
64
64
|
options.baseUrl = options.connector.options.baseUrl;
|
|
65
65
|
}
|
|
66
66
|
options = deepmerge(OPTIONS, options);
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
if (!options.center && !options.bounds) {
|
|
68
|
+
options.bounds = [-179, -90, 180, 90];
|
|
69
|
+
// options.maxBounds = options.bounds;
|
|
70
|
+
}
|
|
71
71
|
if (options.connector) {
|
|
72
72
|
kits.push(new NgwKit({
|
|
73
73
|
connector: options.connector,
|
|
@@ -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":"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"}
|
|
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":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{EventEmitter as e}from"events";import t from"@nextgis/cancelable-promise";import{deepmerge as s,deprecatedWarn as r,defined as o,isObject as i}from"@nextgis/utils";import{WebMap as n}from"@nextgis/webmap";export*from"@nextgis/webmap";import{NgwKit as a,createNgwLayerAdapter as c,fetchNgwLayerItem as h,fetchNgwLayerItems as
|
|
1
|
+
import{EventEmitter as e}from"events";import t from"@nextgis/cancelable-promise";import{deepmerge as s,deprecatedWarn as r,defined as o,isObject as i}from"@nextgis/utils";import{WebMap as n}from"@nextgis/webmap";export*from"@nextgis/webmap";import{NgwKit as a,createNgwLayerAdapter as c,fetchNgwLayerItem as h,fetchNgwLayerItems as d,fetchNgwLayerFeature as l,fetchNgwLayerFeatureCollection as m,fetchIdentifyItem as u,fetchIdentifyGeoJson as y,fetchNgwResourceExtent as p,sendIdentifyRequest as f,getCompanyLogo as g,getIdentifyItems as w,createIdentifyItem as L}from"@nextgis/ngw-kit";import{getIcon as I}from"@nextgis/icons";import _ from"@nextgis/ngw-connector";import{QmsKit as b}from"@nextgis/qms-kit";function N(e,t,s,r){if("number"==typeof t||"string"==typeof t)t=Number(t),e.push({...s,resource:t});else if(Array.isArray(t)){const[o,i]=t;e.push({...s,resource:o,id:i,...r})}else"object"==typeof t&&e.push({...s,...t,...r})}const v={target:"map",baseUrl:"",whitlabel:!1,controls:["ZOOM","ATTRIBUTION"],controlsOptions:{ZOOM:{position:"top-left"},ATTRIBUTION:{position:"bottom-right",customAttribution:['<a href="https://nextgis.com" target="_blank">©NextGIS</a>']}},pixelRadius:10};class F extends n{constructor(t){super(function(e){const t=[new b];return e.starterKits&&e.starterKits.forEach((e=>{t.push(e)})),e.connector?e.connector&&(e.baseUrl=e.connector.options.baseUrl):e.connector=new _({baseUrl:e.baseUrl||"",auth:e.auth}),(e=s(v,e)).center||e.bounds||(e.bounds=[-179,-90,180,90]),e.connector&&t.push(new a({connector:e.connector,auth:e.auth})),{...e,starterKits:t,create:!1}}(t)),this.emitter=new e,this._ngwLayers={},this._promises={select:[],identify:[]},t.connector&&(this.connector=t.connector),this._createWebMap().then((()=>{const e=this.getContainer();e&&e.classList.add("ngw-map-container"),this.options.whitlabel&&this._whiteLabel()}))}async addControl(e,t,s){return await this.onLoad("controls:create"),super.addControl(e,t,s)}async addNgwLayer(e){await this.onMapLoad();const{keyname:t,resourceId:s}=e;(t||void 0!==s)&&r("set `resource` options instead of `keyname` or `resourceId`");const n=e.resource;if(!t&&!s&&!n)throw new Error("resource, resourceId or keyname is required parameter to add NGW layer");if(o(this.options.baseUrl))try{o(this.options.setViewDelay)&&(e.adapterOptions=e.adapterOptions||{},o(e.adapterOptions.setViewDelay)||(e.adapterOptions.setViewDelay=this.options.setViewDelay));const t=c(e,this,this.connector),s={visibility:!0,...e,...e.adapterOptions},r=await this.addLayer(t,s),i=r&&this.getLayerId(r);if(r&&i&&(this._ngwLayers[i]={layer:r,resourceId:r.resourceId},r.options.name=r.options.name||r.item&&r.item.resource.display_name,r.options.baselayer)){if(this.getActiveBaseLayer())return r}return r}catch(e){const r=i(n)&&"id"in n?n.id:t||s||n;console.error(`Can't add NGW layer ${r}.`,e)}}fit(){const{center:e,zoom:t,bounds:s}=this.options;e?(this.setCenter(e),t&&this.setZoom(t)):s&&this.fitBounds(s)}fetchNgwLayerItem(e){return h({connector:this.connector,...e})}fetchNgwLayerItems(e){return d({connector:this.connector,...e})}fetchNgwLayerFeature(e){return l({connector:this.connector,...e})}fetchNgwLayerFeatures(e){return m({connector:this.connector,...e})}fetchIdentifyItem(e,t){const s=u({identify:e,connector:this.connector,requestOptions:t});return this._addPromise("identify",s),s}fetchIdentifyGeoJson(e,s=!1){const r=y({identify:e,connector:this.connector,multiple:s});return r&&"then"in r?(this._addPromise("identify",r),r):t.resolve(r)}getIdentifyGeoJson(e,t=!1){return this.fetchIdentifyGeoJson(e,t)}async getNgwLayers(){return await this.onLoad(),this._ngwLayers}async getNgwLayerByResourceId(e){for(const t in this._ngwLayers){const s=this._ngwLayers[t];if(s.resourceId===e)return s&&s.layer;if(s.layer.getIdentificationIds){const t=await s.layer.getIdentificationIds();if(t&&t.some((t=>t===e)))return s.layer}if(s.layer.getDependLayers){const t=s.layer.getDependLayers().find((t=>t.item&&t.item.parentId===e));if(t)return t.layer}}}async fitLayer(e,t){let s;s="string"==typeof e||"number"==typeof e?String(s):e.id;const r=s&&this._ngwLayers[s];if(r)if(r.layer.getBounds){const e=await r.layer.getBounds();e&&this.fitBounds(e,t)}else{let e;if(r.layer.item)e=r.layer.item;else{const t=r.resourceId;e=await this.connector.getResource(t)}e&&p(e,this.connector).then((e=>{e&&this.fitBounds(e,t)}))}else super.fitLayer(e,t)}async zoomToLayer(e){return this.fitLayer(e)}onLoad(e="ngw-map:create"){return super.onLoad(e)}removeLayer(e){const t=this.getLayer(e);if(t){const e=this.getLayerId(t);e&&delete this._ngwLayers[e],super.removeLayer(t)}}enableSelection(){this.$$selectFromNgwRaster||(this.$$selectFromNgwRaster=e=>{this.emitter.listenerCount("ngw:select")&&this._selectFromNgwRaster(e)},this.$$selectFromNgwVector=e=>{this.emitter.listenerCount("ngw:select")&&this._selectFromNgwVector(e)},this.emitter.on("click",this.$$selectFromNgwRaster),this.emitter.on("layer:click",this.$$selectFromNgwVector))}disableSelection(){this.$$selectFromNgwRaster&&(this.emitter.removeListener("click",this.$$selectFromNgwRaster),this.emitter.removeListener("click",this._selectFromNgwVector),this.$$selectFromNgwRaster=void 0,this.$$selectFromNgwVector=void 0)}getNgwLayerItem(e){return this.fetchNgwLayerItem(e)}getNgwLayerItems(e){return this.fetchNgwLayerItems(e)}getNgwLayerFeature(e){return this.fetchNgwLayerFeature(e)}getNgwLayerFeatures(e){return this.fetchNgwLayerFeatures(e)}cancelPromise(...e){this.cancelPromises(...e)}cancelPromises(...e){e.length||(e=Object.keys(this._promises)),e.forEach((e=>{const t=this._promises[e];t&&(t.forEach((e=>e.cancel())),this._promises[e]=[])}))}_addPromise(e,t){const s=this._promises[e];if(s&&-1===s.indexOf(t)){const e=()=>{const e=s.indexOf(t);-1!==e&&s.splice(e,1)};t.then(e),t.catch(e),s.push(t)}}_isFitFromResource(){const e=this._initMapState;return!e.zoom||!e.center}async _createWebMap(){await this.create(),this.options.qmsId&&this._addQmsBaseLayer(),this.options.osm&&this._addOsmBaseLayer();const e=[],t=this._isFitFromResource();if(this.options.webmapId&&N(e,this.options.webmapId,{fit:t}),this.options.resources&&Array.isArray(this.options.resources))for(const s of this.options.resources){const r={};t||(r.fit=!1),N(e,s,{},r)}for(const t of e)try{await this.addNgwLayer(t)}catch(e){console.warn(e)}this._emitStatusEvent("ngw-map:create",this),this.enableSelection()}_addOsmBaseLayer(){this.addBaseLayer("OSM")}_addQmsBaseLayer(){let e,t;Array.isArray(this.options.qmsId)?(e=this.options.qmsId[0],t=this.options.qmsId[1]):e=Number(this.options.qmsId);const s={qmsId:e};t&&(s.id=t),this.addBaseLayer("QMS",s)}_selectFromNgwVector(e){const t=e.layer,s=t.item&&t.item.resource.id,r=e.feature;if(void 0!==s&&r){const e=r.id;if(e){const t={featureCount:1,[s]:{featureCount:1,features:[{id:Number(e),fields:r.properties||{},label:`#${s}`,layerId:Number(s),parent:"",geom:r.geometry}]}};return this._emitStatusEvent("ngw:select",this._prepareToIdentify({...t,resources:[s],sourceType:"vector"})),t}}}async _selectFromNgwRaster(e){this._emitStatusEvent("ngw:preselect");const t=[],s=Object.values(this._ngwLayers);s.sort(((e,t)=>e.layer.order&&t.layer.order?t.layer.order-e.layer.order:1)),s.forEach((e=>{const s=e.layer,r="function"==typeof s.getIdentificationIds&&s.getIdentificationIds;r&&s.options.selectable&&this.isLayerVisible(s)&&t.push(r.call(s))}));const r=Promise.all(t),o=await r,i=[];if(o.forEach((e=>{e&&e.forEach((e=>i.push(e)))})),!i.length)return void this._emitStatusEvent("ngw:select",null);const n=this.options.pixelRadius||10,a=this.getCenter();let c=this.getZoom();if(c=void 0!==c?c:20,!a||!c)return void this._emitStatusEvent("ngw:select",null);const h=function(e,t,s){return(s=null!=s?s:10)*(40075016.686*Math.abs(Math.cos(180*e[1]/Math.PI))/Math.pow(2,t+8))*5e-4}(a,c,n),d=f(e,{layers:i,connector:this.connector,radius:h}).then((t=>(this._emitStatusEvent("ngw:select",this._prepareToIdentify({...t,resources:i,sourceType:"raster",event:e})),t)));return this._addPromise("select",d),d}_prepareToIdentify(e){return{...e,getIdentifyItems:()=>w(e,!0).map((e=>L({feature:e.feature,connector:this.connector})))}}async _whiteLabel(){const e=this.getContainer();if(e){const t=await g(this.connector,this.options.companyLogoOptions);t&&e.appendChild(t)}}}async function O(e){return new F(e).onLoad()}F.getIcon=I;export{F as NgwMap,O as createNgwMap};
|
|
2
2
|
//# sourceMappingURL=ngw-map.esm-bundler.prod.js.map
|
|
@@ -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","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","center","zoom","bounds","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', 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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"}
|
package/lib/ngw-map.global.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Bundle of @nextgis/ngw-map; version: 1.
|
|
1
|
+
/** Bundle of @nextgis/ngw-map; version: 1.10.0; author: NextGIS */
|
|
2
2
|
var NgwMap = (function (exports) {
|
|
3
3
|
'use strict';
|
|
4
4
|
|
|
@@ -1859,7 +1859,7 @@ var NgwMap = (function (exports) {
|
|
|
1859
1859
|
minZoom: 0,
|
|
1860
1860
|
maxZoom: 20,
|
|
1861
1861
|
paint: {
|
|
1862
|
-
color: '
|
|
1862
|
+
color: '#0000ff',
|
|
1863
1863
|
opacity: 0.4,
|
|
1864
1864
|
strokeOpacity: 1,
|
|
1865
1865
|
stroke: true,
|
|
@@ -1867,7 +1867,7 @@ var NgwMap = (function (exports) {
|
|
|
1867
1867
|
weight: 1,
|
|
1868
1868
|
},
|
|
1869
1869
|
selectedPaint: {
|
|
1870
|
-
color: '
|
|
1870
|
+
color: '#00008b',
|
|
1871
1871
|
opacity: 0.4,
|
|
1872
1872
|
strokeOpacity: 1,
|
|
1873
1873
|
stroke: true,
|
|
@@ -3143,6 +3143,30 @@ var NgwMap = (function (exports) {
|
|
|
3143
3143
|
adapter.clearLayer(cb);
|
|
3144
3144
|
}
|
|
3145
3145
|
};
|
|
3146
|
+
WebMapLayers.prototype.setLayerPaint = function (layerDef, paint) {
|
|
3147
|
+
var layer = this.getLayer(layerDef);
|
|
3148
|
+
if (paint && layer && layer.setPaint) {
|
|
3149
|
+
layer.setPaint(paint);
|
|
3150
|
+
}
|
|
3151
|
+
};
|
|
3152
|
+
WebMapLayers.prototype.setLayerSelectedPaint = function (layerDef, paint) {
|
|
3153
|
+
var layer = this.getLayer(layerDef);
|
|
3154
|
+
if (paint && layer && layer.setSelectedPaint) {
|
|
3155
|
+
layer.setSelectedPaint(paint);
|
|
3156
|
+
}
|
|
3157
|
+
};
|
|
3158
|
+
WebMapLayers.prototype.updateLayerPaint = function (layerDef, paint) {
|
|
3159
|
+
var layer = this.getLayer(layerDef);
|
|
3160
|
+
if (paint && layer && layer.updatePaint) {
|
|
3161
|
+
layer.updatePaint(paint);
|
|
3162
|
+
}
|
|
3163
|
+
};
|
|
3164
|
+
WebMapLayers.prototype.updateLayerSelectedPaint = function (layerDef, paint) {
|
|
3165
|
+
var layer = this.getLayer(layerDef);
|
|
3166
|
+
if (paint && layer && layer.updateSelectedPaint) {
|
|
3167
|
+
layer.updateSelectedPaint(paint);
|
|
3168
|
+
}
|
|
3169
|
+
};
|
|
3146
3170
|
WebMapLayers.prototype.getAttributions = function (options) {
|
|
3147
3171
|
var attributions = [];
|
|
3148
3172
|
for (var l in this._layers) {
|
|
@@ -6543,8 +6567,8 @@ var NgwMap = (function (exports) {
|
|
|
6543
6567
|
: undefined;
|
|
6544
6568
|
var minZooms = [minZoomWebmap, minZoomLayer].filter(Boolean);
|
|
6545
6569
|
var maxZooms = [maxZoomWebmap, maxZoomLayer].filter(Boolean);
|
|
6546
|
-
var minZoom = Math.max.apply(Math, minZooms);
|
|
6547
|
-
var maxZoom = Math.min.apply(Math, maxZooms);
|
|
6570
|
+
var minZoom = minZooms.length ? Math.max.apply(Math, minZooms) : undefined;
|
|
6571
|
+
var maxZoom = maxZooms.length ? Math.min.apply(Math, maxZooms) : undefined;
|
|
6548
6572
|
return { minZoom: minZoom, maxZoom: maxZoom };
|
|
6549
6573
|
};
|
|
6550
6574
|
NgwWebmapItem.prototype._init = function (item) {
|
|
@@ -7037,7 +7061,7 @@ var NgwMap = (function (exports) {
|
|
|
7037
7061
|
};
|
|
7038
7062
|
NgwWebmapLayerAdapter.prototype.getWebMapConfig = function (id) {
|
|
7039
7063
|
return __awaiter(this, void 0, void 0, function () {
|
|
7040
|
-
var data, webmap
|
|
7064
|
+
var data, webmap;
|
|
7041
7065
|
return __generator(this, function (_a) {
|
|
7042
7066
|
switch (_a.label) {
|
|
7043
7067
|
case 0: return [4 /*yield*/, this.options.connector.getResource(id)];
|
|
@@ -7046,20 +7070,7 @@ var NgwMap = (function (exports) {
|
|
|
7046
7070
|
if (data) {
|
|
7047
7071
|
this.response = data;
|
|
7048
7072
|
webmap = data[this.webmapClassName];
|
|
7049
|
-
|
|
7050
|
-
if (data.basemap_webmap && data.basemap_webmap.basemaps.length) {
|
|
7051
|
-
activeBaselayer = webMap.getActiveBaseLayer();
|
|
7052
|
-
this._lastActiveBaselayer = activeBaselayer
|
|
7053
|
-
? activeBaselayer.id
|
|
7054
|
-
: undefined;
|
|
7055
|
-
this._setBasemaps(data.basemap_webmap);
|
|
7056
|
-
}
|
|
7057
|
-
else if (this.options.defaultBasemap) {
|
|
7058
|
-
webMap.addBaseLayer('OSM', {
|
|
7059
|
-
id: 'webmap-default-baselayer',
|
|
7060
|
-
name: 'OpenStreetMap',
|
|
7061
|
-
});
|
|
7062
|
-
}
|
|
7073
|
+
this._setupBaselayers(data);
|
|
7063
7074
|
if (webmap) {
|
|
7064
7075
|
this._extent = [
|
|
7065
7076
|
webmap.extent_left,
|
|
@@ -7076,6 +7087,26 @@ var NgwMap = (function (exports) {
|
|
|
7076
7087
|
});
|
|
7077
7088
|
});
|
|
7078
7089
|
};
|
|
7090
|
+
NgwWebmapLayerAdapter.prototype._setupBaselayers = function (data) {
|
|
7091
|
+
var _a;
|
|
7092
|
+
var webMap = this.options.webMap;
|
|
7093
|
+
var basemap = (_a = this.options.useBasemap) !== null && _a !== void 0 ? _a : true;
|
|
7094
|
+
if (basemap) {
|
|
7095
|
+
if (data.basemap_webmap && data.basemap_webmap.basemaps.length) {
|
|
7096
|
+
var activeBaselayer = webMap.getActiveBaseLayer();
|
|
7097
|
+
this._lastActiveBaselayer = activeBaselayer
|
|
7098
|
+
? activeBaselayer.id
|
|
7099
|
+
: undefined;
|
|
7100
|
+
this._setBasemaps(data.basemap_webmap);
|
|
7101
|
+
}
|
|
7102
|
+
else if (this.options.defaultBasemap) {
|
|
7103
|
+
webMap.addBaseLayer('OSM', {
|
|
7104
|
+
id: 'webmap-default-baselayer',
|
|
7105
|
+
name: 'OpenStreetMap',
|
|
7106
|
+
});
|
|
7107
|
+
}
|
|
7108
|
+
}
|
|
7109
|
+
};
|
|
7079
7110
|
NgwWebmapLayerAdapter.prototype._setBasemaps = function (baseWebmap) {
|
|
7080
7111
|
var _this = this;
|
|
7081
7112
|
var webMap = this.options.webMap;
|
|
@@ -8089,10 +8120,10 @@ var NgwMap = (function (exports) {
|
|
|
8089
8120
|
options.baseUrl = options.connector.options.baseUrl;
|
|
8090
8121
|
}
|
|
8091
8122
|
options = deepmerge(OPTIONS, options);
|
|
8092
|
-
|
|
8093
|
-
|
|
8094
|
-
|
|
8095
|
-
|
|
8123
|
+
if (!options.center && !options.bounds) {
|
|
8124
|
+
options.bounds = [-179, -90, 180, 90];
|
|
8125
|
+
// options.maxBounds = options.bounds;
|
|
8126
|
+
}
|
|
8096
8127
|
if (options.connector) {
|
|
8097
8128
|
kits.push(new NgwKit({
|
|
8098
8129
|
connector: options.connector,
|