lg_frontend/static/libs/mars3d/thirdParty/geolocation/Geolocation.js

94 lines
3.2 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// import * as mars3d from "mars3d"
// const Cesium = mars3d.Cesium
(function () {
//采用高德地图定位的算法参考帮助文档https://lbs.amap.com/api/javascript-api/guide/services/geolocation
document.write('<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=616e615727a1134331ff9459856653f1"></script>');
class Geolocation extends mars3d.control.ToolButton {
/**
* 创建_container控件容器对象的方法
* 只会调用一次
* @return {void} 无
* @private
*/
_mountedHook() {
//缩小
this._container = mars3d.DomUtil.create("div", "cesium-button cesium-toolbar-button tracking-deactivated");
this._container.setAttribute("title", "查看GPS位置");
this._container.addEventListener("click", (e) => {
// one time tracking
this.startTracking();
});
}
stopTracking() {
mars3d.DomUtil.removeClass(this._container, "tracking-activated");
mars3d.DomUtil.addClass(this._container, "tracking-deactivated");
this.clearLocationPoint();
}
startTracking() {
AMap.plugin("AMap.Geolocation", ()=> {
mars3d.DomUtil.removeClass(this._container, "tracking-deactivated");
mars3d.DomUtil.addClass(this._container, "tracking-activated");
if (!this.geolocation) {
this.geolocation = new AMap.Geolocation({
enableHighAccuracy: true, // 是否使用高精度定位默认true
timeout: 10000, // 设置定位超时时间,默认:无穷大
convert: true, //自动偏移坐标偏移后的坐标为高德坐标默认true
});
}
var that = this;
this.geolocation.getCurrentPosition();
function onComplete(data) {
// data是具体的定位信息
var wgsPoint = mars3d.PointTrans.gcj2wgs([data.position.lng, data.position.lat]);
that.flyToLocation({ lng: wgsPoint[0], lat: wgsPoint[1] });
}
function onError(data) {
// 定位出错,参考https://lbs.amap.com/faq/js-api/map-js-api/position-related
mars3d.Util.msg(data.message, "定位失败");
}
AMap.event.addListener(this.geolocation, "complete", onComplete);
AMap.event.addListener(this.geolocation, "error", onError);
});
}
flyToLocation(position) {
mars3d.DomUtil.removeClass(this._container, "tracking-activated");
mars3d.DomUtil.addClass(this._container, "tracking-deactivated");
this._map.flyToPoint(position, {
radius: 2000,
complete: function () {},
});
this.clearLocationPoint();
var graphic = new mars3d.graphic.DivLightPoint({
position: position,
style: {
color: "#ffff00",
clampToGround: true,
},
tooltip: "我的位置:" + position.lng + "," + position.lat,
});
this._map.graphicLayer.addGraphic(graphic);
this.graphic = graphic;
}
clearLocationPoint() {
if (!this.graphic) return;
this.graphic.destroy();
this.graphic = null;
}
}
//对外接口
mars3d.control.Geolocation = Geolocation;
})();
// export { Geolocation }