[导入]ArcGIS Server的最短路径开发系列(3)

本文版权归小能所有,转载麻烦标明出处,谢谢! 同时写作过程中也参阅了大量其他网络文档,如果您觉得侵犯版权,请和我联系:chinazhousheng@gmail.com

   

网络分析之最短路径查询系列:

ArcGIS Server的最短路径开发系列(1)

ArcGIS Server的最短路径开发系列(2)

ArcGIS Server的最短路径开发系列(2)补充

ArcGIS Server的最短路径开发系列(3)

    前几天在群里面有朋友问我最短路径的事,他想实现一个可能分别在地图上取点设置起点与终点的功能,再计算最短路径的功能。由于最近很多事情,所以一直没有做,昨天花了一点时间,做了一下,其实还是一个状态保存的问题,其思路如下:

step1 :点击地图上的起点,获取起点的坐标,将其转换并保存至session  中

step2:获取终点坐标,判断session中是否有值,如果有,则获取起点

step3:计算最短路径(这在前面已经说过,稍微改变一下),显示在地图上

step4:清除session

大体思路就是这样,当然还有其他的思路,希望大家实现后共享,这次的代码很简单,我简单的发一点!


//获取屏幕点,并转换成Map点
      ESRI.ArcGIS.ADF.Web.Geometry.Point pnt = new ESRI.ArcGIS.ADF.Web.Geometry.Point();
      ESRI.ArcGIS.ADF.Web.UI.WebControls.PointEventArgs ptargs 
= null;
      ptargs 
= (PointEventArgs)args;
      pnt 
= ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(ptargs.ScreenPoint.X, ptargs.ScreenPoint.Y, mapctrl.Extent, (int)mapctrl.Width.Value, (int)mapctrl.Height.Value);

 

if (System.Web.HttpContext.Current.Session["beg_point"]==null)
       
{
           System.Web.HttpContext.Current.Session[
"beg_point"= pnt;

}


 

else
       
{

try
          
{
              
// Get the NAServer

              
using (NAServerProxy naServer = NAServerProxy.Create(SERVER_NAME, ROUTE_SERVICE_NAME, null))
              
{

                  
if (naServer == null)
                      
throw (new System.Exception("Could not find the web service."));

                  
// Get the NAServerSolverParams
                  string[] naLayers = naServer.GetNALayerNames(esriNAServerLayerType.esriNAServerRouteLayer);

                  NAServerSolverParams solverParams 
= naServer.GetSolverParameters(naLayers[0]) as NAServerSolverParams;

                  
// Set the NAServerRouteParams
                  NAServerRouteParams routeParams = solverParams as NAServerRouteParams;
                  DateTime time;

                  routeParams.ReturnMap 
= false;
                  routeParams.ReturnRouteGeometries 
= true;
                  routeParams.ReturnStops 
= true;
                  routeParams.ReturnDirections 
= false;

                  
// Geocode two addresses and create the stop network locations
                  NetAnalysis location = new NetAnalysis(mapctrl);
                  
////
                  PropertySet[] propSets = new PropertySet[2];
                  propSets[
0= GeocodeAddress(beg_point.X, beg_point.Y);//
                  propSets[1= GeocodeAddress(pnt.X, pnt.Y);//

                  NAServerPropertySets StopsPropSets 
= new NAServerPropertySets();
                  StopsPropSets.PropertySets 
= propSets;

                  NAServerRouteParams routeParams1 
= solverParams as NAServerRouteParams;
                  routeParams1.Stops 
= StopsPropSets;
                  
/////
                  // Solve the Route
                  NAServerSolverResults solverResults;
                  solverResults 
= naServer.Solve(solverParams);

                  
// Display results
                  location.OutputResults(solverResults);

              }


          }

          
catch (Exception exception)
          
{
              
//pnlDirectionSummary.Visible = false;
              
//lblDirections.Visible = false;
              
//lblTotalDistance.Visible = false;
              
//dataGridDirections.Visible = false;
              lblError.Text = "An error has occurred Mesage = " + exception.Message;
          }

private PropertySetProperty CreatePropertySetProperty(string key, object value)
    
{
        PropertySetProperty propSetProperty 
= new PropertySetProperty();
        propSetProperty.Key 
= key;
        propSetProperty.Value 
= value;
        
return propSetProperty;
    }




    
private PropertySet GeocodeAddress(double streetAddress_x, double streetAddress_y)
    
{

        
//寻找地理位置
        PointN addr_point = new PointN() ;
        addr_point.X 
= streetAddress_x;
        addr_point.Y 
= streetAddress_y;
        
//新建propertyset及PropertySetProperty数组
        PropertySet propSet = new PropertySet();
        PropertySetProperty[] propSetProperty_new 
= new PropertySetProperty[2];
        propSet.PropertyArray 
= propSetProperty_new;
        
//设置propSet结构
        propSet.PropertyArray[0= CreatePropertySetProperty("Shape", addr_point) as PropertySetProperty;
        propSet.PropertyArray[
1= CreatePropertySetProperty("Name""44"as PropertySetProperty;
        
return propSet;
    }

当然,可以添加效果,比如点击起点后,在地图上画一个标志!下面是结果图

image64


posted @ 2008-11-20 16:43  GIS小能  阅读(2205)  评论(2)    收藏  举报