首页 > 代码库 > SuperMap for JavaScript 中的最佳路径分析功能转换为三维中的最佳路径分析功能
SuperMap for JavaScript 中的最佳路径分析功能转换为三维中的最佳路径分析功能
1、注意,要处理有交通网络分析服务
2、代码
var nodeArray = [],pathListIndex = 0,routeCompsIndex = 0,pathTime,style = {
strokeColor: "#304DBE",
strokeWidth: 3,
pointerEvents: "visiblePainted",
fill: false
},
styleGuidePoint = {
pointRadius: 10,
externalGraphic: path + "/SWimg/c1.png"
};
var url2="http://localhost:8090/iserver/services/transportationAnalyst-scene/rest/networkanalyst/BuildNetwork@GIS";
//查找最优路径
function findPath() {
if(nodeArray.length>1)
{
alert("进来了。");
var findPathService, parameter, analystParameter, resultSetting;
resultSetting = new SuperMap.REST.TransportationAnalystResultSetting({
returnEdgeFeatures: true,
returnEdgeGeometry: true,
returnEdgeIDs: true,
returnNodeFeatures: true,
returnNodeGeometry: true,
returnNodeIDs: true,
returnPathGuides: true,
returnRoutes: true
});
analystParameter = new SuperMap.REST.TransportationAnalystParameter({
resultSetting: resultSetting,
//weightFieldName: "SHAPE_LENGTH"
});
parameter = new SuperMap.REST.FindPathParameters({
isAnalyzeById: false,
nodes: nodeArray,
hasLeastEdgeCount: false,
parameter: analystParameter
});
if (nodeArray.length <= 1) {
alert("站点数目有误");
}
findPathService = new SuperMap.REST.FindPathService(url2, {
eventListeners: { "processCompleted": processCompleted }
});
findPathService.processAsync(parameter);
}else
{
alert("没有正常选点。");
}
}
function processCompleted(findPathEventArgs) {
var result = findPathEventArgs.result;
allScheme(result);
}
function allScheme(result) {
if (pathListIndex < result.pathList.length) {
addPath(result);
} else {
pathListIndex = 0;
//线绘制完成后会绘制关于路径指引点的信息
addPathGuideItems(result);
}
}
var pathFeature = new SuperMap.Web.Core.Feature3D();
var pointsttt = null;
//以动画效果显示分析结果
function addPath(result) {
pan();
if(pointsttt == null)
{
pointsttt = new SuperMap.Web.Core.Point3Ds();
}
//style3d.set_bottomAltitude(2000);
if (routeCompsIndex < result.pathList[pathListIndex].route.components.length) {
for (var k = 0; k < 2; k++) {
if (result.pathList[pathListIndex].route.components[routeCompsIndex + k]) {
//points.push(new SuperMap.Geometry.Point(result.pathList[pathListIndex].route.components[routeCompsIndex + k].x, result.pathList[pathListIndex].route.components[routeCompsIndex + k].y));
var point = new SuperMap.Web.Core.Point3D();
point.x=result.pathList[pathListIndex].route.components[routeCompsIndex + k].x;
point.y=result.pathList[pathListIndex].route.components[routeCompsIndex + k].y;
point.z=120;
pointsttt.add(point);
}
}
//每隔0.001毫秒加载一条弧段
pathTime = setTimeout(function () { addPath(result); }, 0.001);
routeCompsIndex++;
} else {
clearTimeout(pathTime);
var colorLine = new SuperMap.Web.Core.Color(255,0,0,255);
var style3d = new SuperMap.Web.Core.Style3D();
style3d.set_lineColor(colorLine);
style3d.set_lineWidth(20);
style3d.set_altitudeMode(2);
var geoLinettt = new SuperMap.Web.Core.GeoLine3D();
geoLinettt.addPart(pointsttt);
pathFeature.set_geometry(geoLinettt);
pathFeature.set_style3D(style3d);
trackingLayer.add(pathFeature, routeCompsIndex);
routeCompsIndex = 0;
pathListIndex++;
allScheme(result);
pointsttt = null;
}
}
//再查出来的结果中插入符号
function addPathGuideItems(result){
}
function xuanDian(){
nodeArray=[];
trackingLayer.removeAll(); //删除跟踪图层上的图像
//设置控件的当前操作为自定义操作
var xuanDian = new SuperMap.Web.UI.Action3Ds.xuanDian(sceneControl);
sceneControl.set_sceneAction(xuanDian);
}
//通过继承SceneAction的方式来扩展用户的Action,继承方式采用框架提供的格式
//扩展Action的构造函数
SuperMap.Web.UI.Action3Ds.xuanDian = function (sceneControl) {
SuperMap.Web.UI.Action3Ds.xuanDian.initializeBase(this);
this._name = "xuanDian";
this._sceneControl = sceneControl;
//对应的场景操作类型为漫游
this._type = SuperMap.Web.UI.Action3Ds.SceneActionType.PAN;
};
//扩展Action的属性和方法
SuperMap.Web.UI.Action3Ds.xuanDian.prototype = {
/*
* 析构方法
*/
dispose: function () {
this._sceneControl = null;
},
/*
* 鼠标单击方法
*/
onm ouseDown: function (e) {
//通过事件对象查询到相关的信息
var x = e.get_clientX();
var y = e.get_clientY();
var point = new SuperMap.Pixel(x, y);
var point3d=sceneControl.pixelToGlobe(point,SuperMap.Web.Realspace.PixelToGlobeMode.TerrainAndModel);
var point = new SuperMap.Geometry.Point(point3d.x,point3d.y);
nodeArray.push(point);
DrawPicForz(point3d.x,point3d.y,point3d.z,"fx");
}
};
SuperMap.Web.UI.Action3Ds.xuanDian.registerClass(‘SuperMap.Web.UI.Action3Ds.xuanDian‘, SuperMap.Web.UI.Action3Ds.SceneAction, Sys.IDisposable);
//z在三维场景中添加一个符号
function DrawPicForz(x, y,z,type){
var geometry = new SuperMap.Web.Core.GeoPoint3D(
new SuperMap.Web.Core.Point3D(x, y,z));//原来的高度是180
var feature3D = new SuperMap.Web.Core.Feature3D();
//设置feature3D中的style3D属性
var style = new SuperMap.Web.Core.Style3D();
var pictureurl = null;
var geoPlacemark = new SuperMap.Web.Core.GeoPlacemark();
if(type == "fx"){
pictureurl = path + "/SWimg/water1.png";
}
//style.set_altitudeMode("CLAMP_TO_GROUND");
style.set_altitudeMode(SuperMap.Web.Realspace.AltitudeMode.ABSOLUTE);
style.set_markerFile(pictureurl);
var instanceVar = new SuperMap.Web.Core.TextStyle3D();
instanceVar.set_backColor(new SuperMap.Web.Core.Color(255, 0, 0, 255));
instanceVar.set_fontScale(3);
feature3D.set_textStyle3D(instanceVar);
//创建Geoplacemark
geoPlacemark.set_geometry(geometry);
feature3D.set_geometry(geoPlacemark);
feature3D.set_style3D(style);
var trackingLayer = scene.get_trackingLayer3D();
//跟踪图层设置为可见
trackingLayer.set_isVisible(true);
trackingLayer.add(feature3D, "daohang");
}
SuperMap for JavaScript 中的最佳路径分析功能转换为三维中的最佳路径分析功能