94 lines
3.2 KiB
JavaScript
94 lines
3.2 KiB
JavaScript
|
|
// 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 }
|