根据给定的参数进行最近设施查找分析,事件点为坐标点。

命名空间:  SuperMap.Analyst.NetworkAnalyst
程序集:  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 对象有两种方式可以指定经过点:

  1. 使用该对象的 Nodes 属性,以网络数据集中结点 ID 数组的形式指定设施点,因此分析过程中使用到的设施点就是相应的网络结点;
  2. 使用该对象的 Points 属性,以坐标点串的形式指定设施点,因此分析过程中使用到的设施点就是相应的坐标点。
Note:

事件点和设施点必须为相同的类型,即都以坐标点形式指定,或都以结点 ID 形式指定。本方法要求设施点与事件点均为坐标点,即需要通过 TransportationAnalystParameter 对象的 Points 属性来设置设施点。

另外,最近设施查找实际上也是一种路径分析,因此,同样可以应用障碍边和障碍点的设置,在行驶路途上这些障碍将不能被穿越,在路径分析中会予以考虑。

通过 TransportationAnalystParameter 对象还可以指定最佳路径分析需要的其他信息,如权重信息,分析结果是否包含路由、行驶导引、途经弧段或结点等。具体内容请参见 TransportationAnalystParameter 类。

示例

以下代码示例了如何根据指定的参数进行最近设施查找分析。

下面函数中操作的网络数据集和点数据集分别为为安装目录\SampleData\changchun\下的 changchun.udb 数据源中的名为 RoadNet 的网络数据集和名为 Hospital 的点数据集。

CopyC#
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();
}

请参见