ArcGIS中离线发布路径分析服务,您可以按照以下步骤操作:
准备ArcMap项目:
- 打开ArcMap并加载包含网络分析图层的项目。
- 在ArcMap中,使用 Network Analyst Toolbar 或 Catalog 创建网络数据集(Network Dataset)。
导出数据:
- 导出网络数据集以及与路径分析相关的任何其他数据,例如点、线等。
- 在ArcMap中,右键单击要导出的数据集,选择“数据”>“导出数据”以将其导出到本地文件夹中。
打包数据为文件地理数据库:
- 将导出的数据集和任何相关数据打包到文件地理数据库中。
- 在ArcMap中,使用工具 “Create File GDB” 来创建文件地理数据库,并将数据导入其中。
创建路径分析服务:
- 打开ArcGIS Server Manager,并登录以管理您的服务器。
- 在服务器管理界面中,选择“发布服务”并选择“新建服务”。
- 选择好服务类型,通常为 Network Analysis service,并上传您准备好的文件地理数据库。
- 配置服务的属性,如服务名称、描述、访问权限等。
发布服务:
- 提交发布任务后,等待服务发布成功。一旦发布成功,您就可以在浏览器中访问该服务的 REST 终端,并在 ArcGIS Online 或 ArcGIS Pro 中使用该服务进行路径分析。
离线访问:
- 离线访问可以通过在网络不可用时使用本地 REST 终端进行。确保您的网络分析服务已配置为允许离线访问,并相应地操作。
// 小车旋转角度 let radian = Cesium.Math.toRadians(3.0); // 小车的速度 let speed = 0.9; // 速度矢量 let speedVector = new Cesium.Cartesian3(); let scene = viewer.scene; // 起始位置 let position = Cesium.Cartesian3.fromDegrees(108.92719, 34.25243,1.5); // 用于设置小车方向 let hpRoll = new Cesium.HeadingPitchRoll(); let fixedFrameTransforms = Cesium.Transforms.localFrameToFixedFrameGenerator('north', 'west'); // 添加小车模型 let carPrimitive = scene.primitives.add(Cesium.Model.fromGltf({ url: './/Apps//SampleData//image2d//小车.glb', modelMatrix: Cesium.Transforms.headingPitchRollToFixedFrame(position, hpRoll, Cesium.Ellipsoid.WGS84, fixedFrameTransforms), scale: 2.1, // 模型的缩放比例 minimumPixelSize: 15, // 模型的最小像素大小 maximumScale: 300, // 模型的最大缩放比例 runAnimations: true, // 是否运行动画 clampAnimations: true, // 是否限制动画 show: true // 是否显示模型 })); // 小车状态标志 let flag = { moveUp:false, moveDown:false, moveLeft:false, moveRight:false }; // 根据键盘按键返回标志 function setFlagStatus(key,value) { switch (key.keyCode){ case 37: // 左 flag.moveLeft = value; break; case 38: // 上 flag.moveUp = value; break; case 39: // 右 flag.moveRight = value; break; case 40: flag.moveDown = value; // 下 break; } } document.addEventListener('keydown',(e)=>{ setFlagStatus(e, true); }); document.addEventListener('keyup',(e)=>{ setFlagStatus(e, false); }); // 对帧添加监听事件 viewer.clock.onTick.addEventListener((clock)=>{ if(flag.moveUp){ if(flag.moveLeft){ hpRoll.heading -= radian; } if(flag.moveRight){ hpRoll.heading += radian; } moveCar(true); } if(flag.moveDown){ if(flag.moveLeft){ hpRoll.heading -= radian; } if(flag.moveRight){ hpRoll.heading += radian; } moveCar(false); } }); var particleSystem = viewer.scene.primitives.add(new Cesium.ParticleSystem({ image : './/Apps//SampleData//image2d//smoke.png', imageSize : new Cesium.Cartesian2(20, 20), startScale : 1.0, endScale : 4.0, // Particle behavior particleLife : 1.0, speed : 5.0, // Emitter parameters emitter : new Cesium.CircleEmitter(0.5), emissionRate : 5.0, modelMatrix : entity.computeModelMatrix(viewer.clock.startTime, new Cesium.Matrix4()), lifetime : 16.0 })); // 移动小车 function moveCar(isUP) { // 计算速度矩阵 if(isUP>0){ speedVector = Cesium.Cartesian3.multiplyByScalar(Cesium.Cartesian3.UNIT_X,speed,speedVector); }else{ speedVector = Cesium.Cartesian3.multiplyByScalar(Cesium.Cartesian3.UNIT_X,-speed,speedVector); } // 根据速度计算出下一个位置的坐标 position = Cesium.Matrix4.multiplyByPoint(carPrimitive.modelMatrix ,speedVector, position); // 小车移动 Cesium.Transforms.headingPitchRollToFixedFrame(position, hpRoll, Cesium.Ellipsoid.WGS84, fixedFrameTransforms, carPrimitive.modelMatrix); // 添加尾气效果 particleSystem.modelMatrix = Cesium.Matrix4.fromTranslation(position); }
let _routeAnalysisResouce = null; let _screenSpaceEventHandler=null; /** * 路径分析 arcgis 实现 */ openRouteAnalysis() { map.viewer.dataSources.add(_routeAnalysisResouce); loadModules([ "esri/Graphic", "esri/tasks/RouteTask", "esri/tasks/support/RouteParameters", "esri/tasks/support/FeatureSet", "esri/geometry/Point", "esri/geometry/support/webMercatorUtils", "esri/geometry/SpatialReference" ], { css: true }).then(([Graphic, RouteTask, RouteParameters, FeatureSet, Point, webMercatorUtils, SpatialReference]) => { let routeTask = new RouteTask({ url: "http://127.0.0.1:8888/arcgis/rest/services/jm/road/NAServer/Route"/离线路径分析服务 }); let routeParams = new RouteParameters({ stops: new FeatureSet(), outSpatialReference: { wkid: 3857 } }); _screenSpaceEventHandler=new Cesium.ScreenSpaceEventHandler(map.viewer.scene.canvas); _screenSpaceEventHandler.setInputAction(addStop, Cesium.ScreenSpaceEventType.LEFT_DOWN); function addStop(event) { let cartesian3 = map.viewer.scene.pickPosition(event.position); let latlon = cartesian3ToVertice(cartesian3); let xy = webMercatorUtils.lngLatToXY(latlon.longitude, latlon.latitude); let point = new Point(xy[0], xy[1], new SpatialReference({ wkid: 3857 })); var stop = new Graphic({ geometry: point }); routeParams.stops.features.push(stop); let imgUrl = ""; if (routeParams.stops.features.length == 1) { imgUrl = "../../../static/svg/startSite.svg"; }else if (routeParams.stops.features.length == 2) { imgUrl = "../../../static/svg/endSite.svg"; } _routeAnalysisResouce.entities.add({ position: new Cesium.Cartesian3.fromDegrees(latlon.longitude, latlon.latitude,5), billboard: { image: imgUrl, scale: 0.2 } }); if (routeParams.stops.features.length >= 2) { routeTask.solve(routeParams).then(showRoute, () => { routeParams.stops.features = []; }); } } function showRoute(data) { routeParams.stops.features = []; let route = data.routeResults[0].route; let linePoints = route.geometry.paths[0]; let ps = xyToLngLats(linePoints); console.log("ps", ps); _routeAnalysisResouce.entities.add({ polyline: { positions: ps, width: 5.0, material: new Cesium.Color(0, 1, 1), clampToGround:true } }); } function xyToLngLats(points) { let returns = []; points.map(p => { let lnglat = webMercatorUtils.xyToLngLat(p[0], p[1]); returns.push(Cesium.Cartesian3.fromDegrees(lnglat[0], lnglat[1], 0)); }); return returns; } }); } /** * 关闭路径分析 */ closeRouteAnalysis() { _routeAnalysisResouce.entities.removeAll(); _screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOWN); }
- 离线访问可以通过在网络不可用时使用本地 REST 终端进行。确保您的网络分析服务已配置为允许离线访问,并相应地操作。