系统网络分析功能模块的实现.docx
《系统网络分析功能模块的实现.docx》由会员分享,可在线阅读,更多相关《系统网络分析功能模块的实现.docx(17页珍藏版)》请在冰豆网上搜索。
系统网络分析功能模块的实现
一.1系统网络分析功能模块的实现
一.1.1最优路径查询的实现
本模块是对最短路径的求解,给定的两个点之间找到一个最短路径,下拉框里列出了用于分析的街道名称,供用户来选择起点和终点.
下面是最优查询的主程序:
try
{//取得网络分析服务
using(NAServerProxynaServer=NAServerProxy.Create(SERVER_NAME,ROUTE_SERVICE_NAME,null))
{
if(naServer==null)
throw(newSystem.Exception("Couldnotfindthewebservice."));
//取得网络分析参数
string[]naLayers=naServer.GetNALayerNames(esriNAServerLayerType.esriNAServerRouteLayer);
NAServerSolverParamssolverParams=naServer.GetSolverParameters(naLayers[0])asNAServerSolverParams;
//设置网络分析路径参数
NAServerRouteParamsrouteParams=solverParamsasNAServerRouteParams;
……………
//对起点和终点地理编码LoadLocations(solverParams);//自定义函数
//解决问题
NAServerSolverResultssolverResults;
solverResults=naServer.Solve(solverParams);
//显示结果
OutputResults(solverResults);//自定义函数
}
}
一.1.2设置障碍点的实现
在GIS网络分析中,如何寻找避开障碍点而到达目的地最近或最快的道路.如下是核心代码:
privatevoidSolvebarriers()
{try
{//取得网络分析服务
using(NAServerProxynaServer=NAServerProxy.Create(SERVER_NAME,ROUTE_SERVICE_NAME,null))
{if(naServer==null)
throw(newSystem.Exception("Couldnotfindthewebservice."));
//取得网络分析参数
string[]naLayers=naServer.GetNALayerNames(esriNAServerLayerType.esriNAServerRouteLayer);NAServerSolverParamssolverParams=naServer.GetSolverParameters(naLayers[0])asNAServerSolverParams;
//设置网络分析路径参数
NAServerRouteParamsrouteParams=solverParamsasNAServerRouteParams;
……………
LoadLocationsbarriers(solverParams);//与最优路径最大的不同
//解决问题-查找路径
NAServerSolverResultssolverResults;
solverResults=naServer.Solve(solverParams);
//显示结果
OutputResults(solverResults);
}
}
请与最优路径的结果图对比,便可发现路线不同.
一.1.3通达性分析的实现
本系统的通达性分析是分析两个地点之间的通达,如果两点之间是通达的那么分析最短路径的时候会返回一系列的路径方向,这个方向是让用户明白怎样走,如果不能够通达,那么就不能返回,或者返回的为空,根据这一思路,设计程序如下:
privatevoidSolveArrive()
{try
{//取得网络分析服务
using(NAServerProxynaServer=NAServerProxy.Create(SERVER_NAME,ROUTE_SERVICE_NAME,null))
{if(naServer==null)
throw(newSystem.Exception("Couldnotfindthewebservice."));
//取得网络分析参数
string[]naLayers=naServer.GetNALayerNames(esriNAServerLayerType.esriNAServerRouteLayer);NAServerSolverParamssolverParams=naServer.GetSolverParameters(naLayers[0])asNAServerSolverParams;
//设置网络分析参数
NAServerRouteParamsrouteParams=solverParamsasNAServerRouteParams;
……………
LoadLocationsArrive(solverParams);
//查找路径
NAServerSolverResultssolverResults;
solverResults=naServer.Solve(solverParams);
NAServerRouteResultsRouteSolverResults=solverResultsasNAServerRouteResults;
//显示结果
if(RouteSolverResults.Directions!
=null)
{this.Label20.Text="分析结果:
能够成功到达";
}
else
{this.Label20.Text="分析结果:
不能到达";}
}
}
一.1.4资源配送的实现
资源分配问题,就是将数量一定的资源(如原材料、资金、机器设备、劳动力、食品等)恰当地分配给若干个使用者,使总的路径值最优
privatevoidSolveSource()
{try
{//取得网络分析服务
using(NAServerProxynaServer=NAServerProxy.Create(SERVER_NAME,ROUTE_SERVICE_NAME,null))
{if(naServer==null)
throw(newSystem.Exception("Couldnotfindthewebservice."));
//取得网络分析参数
string[]naLayers=naServer.GetNALayerNames(esriNAServerLayerType.esriNAServerRouteLayer);NAServerSolverParamssolverParams=naServer.GetSolverParameters(naLayers[0])asNAServerSolverParams;
//设置网络分析参数
NAServerRouteParamsrouteParams=solverParamsasNAServerRouteParams;
……………
//对起点和终点地理编码
LoadLocationsSource(solverParams);
//查找路径
NAServerSolverResultssolverResults;
solverResults=naServer.Solve(solverParams);
//显示结果
OutputSourceResults(solverResults);
}
}
一.1.5道路分析与建议
根据道路的统计数据分析各条道路的现状,以及给行人分析行走路线或者给政府部门进行各种整顿工作.
如下代码是显示道路数据的明细情况:
stringstrQuery="select*fromstreetculture";
DataSetds=newDataSet();
OleDbDataAdapteradapter=newOleDbDataAdapter();
adapter.SelectCommand=newOleDbCommand(strQuery,conn);
adapter.Fill(ds);
this.GridView3.DataSource=ds;
this.GridView3.DataBind();
如下代码是综合得分的代码:
………
while(reader.Read())
{score[i]=(int)100-(int)reader.GetValue
(1)*2-(int)reader.GetValue
(2)*3-(int)reader.GetValue(3);
name[i]=(string)reader.GetValue(0);
i++;
}
………
}
如下代码是给各个部门的建议:
………
stringstrQuery1="select*fromstreetculturewhere堵车次数>10";
OleDbCommandcmd=newOleDbCommand(strQuery1,conn);
OleDbDataReaderreader=cmd.ExecuteReader();
this.TextBox8.Text="以下地方请政府部门注意,希望能够加强道路分流";
while(reader.Read())
{this.TextBox8.Text+=(string)reader.GetValue(0)+",";}
………
reader.Close();
conn.Close();
一.2综合实例的实现
一.2.1道路通之一:
轿车助手
本实例是综合了最优路径查询与设置障碍点,障碍点可以用户自己设置,可以增加也可以删除.系统默认有四个障碍,列在表中,当用户设置完成后,只要点击确定就可以找到最优路径.其核心代码如下:
privatevoidSolveCAR()
{try
{//取得网络分析服务
using(NAServerProxynaServer=NAServerProxy.Create(SERVER_NAME,ROUTE_SERVICE_NAME,null))
{if(naServer==null)
throw(newSystem.Exception("Couldnotfindthewebservice."));
//取得网络分析参数
string[]naLayers=naServer.GetNALayerNames(esriNAServerLayerType.esriNAServerRouteLayer);NAServerSolverParamssolverParams=naServer.GetSolverParameters(naLayers[0])asNAServerSolverParams;
//设置网络分析参数
NAServerRouteParamsrouteParams=solverParamsasNAServerRouteParams;
……………
//对起点和终点地理编码
LoadLocationsCar(solverParams);
//查找路径
NAServerSolverResultssolverResults;
solverResults=naServer.Solve(solverParams);
//显示结果
OutputResults(solverResults);
}
}
一.2.2道路通之二:
货运助手
本实例是综合了资源配送与设置障碍点,只要用户选择资源点与需求点,同样障碍点可以用户自己设置,可以增加也可以删除.系统默认有四个障碍,列在表中,当用户设置完成后,只要点击确定就可以找到最优路径.其核心代码有:
privatevoidSolveDriverSource()
{try
{//取得网络分析服务
using(NAServerProxynaServer=NAServerProxy.Create(SERVER_NAME,ROUTE_SERVICE_NAME,null))
{
//设置网络分析参数
NAServerRouteParamsrouteParams=solverParamsasNAServerRouteParams;
……………
//对起点和终点地理编码
LoadLocationsDriverSource(solverParams);
//查找路径
NAServerSolverResultssolverResults;
solverResults=naServer.Solve(solverParams);
//显示结果
OutputSourceResults(solverResults);
}}
一.2.3应急响应之一:
急救先锋
本实例是实现查找最近设施,其主要应用就是应急响应,这个实例是服务病人或者医院,为了应急,各样应从简,更合实际.如下是核心代码:
protectedvoidButton39_Click(objectsender,EventArgse)
{
//取得网络分析服务
using(NAServerProxynaServer=NAServerProxy.Create(SERVER_NAME,ROUTE_SERVICE_NAME,null))
{//取得网络分析参数
NAServerSolverParamssolverParams=naServer.GetSolverParameters("ClosestFacility")asNAServerSolverParams;
//设置网络分析参数
NAServerClosestFacilityParamsclosestfacilityParams=solverParamsasNAServerClosestFacilityParams;
……………
//查找路径
LoadLocationsHospital(solverParams);
NAServerSolverResultssolverResults;
solverResults=naServer.Solve(solverParams);
//显示结果
OutputhospitalResults(solverResults);
}
}
一.2.4应急响应之二:
消防助手
本实例是实现查找最近设施,其主要应用就是应急响应,这个实例是服务消防部门,确定火灾的严重程度,再决定派遣的小分队数,再从小分队所在地出发,找到最为合适的路径,同时会给出详细的说明来引导消防部门
protectedvoidButton37_Click(objectsender,EventArgse)
{//取得网络分析服务
using(NAServerProxynaServer=NAServerProxy.Create(SERVER_NAME,ROUTE_SERVICE_NAME,null))
{//取得网络分析参数
NAServerSolverParamssolverParams=naServer.GetSolverParameters("ClosestFacility")asNAServerSolverParams;
NAServerClosestFacilityParamsclosestfacilityParams=solverParamsasNAServerClosestFacilityParams;
//设置分析参数
……………
//查找路径
LoadLocationsFiretry(solverParams);
NAServerSolverResultssolverResults;
solverResults=naServer.Solve(solverParams);
//显示结果
OutputFireResults(solverResults);
}
}
一.2.5服务区查询
本实例主要服务管理人员进行决策与消费者进行购物分析.创建服务区功能进行评估,当管理人员想再建一个沃尔玛超市,可以根据服务范围新建,这样能达到最好的资源配置.同时消费者也可以据服务范围到超市购物.
如下是核心代码:
protectedvoidButton41_Click(objectsender,EventArgse)
{//取得网络分析服务
using(NAServerProxynaServer=NAServerProxy.Create(SERVER_NAME,ROUTE_SERVICE_NAME,null))
{//设置网络分析参数
NAServerSolverParamssolverParams=naServer.GetSolverParameters("ServiceArea")asNAServerSolverParams;
NAServerServiceAreaParamssaParams=solverParamsasNAServerServiceAreaParams;
……………
//对起点和终点地理编码
LoadLocationsServiceArea(solverParams);
//查找路径
NAServerSolverResultssolverResults;
solverResults=naServer.Solve(solverParams);
//显示结果
OutputServerAreaResults(solverResults);
}
}