com.supermap.analyst.spatialanalyst

类 DensityAnalyst



  • public class DensityAnalyst
    extends Object

    密度分析类,提供密度分析功能,可计算每个输出栅格像元周围圆形邻域内输入的点或线对象的密度。

    密度分析,在某种意义上来说,相当于在表面上将输入的点线对象的测量值散开来,将每个点或线对象的测量量分布在整个研究区域,并计算输出栅格中每个像元的密度值。

    • 方法详细资料

      • kernelDensity

        @Deprecated
        public static DatasetGrid kernelDensity(DensityAnalystParameter parameter,
                                                             DatasetVector sourceDataset,
                                                             String valueFieldName,
                                                             Datasource targetDatasource,
                                                             String targetDatasetName)
        已过时。 此方法已废弃,请使用支持进度监听的新方法 DensityAnalyst.kernelDensity(DensityAnalystParameter, DatasetVector, String, Datasource, String, SteppedListener...) 替换。
        对点数据集或线数据集进行核密度分析,并返回分析结果。
        参数:
        parameter - 指定核密度分析需要的参数信息。
        sourceDataset - 需要进行核密度分析的点数据集或线数据集。
        valueFieldName - 存储用于进行密度分析的测量值的字段名称。若传null则所有几何对象都按值为1处理。不支持文本类型的字段。
        targetDatasource - 用于存放结果数据集的数据源。
        targetDatasetName - 指定结果数据集的名称。
        返回:
        核密度分析得到的栅格数据集。
        示范代码:
        以下代码示范了根据给定的点数据集、用于密度分析的测量值字段和目标数据源进行核密度分析。
         public void kernelDensity(DatasetVector datasetPoint, String fieldName, Datasource targetDatasource)
         {
            //获得一个合法的名称作为结果数据集的的名称
            String resultDatasetName = targetDatasource.Datasets.getAvailableDatasetName("resultDatasetGrid");
        
            //设置密度分析参数
            DensityAnalystParameter densityParam = new DensityAnalystParameter();
            densityParam.setBounds(datasetPoints.getBounds());
            densityParam.setResolution(5);
            densityParam.setSearchRadius(30);
        
            //调用密度分析类的核密度分析方法实现对点数据集的核密度分析,并获得分析结果
            DatasetGrid resultKernelDensityGrid = DensityAnalyst.kernelDensity(densityParam, datasetPoints, fieldName, targetDatasource, resultDatasetName);
         }
         

        核密度分析,即使用核函数,来计算点或线邻域范围内的每单位面积量值。其结果是中间值大周边值小的光滑曲面,在邻域边界处降为0。

        SuperMap 使用的核函数为:

        其中r为查找半径, scale为栅格中心点到点线对象的距离与查找半径的比例。

        对于点对象,其核密度曲面与下方的平面所围成的空间的体积近似于此点的测量值。

        对于线对象,其核密度曲面与下方的平面所围成的空间的体积近似于此线的测量值与线长度的乘积。

        点或线的邻域叠加处,其密度值也相加。每个输出栅格的密度均为叠加在栅格上的所有核曲面值之和。

        结果栅格值的单位为原数据集单位的平方的倒数,即若原数据集单位为米,则结果栅格值的单位为每平方米。注意对于地理坐标数据集,结果栅格值的单位为“每平方度”,是没有实际意义的。

      • kernelDensity

        public static DatasetGrid kernelDensity(DensityAnalystParameter parameter,
                                                DatasetVector sourceDataset,
                                                String valueFieldName,
                                                Datasource targetDatasource,
                                                String targetDatasetName,
                                                SteppedListener... listeners)
        对点数据集或线数据集进行核密度分析,并返回分析结果。
        参数:
        parameter - 指定核密度分析需要的参数信息。
        sourceDataset - 需要进行核密度分析的点数据集或线数据集。
        valueFieldName - 存储用于进行密度分析的测量值的字段名称。若传null则所有几何对象都按值为1处理。不支持文本类型的字段。
        targetDatasource - 用于存放结果数据集的数据源。
        targetDatasetName - 指定结果数据集的名称。
        listeners - 用于接收进度条事件的监听器。
        返回:
        核密度分析得到的栅格数据集。
        示范代码:
        以下代码示范了根据给定的点数据集、用于密度分析的测量值字段和目标数据源进行核密度分析。
         public void kernelDensity(DatasetVector datasetPoint, String fieldName, Datasource targetDatasource)
         {
            //获得一个合法的名称作为结果数据集的的名称
            String resultDatasetName = targetDatasource.Datasets.getAvailableDatasetName("resultDatasetGrid");
        
            //设置密度分析参数
            DensityAnalystParameter densityParam = new DensityAnalystParameter();
            densityParam.setBounds(datasetPoints.getBounds());
            densityParam.setResolution(5);
            densityParam.setSearchRadius(30);
        
            //调用密度分析类的核密度分析方法实现对点数据集的核密度分析,并获得分析结果
            DatasetGrid resultKernelDensityGrid = DensityAnalyst.kernelDensity(densityParam, datasetPoints, fieldName, targetDatasource, resultDatasetName);
         }
         

        核密度分析,即使用核函数,来计算点或线邻域范围内的每单位面积量值。其结果是中间值大周边值小的光滑曲面,在邻域边界处降为0。

        SuperMap 使用的核函数为:

        其中r为查找半径, scale为栅格中心点到点线对象的距离与查找半径的比例。

        对于点对象,其核密度曲面与下方的平面所围成的空间的体积近似于此点的测量值。

        对于线对象,其核密度曲面与下方的平面所围成的空间的体积近似于此线的测量值与线长度的乘积。

        点或线的邻域叠加处,其密度值也相加。每个输出栅格的密度均为叠加在栅格上的所有核曲面值之和。

        结果栅格值的单位为原数据集单位的平方的倒数,即若原数据集单位为米,则结果栅格值的单位为每平方米。注意对于地理坐标数据集,结果栅格值的单位为“每平方度”,是没有实际意义的。

      • pointDensity

        @Deprecated
        public static DatasetGrid pointDensity(DensityAnalystParameter parameter,
                                                            DatasetVector sourceDataset,
                                                            String valueFieldName,
                                                            Datasource targetDatasource,
                                                            String targetDatasetName)
        已过时。 此方法已废弃,请使用支持进度监听的新方法 DensityAnalyst.pointDensity(DensityAnalystParameter, DatasetVector, String, Datasource, String, SteppedListener...) 替换。
        对点数据集进行点密度分析,并返回分析结果。
        参数:
        parameter - 指定点密度分析需要的参数信息。
        sourceDataset - 需要进行点密度分析的点数据集。
        valueFieldName - 存储用于进行密度分析的测量值的字段名称。若传null则所有点对象都按值为1处理。不支持文本类型的字段。
        targetDatasource - 用于存放结果数据集的数据源。
        targetDatasetName - 指定结果数据集的名称。
        返回:
        点密度分析得到的栅格数据集。
        示范代码:
        以下代码示范了根据给定的点数据集、用于密度分析的测量值字段和目标数据源进行点密度分析。
         public void pointDensity(DatasetVector datasetPoint, String fieldName, Datasource targetDatasource)
         {
            //获得一个合法的名称作为结果数据集的的名称
            String resultDatasetName = targetDatasource.Datasets.getAvailableDatasetName("resultDatasetGrid");
        
            //设置矩形邻域形状
            NeighbourShapeRectangle rectangle = new NeighbourShapeRectangle();
            rectangle.setHeight(5);
            rectangle.setWidth(10);
            rectangle.setUnitType(NeighbourUnitType.CELL);
        
            //设置密度分析参数
            DensityAnalystParameter densityParam = new DensityAnalystParameter();
            densityParam.setBounds(datasetPoints.getBounds());
            densityParam.setResolution(5);
            densityParam.setSearchNeighbourhood(rectangle);
        
            //调用密度分析类的点密度分析方法实现对点数据集的简单密度分析,并获得分析结果
            DatasetGrid resultPointDensityGrid = DensityAnalyst.pointDensity(densityParam, datasetPoints, fieldName, targetDatasource, resultDatasetName);
         }
         

        简单点密度分析,即计算每个点的指定邻域形状内的每单位面积量值。计算方法为指定测量值除以邻域面积。

        点的邻域叠加处,其密度值也相加。每个输出栅格的密度均为叠加在栅格上的所有邻域密度值之和。

        结果栅格值的单位为原数据集单位的平方的倒数,即若原数据集单位为米,则结果栅格值的单位为每平方米。注意对于地理坐标数据集,结果栅格值的单位为“每平方度”,是没有实际意义的。

      • pointDensity

        public static DatasetGrid pointDensity(DensityAnalystParameter parameter,
                                               DatasetVector sourceDataset,
                                               String valueFieldName,
                                               Datasource targetDatasource,
                                               String targetDatasetName,
                                               SteppedListener... listeners)
        对点数据集进行点密度分析,并返回分析结果。
        参数:
        parameter - 指定点密度分析需要的参数信息。
        sourceDataset - 需要进行点密度分析的点数据集。
        valueFieldName - 存储用于进行密度分析的测量值的字段名称。若传null则所有点对象都按值为1处理。不支持文本类型的字段。
        targetDatasource - 用于存放结果数据集的数据源。
        targetDatasetName - 指定结果数据集的名称。
        listeners - 用于接收进度条事件的监听器。
        返回:
        点密度分析得到的栅格数据集。
        示范代码:
        以下代码示范了根据给定的点数据集、用于密度分析的测量值字段和目标数据源进行点密度分析。
         public void pointDensity(DatasetVector datasetPoint, String fieldName, Datasource targetDatasource)
         {
            //获得一个合法的名称作为结果数据集的的名称
            String resultDatasetName = targetDatasource.Datasets.getAvailableDatasetName("resultDatasetGrid");
        
            //设置矩形邻域形状
            NeighbourShapeRectangle rectangle = new NeighbourShapeRectangle();
            rectangle.setHeight(5);
            rectangle.setWidth(10);
            rectangle.setUnitType(NeighbourUnitType.CELL);
        
            //设置密度分析参数
            DensityAnalystParameter densityParam = new DensityAnalystParameter();
            densityParam.setBounds(datasetPoints.getBounds());
            densityParam.setResolution(5);
            densityParam.setSearchNeighbourhood(rectangle);
        
            //调用密度分析类的点密度分析方法实现对点数据集的简单密度分析,并获得分析结果
            DatasetGrid resultPointDensityGrid = DensityAnalyst.pointDensity(densityParam, datasetPoints, fieldName, targetDatasource, resultDatasetName);
         }
         

        简单点密度分析,即计算每个点的指定邻域形状内的每单位面积量值。计算方法为指定测量值除以邻域面积。

        点的邻域叠加处,其密度值也相加。每个输出栅格的密度均为叠加在栅格上的所有邻域密度值之和。

        结果栅格值的单位为原数据集单位的平方的倒数,即若原数据集单位为米,则结果栅格值的单位为每平方米。注意对于地理坐标数据集,结果栅格值的单位为“每平方度”,是没有实际意义的。

      • addSteppedListener

        public static void addSteppedListener(SteppedListener l)
        添加一个用于接收进度条事件(SteppedEvent)的监听器。
        参数:
        l - 一个用于接收进度条事件的监听器。
      • removeSteppedListener

        public static void removeSteppedListener(SteppedListener l)
        移除一个进度条事件(SteppedEvent)的监听器。
        参数:
        l - 一个用于接收进度条事件的监听器。

Copyright © 2021–2024 SuperMap. All rights reserved.