qgis加载高德自定义_CesiumJS+高德地图实现路径规划

Cesium项⽬实战(8)-路径规划-集成百度、⾼德、腾讯地图路径规划服务(⾼德篇) - ⼩专栏 Cesium 路径分析(纯前端计算)b
function getCatesian3FromPX(px, viewer, entity) {
truePick = pick;
}
if (viewer.scene.pickPositionSupported && Cesium.defined(truePick)) {
cartesian = viewer.scene.pickPosition(px);
} else {
var ray = PickRay(px);
if (!ray) return;
cartesian = viewer.scene.globe.pick(ray, viewer.scene);
}
return cartesian;
}
function cartesianToLnglat(cartesian, isToWgs84) {
if (!cartesian) return;
var ellipsoid = viewer.scene.globe.ellipsoid;
var lnglat = ellipsoid.cartesianToCartographic(cartesian);
//var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
if (isToWgs84) {
var lat = Degrees(lnglat.latitude);
var lng = Degrees(lnglat.longitude);
var hei = lnglat.height;
return [lng, lat, hei];
} else {
return [lnglat.longitude, lnglat.latitude, lnglat.height];
}
}
// 经纬度转世界坐标 [101,40]
function lnglatToCartesian(lnglat) {
if (!lnglat) return null;
return Cesium.Cartesian3.fromDegrees(lnglat[0], lnglat[1], lnglat[2] || 0);
}
function lnglatArrToCartesianArr(lnglatArr) {
if (!lnglatArr) return [];
var arr = [];
for (var i = 0; i < lnglatArr.length; i++) {
arr.push(lnglatToCartesian(lnglatArr[i]));
}
return arr;
}
// 加载地形
var viewer = new Cesium.Viewer('cesiumContainer', {
imageryProvider: new Cesium.ArcGisMapServerImageryProvider({
url: "/ArcGIS/rest/services/World_Imagery/MapServer" }),
terrainProvider: new Cesium.CesiumTerrainProvider({ // 加载⽕星在线地形
url: "/terrain"
})
});
var viewer = new Cesium.Viewer("cesiumContainer");
// 坐标处理
class searchRoute {
constructor(start, end) {
this.startP = start;
}
start(opt) {
var startP = wgs2gcj(this.startP);
url: "/v3/direction/driving",
type: "GET",
dataType: "jsonp",
timeout: "5000",
contentType: "application/json;utf-8",
data: {
"output": "json",
"extensions": "all",
"key": "此处替换你的申请的 key 值",  // /api/webservice/guide/api/direction
"origin": startP[0] + "," + startP[1],
"destination": endP[0] + "," + endP[1],
"strategy": opt.strategy || 10
},
success: function (json) {
// 由于线涉及坐标较多此处返回的坐标未转为wgs84
var data = "";
if (!json || !ute || !ute.paths) {
data = "";
} else {
data = ute.paths;
}
opt.callback(data);
},
error: function (data) { }
});
}
}
// 处理⽤户输⼊事件。可以添加⾃定义功能以在以下位置执⾏当⽤户输⼊输⼊时。
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas); // viewer.scene.canvas => ⽤于为其创建场景的HTML canvas元素。var isClickAgain = false;
var start = null;
var entd = null;
// ⿏标左键单击开始绘制
handler.setInputAction(function (evt) {
// 返回具有' primitive'属性的对象,该对象包含场景中的第⼀个(顶部)基本体在特定的窗⼝坐标处;
var pick = viewer.scene.pick(evt.position);
console.log(evt.position)
var cartesian = getCatesian3FromPX(evt.position, viewer);
if (!isClickAgain) {便利贴印刷
isClickAgain = true;
start = ities.add({ // 起始点
name: "图标点",
position: cartesian,
billboard: {
image: 'mark4.png',
scale: 1,
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM
}
});
return;
拉碗}
if (isClickAgain) {
end = ities.add({ // 结束点
name: "图标点",
position: cartesian,
billboard: {
image: 'mark2.png',
scale: 1,
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM
}
showRes(Value(), Value());
handler.destroy();
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
// 访问⾼德接⼝
function showRes(start, end) {
if (!start || !end) return;
var startp = cartesianToLnglat(start, true);
var endP = cartesianToLnglat(end, true);
var search = new searchRoute([startp[0], startp[1]], [endP[0], endP[1]]);
search.start({
strategy: 11,
callback: function (data) {
addRouteLine(data[0]);
}
})
}
function addRouteLine(res) {
var arr = [];
var steps = res.steps;
for (var i = 0; i < steps.length; i++) {
var item = steps[i];
var positionStr = item.polyline;
var strArr = positionStr.split(";");
for (var z = 0; z < strArr.length; z++) {
var item2 = strArr[z];
var strArr2 = item2.split(",");
var p = gcj2wgs(strArr2);
arr.push(p);
}
}
var cartesians = lnglatArrToCartesianArr(arr);
var line = ities.add({
polyline: {
positions: cartesians,
clampToGround: true,
material: Cesium.Color.RED.withAlpha(1),
width: 3
}
});
moveOnRoute(line);
}
//汽车移动=========================
var qicheModel = null;
function moveOnRoute(lineEntity) {
if (!lineEntity) return;
var positions = lineEntity.Value();
if (!positions) return;
var allDis = 0;
for (var index = 0; index < positions.length - 1; index++) {
var dis = Cesium.Cartesian3.distance(positions[index], positions[index + 1]);
allDis += dis;
}
var playTime = 100;
var v = allDis / playTime;
var startTime = viewer.clock.currentTime;
var endTime = Cesium.JulianDate.addSeconds(startTime, playTime, new Cesium.JulianDate()); var property = new Cesium.SampledPositionProperty();
var t = 0;
for (var i = 1; i < positions.length; i++) {
if (i == 1) {
property.addSample(startTime, positions[0]);
var time = dis / v + t;
var julianDate = Cesium.JulianDate.addSeconds(startTime, time, new Cesium.JulianDate());
property.addSample(julianDate, positions[i]);
t += dis / v;
}
if (qicheModel) {
ve(qicheModel);
qicheModel = null;
}
qicheModel = ities.add({
position: property,
orientation: new Cesium.VelocityOrientationProperty(property),
model: {
uri: "car.glb",
scale: 30
}
});
viewer.clock.currentTime = startTime;
viewer.clock.multiplier = 1;
viewer.clock.shouldAnimate = true;
viewer.clock.stopTime = endTime;
}
//坐标转换==================================
var x_PI = 3.14159265358979324 * 3000.0 / 180.0;
var PI = 3.1415926535897932384626;
var a = 6378245.0;
var ee = 0.00669342162296594323;
function transformWD(lng, lat) {
var ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng)); ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
return ret;
}
function transformJD(lng, lat) {
var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
return ret;
土豆切丝机}
function wgs2gcj(arrdata) {
var lng = Number(arrdata[0]);
无线图像传输
var lat = Number(arrdata[1]);
var dlat = transformWD(lng - 105.0, lat - 35.0);
var dlng = transformJD(lng - 105.0, lat - 35.0);
var radlat = lat / 180.0 * PI;
var magic = Math.sin(radlat);
magic = 1 - ee * magic * magic;
var sqrtmagic = Math.sqrt(magic);
dlat = dlat * 180.0 / (a * (1 - ee) / (magic * sqrtmagic) * PI);
dlng = dlng * 180.0 / (a / sqrtmagic * s(radlat) * PI);
var mglat = lat + dlat;
var mglng = lng + dlng;
mglng = Fixed(6));
mglat = Fixed(6));翻转立方体
绝缘子串return [mglng, mglat];
};
function gcj2wgs(arrdata) {

本文发布于:2024-09-22 13:34:02,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/102763.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:坐标   对象   返回   路径   规划   功能
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议