{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/controls/my-location/index.ts"],"sourcesContent":["import AMapLoader from '@amap/amap-jsapi-loader'\nimport { CSSProperties, Teleport, VNode } from 'vue'\nimport { computed, createCommentVNode, defineComponent, getCurrentInstance, h, nextTick, reactive, ref, watch } from 'vue'\nimport {\n  VcBtn,\n  VcTooltip,\n  VcIcon,\n  VcSpinnerPuff,\n  VcSpinnerOval,\n  VcSpinnerTail,\n  VcSpinnerIos,\n  VcSpinnerOrbit,\n  VcSpinnerBars,\n  VcTooltipProps\n} from '@vue-cesium/components/ui'\nimport type { VcTooltipRef, VcBtnRef } from '@vue-cesium/components/ui'\nimport type { VcLocationEvt, VcColor, VcComponentInternalInstance, VcReadyObject, VcComponentPublicInstance } from '@vue-cesium/utils/types'\nimport { $, getVcParentInstance, getInstanceListener } from '@vue-cesium/utils/private/vm'\nimport usePosition from '@vue-cesium/composables/private/use-position'\nimport { gcj02towgs84 } from '@vue-cesium/utils/coordtransform'\nimport { makeColor, makeCartesian3 } from '@vue-cesium/utils/cesium-helpers'\nimport { isArray, isFunction, isPlainObject } from '@vue-cesium/utils/util'\nimport { useCommon, useLocale } from '@vue-cesium/composables'\nimport defaultProps from './defaultProps'\nimport { commonEmits } from '@vue-cesium/utils/emits'\n\nconst emits = {\n  ...commonEmits,\n  locationEvt: (evt: VcLocationEvt) => true\n}\nexport const myLocationProps = defaultProps\nexport default defineComponent({\n  name: 'VcMyLocation',\n  props: myLocationProps,\n  emits: emits,\n  setup(props: VcMyLocationProps, ctx) {\n    // state\n    const instance = getCurrentInstance() as VcComponentInternalInstance\n    instance.cesiumClass = 'VcMyLocation'\n    instance.cesiumEvents = []\n    const commonState = useCommon(props, ctx, instance)\n    if (commonState === void 0) {\n      return\n    }\n    const { $services } = commonState\n    const { t } = useLocale()\n    const rootRef = ref<HTMLElement>(null)\n    const tooltipRef = ref<VcTooltipRef>(null)\n    const btnRef = ref<VcBtnRef>(null)\n    const positioning = ref(false)\n    const positionState = usePosition(props, $services)\n    const parentInstance = getVcParentInstance(instance)\n    const hasVcNavigation = parentInstance.proxy?.$options.name === 'VcNavigation'\n    const canRender = ref(hasVcNavigation)\n    const rootStyle = reactive<CSSProperties>({})\n    let datasource: Cesium.CustomDataSource\n    let amapGeolocation: any = undefined\n    // watch\n    watch(\n      () => props,\n      val => {\n        nextTick(() => {\n          if (!instance.mounted) {\n            return\n          }\n          updateRootStyle()\n        })\n      },\n      {\n        deep: true\n      }\n    )\n    // computed\n    const myLocationTip = computed(() => {\n      return positioning.value\n        ? t('vc.navigation.myLocation.positioning')\n        : (isPlainObject(props.tooltip) && props.tooltip.tip) || t('vc.navigation.myLocation.myLocationTip')\n    })\n    // methods\n    instance.createCesiumObject = async () => {\n      const { viewer } = $services\n      const { CustomDataSource } = Cesium\n      const locationDsArray = viewer.dataSources.getByName('__vc-myLocation__')\n      if (locationDsArray.length) {\n        datasource = locationDsArray[0]\n      } else {\n        viewer.dataSources.add(new CustomDataSource('__vc-myLocation__')).then(ds => {\n          datasource = ds\n        })\n      }\n\n      let promiseLoadAmap: Promise<unknown> | undefined = undefined\n      if (props.amap && props.amap.key) {\n        const options = props.amap.options\n        promiseLoadAmap = new Promise((resolve, reject) => {\n          AMapLoader.load({\n            key: props.amap?.key,\n            version: props.amap?.version,\n            plugins: ['AMap.Geolocation']\n          })\n            .then(Amap => {\n              amapGeolocation = new Amap.Geolocation(options)\n              resolve(amapGeolocation)\n            })\n            .catch(e => {\n              commonState.logger.error(e)\n              reject(e)\n            })\n        })\n      }\n\n      const promiseAppend = new Promise((resolve, reject) => {\n        nextTick(() => {\n          resolve($(rootRef))\n        })\n      })\n      return Promise.all([promiseAppend, promiseLoadAmap]).then(e => {\n        return e[0]\n      })\n    }\n\n    instance.mount = async () => {\n      canRender.value = true\n      nextTick(() => {\n        updateRootStyle()\n      })\n      const { viewer } = $services\n      viewer.viewerWidgetResized?.raiseEvent({\n        type: instance.cesiumClass,\n        status: 'mounted',\n        target: $(rootRef)\n      })\n      return true\n    }\n\n    instance.unmount = async () => {\n      canRender.value = false\n      const { viewer } = $services\n      if (amapGeolocation) {\n        const scripts = document.getElementsByTagName('script')\n        const removeScripts: HTMLScriptElement[] = []\n        for (const script of scripts) {\n          if (script.src.indexOf('/webapi.amap.com/maps') > -1) {\n            removeScripts.push(script)\n          }\n        }\n        removeScripts.forEach(script => {\n          document.getElementsByTagName('body')[0].removeChild(script)\n        })\n      }\n\n      viewer.viewerWidgetResized?.raiseEvent({\n        type: instance.cesiumClass,\n        status: 'unmounted',\n        target: $(rootRef)\n      })\n      return viewer.dataSources.remove(datasource, true)\n    }\n\n    const updateRootStyle = () => {\n      const css: CSSProperties = positionState.style.value\n      rootStyle.left = css.left\n      rootStyle.top = css.top\n      rootStyle.transform = css.transform\n\n      if (!hasVcNavigation) {\n        const side = positionState.attach.value\n        const btnTarget = $(btnRef)?.$el\n        if (btnTarget !== void 0) {\n          // const clientRect = btnTarget.getBoundingClientRect()\n          // css.width = `${clientRect.width}px`\n          // css.height = `${clientRect.height}px`\n\n          if (typeof props.teleportToViewer === 'undefined' || props.teleportToViewer) {\n            if ((side.bottom || side.top) && !side.left && !side.right) {\n              css.left = '50%'\n              css.transform = 'translate(-50%, 0)'\n            }\n\n            if ((side.left || side.right) && !side.top && !side.bottom) {\n              css.top = '50%'\n              css.transform = 'translate(0, -50%)'\n            }\n          }\n        }\n      }\n\n      Object.assign(rootStyle, css)\n    }\n\n    const onHandleClick = () => {\n      $(tooltipRef)?.hide()\n      positioning.value = true\n      const customApi = props.customApi || props.customAPI\n      if (isFunction(customApi)) {\n        const position = customApi(handleLocationError)\n        zoomToMyLocation(position)\n      } else if (amapGeolocation && props.amap && props.amap.key) {\n        amapGeolocation.getCurrentPosition((status, result) => {\n          if (status === 'complete') {\n            let position: number[] = [result.position.lng, result.position.lat]\n            if (props.amap?.transformToWGS84) {\n              position = gcj02towgs84(position[0], position[1])\n            }\n            zoomToMyLocation(\n              {\n                lng: position[0],\n                lat: position[1],\n                address: result.formattedAddress\n              },\n              result\n            )\n          } else {\n            handleLocationError(t('vc.navigation.myLocation.fail'), result.message)\n          }\n        })\n      } else if (props.geolocation) {\n        navigator.geolocation.getCurrentPosition(\n          position => {\n            zoomToMyLocation(\n              {\n                lng: position.coords.longitude,\n                lat: position.coords.latitude\n              },\n              position\n            )\n          },\n          handleLocationError,\n          {\n            enableHighAccuracy: props.geolocation.enableHighAccuracy,\n            timeout: props.geolocation.timeout,\n            maximumAge: props.geolocation.maximumAge\n          }\n        )\n      } else {\n        handleLocationError(t('vc.navigation.myLocation.fail'))\n      }\n    }\n\n    const zoomToMyLocation = (position, detail?) => {\n      const longitude = position.lng\n      const latitude = position.lat\n      const address = position.address\n      const { Rectangle, sampleTerrain, defined, SceneMode } = Cesium\n      const { viewer } = $services\n      datasource.entities.removeAll()\n      const myPositionEntity = datasource.entities.add({\n        id: props.id,\n        position: makeCartesian3([longitude, latitude], viewer.scene.globe.ellipsoid) as Cesium.Cartesian3,\n        point: {\n          color: makeColor(props.pointColor),\n          pixelSize: props.pixelSize,\n          outlineWidth: props.outlineWidth,\n          outlineColor: makeColor(props.outlineColor)\n        },\n        properties: {\n          ...detail\n        },\n        description:\n          props.description?.call(this, position, detail) ||\n          describeWithoutUnderscores({\n            [t('vc.navigation.myLocation.lng')]: longitude,\n            [t('vc.navigation.myLocation.lat')]: latitude,\n            [t('vc.navigation.myLocation.address')]: address\n          })\n      })\n\n      const listener = getInstanceListener(instance, 'locationEvt')\n      listener &&\n        ctx.emit('locationEvt', {\n          type: 'location',\n          position,\n          detail,\n          entity: myPositionEntity\n        })\n\n      const options: any = {\n        duration: props.duration\n      }\n\n      defined(props.maximumHeight) && (options.maximumHeight = props.maximumHeight)\n      defined(props.hpr) && isArray(props.hpr) && (options.offset = new Cesium.HeadingPitchRange(props.hpr[0], props.hpr[1], props.hpr[2]))\n\n      if (viewer.scene.mode === SceneMode.SCENE2D || viewer.scene.mode === SceneMode.COLUMBUS_VIEW) {\n        return viewer.flyTo(myPositionEntity, options).then(() => {\n          positioning.value = false\n          listener &&\n            ctx.emit('locationEvt', {\n              type: 'zoomIn',\n              camera: viewer.camera,\n              status: 'end'\n            })\n        })\n      }\n\n      // west, south, east, north, result\n      const factor = props.factor\n      const rectangle = Rectangle.fromDegrees(longitude - factor, latitude - factor, longitude + factor, latitude + factor)\n      const camera = viewer.scene.camera\n      // Work out the destination that the camera would naturally fly to\n      const destinationCartesian = camera.getRectangleCameraCoordinates(rectangle)\n      const destination = viewer.scene.globe.ellipsoid.cartesianToCartographic(destinationCartesian)\n      const terrainProvider = viewer.scene.globe.terrainProvider\n      const level = props.level // A sufficiently coarse tile level that still has approximately accurate height\n      const positions = [Rectangle.center(rectangle)]\n\n      // Perform an elevation query at the centre of the rectangle\n      return sampleTerrain(terrainProvider, level, positions).then(function (results) {\n        // Add terrain elevation to camera altitude\n        const finalDestinationCartographic: any = {\n          longitude: destination.longitude,\n          latitude: destination.latitude,\n          height: destination.height + results[0].height\n        }\n        const finalDestination = viewer.scene.globe.ellipsoid.cartographicToCartesian(finalDestinationCartographic)\n        listener &&\n          ctx.emit('locationEvt', {\n            type: 'zoomIn',\n            camera: viewer.camera,\n            status: 'start'\n          })\n\n        camera.flyTo({\n          duration: props.duration,\n          destination: finalDestination,\n          complete: () => {\n            positioning.value = false\n            listener &&\n              ctx.emit('locationEvt', {\n                type: 'zoomIn',\n                camera: viewer.camera,\n                status: 'end'\n              })\n          },\n          cancel: () => {\n            positioning.value = false\n            listener &&\n              ctx.emit('locationEvt', {\n                type: 'zoomIn',\n                camera: viewer.camera,\n                status: 'cancel'\n              })\n          }\n        })\n      })\n    }\n\n    const describeWithoutUnderscores = (properties, nameProperty?) => {\n      let html = ''\n      if (properties instanceof Cesium.PropertyBag) {\n        // unwrap the properties from the PropertyBag\n        properties = properties.getValue(Cesium.JulianDate.now())\n      }\n      for (let key in properties) {\n        if (Object.prototype.hasOwnProperty.call(properties, key)) {\n          if (key === nameProperty) {\n            continue\n          }\n          let value = properties[key]\n          if (typeof value === 'object') {\n            value = describeWithoutUnderscores(value)\n          } else {\n            // value = formatPropertyValue(value)\n          }\n          key = key.replace(/_/g, ' ')\n          if (Cesium.defined(value)) {\n            html += '<tr><th>' + key + '</th><td>' + value + '</td></tr>'\n          }\n        }\n      }\n      if (html.length > 0) {\n        html = '<table class=\"cesium-infoBox-defaultTable\"><tbody>' + html + '</tbody></table>'\n      }\n      return html\n    }\n\n    const handleLocationError = (...args) => {\n      positioning.value = false\n      commonState.logger.error(...args)\n    }\n\n    const getLoadingCmp = () => {\n      switch (props.loadingType) {\n        case 'bars':\n          return VcSpinnerBars\n        case 'ios':\n          return VcSpinnerIos\n        case 'orbit':\n          return VcSpinnerOrbit\n        case 'oval':\n          return VcSpinnerOval\n        case 'puff':\n          return VcSpinnerPuff\n        case 'tail':\n          return VcSpinnerTail\n        default:\n          return VcSpinnerBars\n      }\n    }\n\n    const onTooltipBeforeShow = e => {\n      if (positioning.value) {\n        e.cancel = true\n      }\n    }\n\n    return () => {\n      if (canRender.value) {\n        const inner: VNode[] = []\n        inner.push(\n          h(VcIcon, {\n            name: props.icon,\n            size: props.size\n          })\n        )\n\n        inner.push(h('div', null, props.label))\n\n        if (isPlainObject(props.tooltip)) {\n          inner.push(\n            h(\n              VcTooltip,\n              {\n                ref: tooltipRef,\n                onBeforeShow: onTooltipBeforeShow,\n                ...props.tooltip\n              },\n              () => h('strong', null, myLocationTip.value)\n            )\n          )\n        } else {\n          inner.push(createCommentVNode('v-if'))\n        }\n\n        const renderContent = h(\n          'div',\n          {\n            ref: rootRef,\n            class: `vc-my-location ${positionState.classes.value} ${props.customClass}`,\n            style: rootStyle\n          },\n          [\n            h(\n              VcBtn,\n              {\n                ref: btnRef,\n                size: props.size,\n                flat: props.flat,\n                stack: props.stack,\n                round: props.round,\n                loading: positioning.value,\n                dense: true,\n                style: { color: props.color, background: props.background },\n                onClick: onHandleClick\n              },\n              {\n                default: () => inner,\n                loading: () => h(getLoadingCmp())\n              }\n            )\n          ]\n        )\n\n        return !hasVcNavigation && props.teleportToViewer ? h(Teleport, { to: $services.viewer._element }, renderContent) : renderContent\n      } else {\n        return createCommentVNode('v-if')\n      }\n    }\n  }\n})\n\nexport type VcMyLocationEmits = typeof emits\nexport type VcMyLocationProps = {\n  /**\n   * Specify the position of the VcDistanceLegend.\n   * Default value: top-right\n   */\n  position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top' | 'right' | 'bottom' | 'left'\n  /**\n   * An array of two numbers to offset the VcDistanceLegend horizontally and vertically in pixels.\n   * Default value: [0, 0]\n   */\n  offset?: [number, number]\n  /**\n   * Specify the browser geolocation positioning parameters.\n   * Default value:\n   * {\n   *    enableHighAccuracy: true,\n   *    timeout: 5000,\n   *    maximumAge: 0\n   * }\n   */\n  geolocation?: PositionOptions\n  /**\n   * Specify the AMap positioning parameters. If set, use AMap api positioning first.\n   */\n  amap?: {\n    key: string\n    version: string\n    options: {\n      timeout?: number\n      convert?: false\n      noGeoLocation?: 0 | 1 | 2 | 3\n      needAddress?: boolean\n      extensions?: 'all' | 'base'\n    }\n    transformToWGS84?: boolean\n  }\n  /**\n   * Specify the id of the location point after the positioning is successful.\n   */\n  id?: string\n  /**\n   * Specify the color of the location point after the positioning is successful.\n   * Default value: #08ABD5\n   */\n  pointColor?: VcColor\n  /**\n   * Specify the pixel size of the location point after the positioning is successful.\n   * Default value: 12\n   */\n  pixelSize?: number\n  /**\n   * Specify the outline width of the location point after the positioning is successful.\n   * Default value: 3\n   */\n  outlineWidth?: number\n  /**\n   * Specify the outline color of the location point after the positioning is successful.\n   * Default value: #fff\n   */\n  outlineColor?: VcColor\n  /**\n   * Specify the sampling level when the altitude is automatically recognized based on the terrain after the positioning is successful.\n   * Default value: 6\n   */\n  level?: number\n  /**\n   * Specify the time to fly to the location point.\n   * Default value: 3\n   */\n  duration?: number\n  /**\n   * Specify the factor by which the anchor point is converted to a rectangle.\n   * Default: 0.01\n   */\n  factor?: number\n  /**\n   * The maximum height at the peak of the flight.\n   */\n  maximumHeight?: number\n  /**\n   * The offset from the target in the local east-north-up reference frame centered at the target. 2D or Columbus view works.\n   */\n  hpr?: [number, number, number]\n  /**\n   * Specify a custom API for positioning.\n   */\n  customAPI?: (errorCallback) => { lng: number; lat: number }\n  /**\n   * Specify a custom API for positioning.\n   */\n  customApi?: (errorCallback) => { lng: number; lat: number }\n  /**\n   * Specify the description of the location point\n   */\n  description?: (position, detail) => string\n  /**\n   * Specify the icon of the VcMyLocation.\n   * Default value: vc-icons-geolocation\n   */\n  icon?: string\n  /**\n   * Specify the size of the VcMyLocation.\n   * Default value: 24px\n   */\n  size?: string\n  /**\n   * Specify the css color of the VcMyLocation.\n   * Default value: #3f4854\n   */\n  color?: string\n  /**\n   * Specify the css background of the VcMyLocation.\n   * Default value: #fff\n   */\n  background?: string\n  /**\n   * Makes a circle shaped VcMyLocation.\n   */\n  round?: boolean\n  /**\n   * Use 'flat' design.\n   */\n  flat?: boolean\n  /**\n   * The text that will be shown on the VcMyLocation.\n   */\n  label?: string\n  /**\n   * Stack icon and label vertically instead of on same line.\n   */\n  stack?: boolean\n  /**\n   * The tooltip parameter.\n   */\n  tooltip?: false | VcTooltipProps\n  /**\n   * Specify the spinner style of the positioning transition\n   */\n  loadingType?: 'bars' | 'ios' | 'orbit' | 'oval' | 'puff' | 'tail'\n  /**\n   * Specify the customClass of the vc-my-location.\n   */\n  customClass?: string\n  /**\n   * Specify whether to add to the cesium-viewer node.\n   * Default value: true\n   */\n  teleportToViewer?: boolean\n  /**\n   * Triggers before the VcCompass is loaded.\n   */\n  onBeforeLoad?: (instance: VcComponentInternalInstance) => void\n  /**\n   * Triggers when the VcCompass is successfully loaded.\n   */\n  onReady?: (readyObject: VcReadyObject) => void\n  /**\n   * Triggers when the component load failed.\n   */\n  onUnready?: (e: any) => void\n  /**\n   * Triggers when the VcCompass is destroyed.\n   */\n  onDestroyed?: (instance: VcComponentInternalInstance) => void\n  /**\n   * Triggers when the positioning button is clicked.\n   */\n  onLocationEvt?: (evt: VcLocationEvt) => void\n}\n\nexport type VcMyLocationRef = VcComponentPublicInstance<VcMyLocationProps>\n"],"names":["defaultProps","_a"],"mappings":"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"}