根据给定的参数进行选址分区分析。

命名空间:  SuperMap.Analyst.NetworkAnalyst
程序集:  SuperMap.Analyst.NetworkAnalyst (in SuperMap.Analyst.NetworkAnalyst)
版本: dll

语法

C#
public LocationAnalystResult FindLocation(
	LocationAnalystParameter parameter
)

参数

parameter
Type: SuperMap.Analyst.NetworkAnalyst..::.LocationAnalystParameter
指定的选址分区分析参数对象。

返回值

选址分区分析结果对象。

备注

选址分区分析是为了确定一个或多个待建设施的最佳位置,使得设施可以用一种最经济有效的方式为需求方提供服务或者商品。选址分区不仅仅是一个选址过程,还要将需求点的需求分配到相应的设施的服务区中,因此称之为选址与分区。

  • 资源供给中心与需求点
  • 资源供给中心:即中心点,是提供资源和服务的设施,对应于网络结点,资源供给中心的相关信息包括最大阻力值、资源供给中心类型,资源供给中心在网络中所处结点的 ID 等。

    需求点:通常是指需要资源供给中心提供的服务和资源的位置,也对应于网络结点。

    最大阻力值用来限制需求点到资源供给中心的花费。如果需求点到此资源供给中心的花费大于最大阻力值,则该需求点被过滤掉,即该资源供给中心不能服务到此需求点。

    资源供给中心分为三种:非中心点,固定中心点和可选中心点。固定中心点是指网络中已经存在的、已建成或已确定要建立的服务设施(扮演资源供给角色);可选中心点是指可以建立服务设施的资源供给中心,即待建服务设施将从这些可选中心点中选址;非中心点在分析时不予考虑,在实际中可能是不允许建立这项设施或者已经存在了其他设施。

    另外,分析过程中使用的需求点都为网络结点,即除了各种类型的中心点所对应的网络结点,所有网络结点都作为资源需求点参与选址分区分析,如果要排除某部分结点,可以将其设置为障碍点。

  • 是否从资源供给中心分配资源
  • 选址分区可以选择从资源供给中心开始分配资源,或不从资源供给中心分配:

    • 从中心点开始分配(供给到需求)的例子:
    • 电能是从电站产生,并通过电网传送到客户那里去的。在这里,电站就是网络模型中的中心,因为它可以提供电力供应。电能的客户沿电网的线路(网络模型中的弧段)分布,他们产生了“需求”。在这种情况下,资源是通过网络由供方传输到需要来实现资源分配的。

    • 不从中心点开始分配(需求到供给)的例子:
    • 学校与学生的关系也构成一种在网络中供需分配关系。学校是资源提供方,它负责提供名额供适龄儿童入学。适龄儿童是资源的需求方,他们要求入学。作为需求方的适龄儿童沿街道网络分布,他们产生了对作为供给方的学校的资源--学生名额的需求。

  • 应用实例
  • 某个区域目前有 3 所小学,根据需求,拟在该区域内再建立 3 所小学。选择了 9 个地点作为待选地点,将在这些待选点中选择 3 个最佳地点建立新的小学。如图 1 所示,已有的 3 所小学为固定中心点,7 个候选位置为可选中心点。新建小学要满足的条件为:居民点中的居民步行去学校的时间要在 30 分钟以内。选址分区分析会根据这一条件给出最佳的选址位置,并且圈出每个学校,包括已有的 3 所学校的服务区域。如图 2 所示,最终序号为 5、6、8 的可选中心点被选为建立新学校的最佳地点。

    备注:下面两幅中的网络数据集的所有网络结点被看做是该区域的居民点全部参与选址分区分析,居民点中的居民数目即为该居民点所需服务的数量。

资源供给中心及其类型和最大阻力值,是否从资源供给中心分配,期望分析出的资源供给中心数目等,均在 TransportationAnalystParameter 类型的参数 parameter 中指定,具体含义参见 TransportationAnalystParameter 类。

示例

以下代码示例了根据期待中心点数量,从中心点开始分配进行选址分区分析。

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

CopyC#
public void FindLocationExample(DatasetVector networkDataset)
{
    //构造交通网络分析环境设置对象,设置其属性
    TransportationAnalystSetting setting = new TransportationAnalystSetting();
    setting.NetworkDataset = networkDataset;
    setting.EdgeIDField = "SmID";
    setting.NodeIDField = "SmNodeID";
    setting.Tolerance = 89.00;

    //设置权重信息
    WeightFieldInfos weightFieldInfos = new WeightFieldInfos();
    WeightFieldInfo weightFieldInfo = new WeightFieldInfo();
    weightFieldInfo.FTWeightField = "SmLength";
    weightFieldInfo.TFWeightField = "SmLength";
    weightFieldInfo.Name = "Length";
    weightFieldInfos.Add(weightFieldInfo);
    setting.WeightFieldInfos = weightFieldInfos;
    setting.FNodeIDField = "SmFNode";
    setting.TNodeIDField = "SmTNode";

    //构造交通网络分析对象,加载环境设置对象
    TransportationAnalyst transportationAnalyst = new TransportationAnalyst();
    transportationAnalyst.AnalystSetting = setting;
    transportationAnalyst.Load();

    //构造交通网络分析参数,设置其属性
    LocationAnalystParameter parameter = new LocationAnalystParameter();

    //构造5个资源供给中心对象并设置其属性
    Int32[] id = { 3534, 1190, 1384, 4503, 5416 };
    for (Int32 i = 0; i < id.Length; i++)
    {
        SupplyCenter supplyCenter = new SupplyCenter();
        supplyCenter.ID = id[i];
        supplyCenter.MaxWeight = 7000;
        supplyCenter.Type = SupplyCenterType.FixedCenter;
        // 添加资源供给中心对象到集合
        parameter.SupplyCenters.Add(supplyCenter);
    }
    parameter.IsFromCenter = true;
    parameter.ExpectedSupplyCenterCount = 5;
    parameter.WeightName = weightFieldInfo.Name;

    //进行选址分析,返回选址分析结果
    LocationAnalystResult result = transportationAnalyst.FindLocation(parameter);

    //返回需求结果的相关信息
    DemandResult[] demandResult = result.DemandResults;
    Console.WriteLine(demandResult[1].ID.ToString());
    Console.WriteLine(demandResult[1].SupplyCenterID.ToString());
}

请参见