程序集: SuperMap.Analyst.NetworkAnalyst (in SuperMap.Analyst.NetworkAnalyst)
版本: dll
语法
C# |
---|
public TransportationAnalystResult FindClosestFacility( TransportationAnalystParameter parameter, Point2D eventPoint, int facilityCount, bool isFromEvent, double maxWeight ) |
参数
- parameter
- Type: SuperMap.Analyst.NetworkAnalyst..::.TransportationAnalystParameter
交通网络分析参数对象。
- eventPoint
- Type: SuperMap.Data..::.Point2D
事件点坐标。
- facilityCount
- Type: System..::.Int32
要查找的设施点数量。
- isFromEvent
- Type: System..::.Boolean
是否从事件点到设施点进行查找
- maxWeight
- Type: System..::.Double
查找半径。单位同网络分析环境中设置的阻力字段,如果要查找整个网络,该值设为0。
返回值
分析结果对象。备注
最近设施分析是指在网络上给定一个事件点和一组设施点,为事件点查找以最小耗费能到达的一个或几个设施点,结果为从事件点到设施点(或从设施点到事件点)的最佳路径。
设施点和事件点是最近设施查找分析的基本要素。设施点是提供服务的设施,如学校、超市、加油站等;事件点则是需要设施点的服务的事件位置。
例如,在某位置发生一起交通事故,要求查找在 10 分钟内最快到达的 3 家医院,超过 10 分钟能到达的都不予考虑。此例中,事故发生地即是一个事件点,周边的医院则是设施点。
事件点的指定方式有两种,一是通过坐标点来指定;二是以网络数据集中的结点 ID 指定,也就是将该网络结点看做事件点,本方法中事件点的指定是采用坐标点的方式。在另一重载方法 FindClosestFacility 中,事件点通过结点 ID 来指定。
设施点则是在 TransportationAnalystParameter 类型的参数 parameter 中指定的。通过 TransportationAnalystParameter 对象有两种方式可以指定经过点:
- 使用该对象的 Nodes 属性,以网络数据集中结点 ID 数组的形式指定设施点,因此分析过程中使用到的设施点就是相应的网络结点;
- 使用该对象的 Points 属性,以坐标点串的形式指定设施点,因此分析过程中使用到的设施点就是相应的坐标点。
事件点和设施点必须为相同的类型,即都以坐标点形式指定,或都以结点 ID 形式指定。本方法要求设施点与事件点均为坐标点,即需要通过 TransportationAnalystParameter 对象的 Points 属性来设置设施点。
另外,最近设施查找实际上也是一种路径分析,因此,同样可以应用障碍边和障碍点的设置,在行驶路途上这些障碍将不能被穿越,在路径分析中会予以考虑。
通过 TransportationAnalystParameter 对象还可以指定最佳路径分析需要的其他信息,如权重信息,分析结果是否包含路由、行驶导引、途经弧段或结点等。具体内容请参见 TransportationAnalystParameter 类。
示例
以下代码示例了如何根据指定的参数进行最近设施查找分析。
下面函数中操作的网络数据集和点数据集分别为为安装目录\SampleData\changchun\下的 changchun.udb 数据源中的名为 RoadNet 的网络数据集和名为 Hospital 的点数据集。
public void FindClosesetFacilityExample(DatasetVector networkDataset,DatasetVector pointDataset) { //创建交通网络分析参数对象并相应设置属性 TransportationAnalystSetting transportationAnalystSetting = new TransportationAnalystSetting(); transportationAnalystSetting.NetworkDataset = networkDataset; transportationAnalystSetting.NodeIDField = "SmNodeID"; transportationAnalystSetting.EdgeIDField = "SmID"; transportationAnalystSetting.Tolerance = 89.00; //设置权重信息 WeightFieldInfos weightInfos = new WeightFieldInfos(); WeightFieldInfo weightInfo = new WeightFieldInfo(); weightInfo.FTWeightField = "SmLength"; weightInfo.TFWeightField = "Smlength"; weightInfo.Name = "Name"; weightInfos.Add(weightInfo); transportationAnalystSetting.WeightFieldInfos = weightInfos; //创建交通网络分析对象并设置分析环境对象 TransportationAnalyst transportationAnalyst = new TransportationAnalyst(); transportationAnalyst.AnalystSetting = transportationAnalystSetting; //加载网络模型 transportationAnalyst.Load(); //从设施点数据集中直接得到记录集 Recordset recordset = pointDataset.GetRecordset(false, CursorType.Dynamic); //遍历设施点记录集中的每条记录,得到几何对象 //得到点几何对象的 X、Y 坐标构造点对象,并添加到点集合对象中 Point2Ds points = new Point2Ds(); for (Int32 i = 0; i < recordset.RecordCount; i++) { GeoPoint geoPoint = (GeoPoint)recordset.GetGeometry(); Point2D point = new Point2D(geoPoint.X, geoPoint.Y); points.Add(point); recordset.MoveNext(); } //构造交通网络分析参数对象,设置其属性 TransportationAnalystParameter parameter = new TransportationAnalystParameter(); parameter.Points = points; parameter.WeightName = weightInfo.Name; parameter.IsEdgesReturn = true; parameter.IsNodesReturn = true; parameter.IsRoutesReturn = true; //进行最近设施分析 Point2D eventPoint = new Point2D(3534, 3820); Int32 facilityCount = 3; Double maxWeight = 0; TransportationAnalystResult result = transportationAnalyst.FindClosestFacility(parameter, eventPoint, facilityCount, true, maxWeight); //释放资源 recordset.Dispose(); }