经过深思熟虑,地图框架采用arcgis api for js,后台为C#,数据库为SQL server
ArcGIS API for Javascript 是由美国 Esri 公司推出,跟随ArcGIS 9.3同时发布的,是Esri基于dojo框架和REST风格实现的一套编程接口(目前最新版本为3.3,dojo1.8)。通过ArcGIS API for Javascript可以对ArcGIS for Server进行访问,并且将ArcGIS for Server提供的地图资源和其它资源(ArcGIS Online)嵌入到Web应用中。
1.2 ArcGIS API for Javascript主要特点
1、空间数据展示:加载地图服务,影像服务,WMS等。
2、客户端 Mashup:将来自不同服务器、不同类型的服务在客户端聚合后统一呈现给客户。
3、图形绘制:在地图上交互式地绘制查询范围或地理标记等。
4、符号渲染:提供对图形进行符号化,要素图层生成专题图和服务器端渲染等功能。
5、查询检索:基于属性和空间位置进行查询,支持关联查询,对查询结果的排序、分组以及对属性数据的统计。
6、地理处理:调用 ArcGIS for Server 发布的地理处理服务(GP 服务),执行空间分析、地理处理或其他需要服务器端执行的工具、模型、运算等。
7、网络分析:计算最优路径、临近设施和服务区域。
8、在线编辑:通过要素服务编辑要素的图形、属性、附件,进行编辑追踪。
9、时态感知:展示、查询具有时间特征的地图服务或影像服务数据。 10、影像处理:提供动态镶嵌、实时栅格函数处理等功能。
11、地图输出:提供多种地图图片导出和服务器端打印等功能。
该系统涉及的功能为:登录,注册,图层切换,空间检索,路线分析,专题图生成,人员管理。
系统地址:http://124.221.114.164:8002/index.html
地图核心渲染代码如下:
var map, routeTask, routeParams, routes = [];
var stopSymbol, barrierSymbol, routeSymbols;
var mapOnClick_addStops_connect, mapOnClick_addBarriers_connect;
map = top.Freedom.Map.mapControl;
resultLayerDY = new ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/shandonggaosu/MapServer", {
});
//http://localhost:6080/arcgis/rest/services/shandonggaosu/NAServer/%E8%B7%AF%E5%BE%84
routeTask = new RouteTask("http://localhost:6080/arcgis/rest/services/shandonggaosu/NAServer/%E8%B7%AF%E5%BE%84");
routeParams = new RouteParameters();
routeParams.stops = new FeatureSet();
routeParams.barriers = new FeatureSet();
routeParams.outSpatialReference = { "wkid": 4326 };
routeTask.on("solve-complete", showRoute);
routeTask.on("error", errorHandler);
stopSymbol = new SimpleMarkerSymbol().setStyle(SimpleMarkerSymbol.STYLE_CROSS).setSize(15);
stopSymbol.outline.setWidth(3);
barrierSymbol = new SimpleMarkerSymbol().setStyle(SimpleMarkerSymbol.STYLE_X).setSize(10);
barrierSymbol.outline.setWidth(3).setColor(new Color([255, 0, 0]));
routeSymbols = {
"Route 1": new SimpleLineSymbol().setColor(new Color([0, 0, 255, 0.5])).setWidth(5),
"Route 2": new SimpleLineSymbol().setColor(new Color([0, 255, 0, 0.5])).setWidth(5),
"Route 3": new SimpleLineSymbol().setColor(new Color([255, 0, 255, 0.5])).setWidth(5)
};
//button click event listeners can't be added directly in HTML when the code is wrapped in an AMD callback
on(dom.byId("addStopsBtn"), "click", addStops);
on(dom.byId("clearStopsBtn"), "click", clearStops);
//on(dom.byId("addBarriersBtn"), "click", addBarriers);
//on(dom.byId("clearBarriersBtn"), "click", clearBarriers);
on(dom.byId("solveRoutesBtn"), "click", solveRoute);
on(dom.byId("clearRoutesBtn"), "click", clearRoutes);
求最短路径的算法有很多,比如说Floyd、Bellman-Ford、SPFA算法等,今天先介绍一下在最短路径问题中十分经典的Dijkstra(迪克斯特拉)算法。
迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止