@web-map-service/map2d-app
Version:
基于openlayer的2D地图应用
60 lines (51 loc) • 1.23 kB
text/typescript
import { createMeasureInteractive } from '@web-map-service/map2d'
import { App, Plugin } from '../types'
type MeasureType = 'distance' | 'area' | 'angle'
function makeTool(app: App) {
const { interactiveManager, emitter } = app.map
function emit(data: string) {
app.emitter.emit('measure', data)
}
const sMeasure = createMeasureInteractive(interactiveManager)
const tool = {
enabled: false,
enable() {
if (tool.enabled) return
tool.enabled = true
emitter.on('measure', emit)
sMeasure.enable()
},
use(type: MeasureType) {
sMeasure.use(type)
},
close() {
if (!tool.enabled) return
tool.enabled = false
emitter.remove('measure', emit)
sMeasure.close()
}
}
return tool
}
export function createPlugin() {
let app: App
const plugin: Plugin = {
type: 'measure',
install(_app: App) {
app = _app
app.tools.measure = makeTool(app)
return app
}
}
return plugin
}
declare module './tool' {
interface Tools {
measure: ReturnType<typeof makeTool>
}
}
declare module '../types' {
interface AppEmitterEvent {
measure: any
}
}