/// <summary>
 /// 拷贝构造函数。
 /// </summary>
 /// <param name="queryParam">查询参数对象。</param>
 /// <exception cref="ArgumentNullException">当查询参数对象为 Null 时抛出异常。</exception>
 public QueryParameter(QueryParameter queryParam)
 {
     if (queryParam == null) throw new ArgumentNullException();
     this.AttributeFilter = queryParam.AttributeFilter;
     if (queryParam.Fields != null)
     {
         int length = queryParam.Fields.Length;
         this.Fields = new string[length];
         for (int i = 0; i < length; i++)
         {
             this.Fields[i] = queryParam.Fields[i];
         }
     }
     this.GroupBy = queryParam.GroupBy;
     if (queryParam.Ids != null)
     {
         int length = queryParam.Ids.Length;
         this.Ids = new int[length];
         for (int i = 0; i < length; i++)
         {
             this.Ids[i] = queryParam.Ids[i];
         }
     }
     if (queryParam.JoinItems != null)
     {
         int length = queryParam.JoinItems.Length;
         this.JoinItems = new JoinItem[length];
         for (int i = 0; i < length; i++)
         {
             this.JoinItems[i] = new JoinItem(queryParam.JoinItems[i]);
         }
     }
     if (queryParam.LinkItems != null)
     {
         int length = queryParam.LinkItems.Length;
         this.LinkItems = new LinkItem[length];
         for (int i = 0; i < length; i++)
         {
             this.LinkItems[i] = new LinkItem(queryParam.LinkItems[i]);
         }
     }
     this.Name = queryParam.Name;
     this.OrderBy = queryParam.OrderBy;
 }
        public void Buffer_ByLineDatasetFlatBuffer()
        {
            string serviceUrl = string.Format("http://{0}:8090/iserver/services/spatialanalyst-changchun/restjsr", ip);
            SpatialAnalyst spatialAnalyst = new SpatialAnalyst(serviceUrl);

            BufferAnalystParameter bufferAnalystParameter = new BufferAnalystParameter();
            bufferAnalystParameter.EndType = BufferEndType.FLAT;
            bufferAnalystParameter.SemicircleLineSegment = 4;
            bufferAnalystParameter.LeftDistance = new BufferDistance() { Value = 105.2 };
            bufferAnalystParameter.RightDistance = new BufferDistance() { Value = 105.2 };

            QueryParameter filterQueryParameter = new QueryParameter();
            filterQueryParameter.AttributeFilter = "smid=5 or smid =1";

            BufferResultSetting bufferResultSetting = new BufferResultSetting();
            bufferResultSetting.DataReturnOption = new DataReturnOption()
            {
                Dataset = "resultLine",
                DataReturnMode = DataReturnMode.DATASET_AND_RECORDSET,
                DeleteExistResultDataset = true
            };
            bufferResultSetting.IsAttributeRetained = true;

            try
            {
                DatasetSpatialAnalystResult result = spatialAnalyst.Buffer("Edit_Line@Changchun", bufferAnalystParameter, filterQueryParameter, bufferResultSetting);
            }
            catch (ServiceException e)
            {
                Assert.IsTrue(true);
                Assert.IsTrue(e.Code == 400);
            }
        }
        public void Buffer_ByLineDatasetHasAttributerFilter()
        {
            string serviceUrl = string.Format("http://{0}:8090/iserver/services/spatialanalyst-changchun/restjsr", ip);
            SpatialAnalyst spatialAnalyst = new SpatialAnalyst(serviceUrl);

            BufferAnalystParameter bufferAnalystParameter = new BufferAnalystParameter();
            bufferAnalystParameter.EndType = BufferEndType.ROUND;
            bufferAnalystParameter.SemicircleLineSegment = 4;
            bufferAnalystParameter.LeftDistance = new BufferDistance() { Value = 105.2 };
            bufferAnalystParameter.RightDistance = new BufferDistance() { Value = 105.2 };

            QueryParameter filterQueryParameter = new QueryParameter();
            filterQueryParameter.AttributeFilter = "smid=5 or smid =1";

            BufferResultSetting bufferResultSetting = new BufferResultSetting();
            bufferResultSetting.DataReturnOption = new DataReturnOption()
            {
                Dataset = "resultLine",
                DataReturnMode = DataReturnMode.DATASET_AND_RECORDSET,
                DeleteExistResultDataset = true
            };
            bufferResultSetting.IsAttributeRetained = true;

            DatasetSpatialAnalystResult result = spatialAnalyst.Buffer("Edit_Line@Changchun", bufferAnalystParameter, filterQueryParameter, bufferResultSetting);

            Assert.IsNotNull(result);
            Assert.IsTrue(result.Succeed);
            Assert.IsTrue(result.Dataset == "resultLine@Changchun");
            Assert.IsTrue(result.Recordset != null);
            Assert.IsTrue(result.Recordset.Features != null);
            Assert.IsTrue(result.Recordset.Features.Length == 1);
        }
        public void IsoLine_PointDataset_ExtractParamtIsNull()
        {
            try
            {
                string pointDataset = "SamplesP@Interpolation";
                QueryParameter filterQueryParameter = new QueryParameter() { AttributeFilter = "SmID>0" };
                string zValueField = "AVG_WTR";
                double resolution = 3000;
                //ExtractParameter parameter = new ExtractParameter() { DatumValue = 0, Interval = 500, Smoothness = 3 };
                DataReturnOption resultSetting = new DataReturnOption();
                resultSetting.DataReturnMode = DataReturnMode.DATASET_AND_RECORDSET;
                resultSetting.DeleteExistResultDataset = true;
                resultSetting.Dataset = "isoLine@Interpolation";
                resultSetting.ExpectCount = 0;

                string serviceUrl = string.Format("http://{0}:8090/iserver/services/spatialanalyst-sample/restjsr", ip);
                SpatialAnalyst spatialAnalyst = new SpatialAnalyst(serviceUrl);
                DatasetSpatialAnalystResult actualResult = spatialAnalyst.IsoLine(pointDataset, filterQueryParameter, zValueField, resolution, null, resultSetting);
                Assert.IsNull(actualResult);
            }
            catch (Exception e)
            {
                Assert.AreEqual("参数不能为空。\r\n参数名: parameter", e.Message);
            }
        }
        public void IsoLine_PointDataset()
        {
            string pointDataset = "SamplesP@Interpolation";
            QueryParameter filterQueryParameter = new QueryParameter() { AttributeFilter = "SmID>0" };
            string zValueField = "AVG_WTR";
            double resolution = 3000;
            ExtractParameter parameter = new ExtractParameter() { DatumValue = 0, Interval = 500, Smoothness = 3 };
            DataReturnOption resultSetting = new DataReturnOption();
            resultSetting.DataReturnMode = DataReturnMode.DATASET_AND_RECORDSET;
            resultSetting.DeleteExistResultDataset = true;
            resultSetting.Dataset = "isoLine@Interpolation";
            resultSetting.ExpectCount = 0;

            string serviceUrl = string.Format("http://{0}:8090/iserver/services/spatialanalyst-sample/restjsr", ip);
            SpatialAnalyst spatialAnalyst = new SpatialAnalyst(serviceUrl);
            DatasetSpatialAnalystResult actualResult = spatialAnalyst.IsoLine(pointDataset, filterQueryParameter, zValueField, resolution, parameter, resultSetting);
            Assert.IsTrue(actualResult.Succeed);
            Assert.AreEqual(45, actualResult.Recordset.Features.Length);
            Assert.AreEqual(10, actualResult.Recordset.Fields.Length);
            Assert.AreEqual("DZVALUE", actualResult.Recordset.Features[6].FieldNames[9]);
            Assert.AreEqual("1000.0", actualResult.Recordset.Features[6].FieldValues[9]);
            Assert.AreEqual(resultSetting.Dataset, actualResult.Dataset);
        }
 /// <summary>
 /// 用于从点数据集中提取等值线,该方法的实现原理是先对点数据集进行插值分析, 得到栅格数据集(方法实现的中间结果),接着从栅格数据集中提取等值线。
 /// </summary>
 /// <param name="pointDataset">进行分析的点数据集标识(datasetName@datasourceName)。</param>
 /// <param name="filterQueryParameter">对点数据集中的点对象进行过滤的 属性过滤条件。只有满足过滤条件的点才参与分析。</param>
 /// <param name="zValueField">高程字段名。</param>
 /// <param name="resolution">中间结果(栅格数据集)的分辨率。</param>
 /// <param name="parameter">提取等值线的参数,必设参数。设置光滑度、重采样距离等,请参见 <see cref="ExtractParameter"/> 类。</param>
 /// <param name="resultSetting">返回值设置参数,设置是否返回记录、是否创建结果数据集等。</param>
 /// <returns>根据返回值设置参数返回相应的信息。</returns>
 /// <exception cref="ArgumentNullException">参数 pointDataset,parameter 为空时抛出异常。</exception>
 /// <exception cref="SuperMap.Connector.Utility.ServiceException">服务端处理错误时抛出异常。</exception>
 /// 以下示范代码演示如何对一个点数据集进行提取等值线操作。 
 /// <example>
 /// <code>
 /// class Program
 /// {
 ///     static void Main(string[] args)
 ///     {
 ///         //根据服务组件地址初始化一个SpatialAnalyst对象
 ///         SpatialAnalyst spatialAnalyst = new SpatialAnalyst("http://*****:*****@Interpolation";   //进行分析的点数据集标识
 ///         string zValueField = "AVG_WTR";  //高程字段名
 ///         double resolution = 3000;   //中间结果(栅格数据集)的分辨率
 ///         
 ///         //对点数据集中的点对象进行过滤的过滤条件
 ///         QueryParameter filterQueryParameter = new QueryParameter()
 ///         {
 ///             AttributeFilter = "SmID>0"
 ///          };
 ///          
 ///          //等值线的提取参数设置类
 ///          ExtractParameter parameter = new ExtractParameter()
 ///          {
 ///             DatumValue = 0,
 ///             Interval = 500,
 ///             Smoothness = 3
 ///           };
 ///           
 ///           //返回值设置参数
 ///           DataReturnOption resultSetting = new DataReturnOption()
 ///           {
 ///             DataReturnMode = DataReturnMode.DATASET_AND_RECORDSET,
 ///             DeleteExistResultDataset = true,
 ///             Dataset = "isoLine@Interpolation"
 ///           };
 ///            
 ///            //执行提取等值线操作
 ///            DatasetSpatialAnalystResult actualResult = spatialAnalyst.IsoLine(pointDataset, filterQueryParameter, zValueField, resolution, parameter, resultSetting);
 ///            Console.WriteLine("提取的等值线个数为:{0}", actualResult.Recordset.Features.Length);
 ///            Console.ReadLine();
 ///       }
 /// }
 /// </code>
 /// </example>
 public DatasetSpatialAnalystResult IsoLine(string pointDataset, QueryParameter filterQueryParameter, string zValueField, double resolution, ExtractParameter parameter, DataReturnOption resultSetting)
 {
     if (string.IsNullOrEmpty(pointDataset))
     {
         throw new ArgumentNullException("pointDataset", Resources.ArgumentIsNotNull);
     }
     if (parameter == null)
     {
         throw new ArgumentNullException("parameter", Resources.ArgumentIsNotNull);
     }
     return _spatialAnalystProvier.IsoLine(pointDataset, filterQueryParameter, zValueField, resolution, parameter, resultSetting);
 }
        /// <summary>
        /// 根据指定的过滤条件以及返回结果设置使用指定的区域对数据集进行叠加分析操作。
        /// </summary>
        /// <param name="sourceDataset">源数据集名,也即被操作数据集名,例如:region1@changchun。</param>
        /// <param name="sourceDatasetFilter">源数据集中空间对象过滤条件。设置完过滤条件后,源数据集中仅有满足条件的对象才参与叠加分析。</param>
        /// <param name="operateRegions">操作区域。</param>
        /// <param name="operation">叠加分析类型,叠加操作有:裁剪(CLIP)、擦除(ERASE)、合并(UNION)、相交(INTERSECT)、同一(IDENTITY)、对称差(XOR)和更新(UPDATE)。</param>
        /// <param name="datasetOverlayResultSetting">数据集叠加分析结果设置。</param>
        /// <returns>矢量数据集叠加分析结果。</returns>
        /// <exception cref="ArgumentNullException">参数 sourceDataset, operateRegions 为空时抛出异常。</exception>
        /// <exception cref="SuperMap.Connector.Utility.ServiceException">服务端处理错误时抛出异常。</exception>
        /// <example>
        /// 以下示范代码演示如何使用一个面对象和数据集进行叠加分析操作。
        /// <code>
        /// using System;
        /// using System.Collections.Generic;
        /// using System.Text;
        /// using SuperMap.Connector;
        /// using SuperMap.Connector.Utility;
        /// 
        /// class Program
        /// {
        ///     static void Main(string[] args)
        ///     {
        ///         //根据服务组件地址初始化一个SpatialAnalyst对象。
        ///          SpatialAnalyst spatialAnalyst = new SpatialAnalyst("http://*****:*****@Changchun";  //源数据集名称。
        ///         string returnDatasetName = "result";        //结果数据集名称。
        /// 
        ///         //初始化一个操作区域。
        ///          Point2D leftBottom = new Point2D(3577.31919947043, -5449.94178803891);
        ///         Point2D rightBottom = new Point2D(7546.48057648152, -5449.94178803891);
        ///         Point2D rightTop = new Point2D(7546.48057648152, -3822.87747356561);
        ///         Point2D leftTop = new Point2D(3577.31919947043, -3822.87747356561);
        ///         Geometry region = new Geometry()
        ///         {
        ///             Type = GeometryType.RECTANGLE,
        ///             Parts = new int[] { 4 },
        ///             Points = new Point2D[] { leftBottom, rightBottom, rightTop, leftTop }
        ///         };
        ///         Geometry[] operateRegions = new Geometry[] { region };
        /// 
        ///         //叠加分析返回结果设置。
        ///          DatasetOverlayResultSetting resultSetting = new DatasetOverlayResultSetting()
        ///         {
        ///             DataReturnOption = new DataReturnOption()
        ///             {
        ///                 Dataset = returnDatasetName,
        ///                 DeleteExistResultDataset = true,
        ///                 DataReturnMode = DataReturnMode.DATASET_AND_RECORDSET
        ///             },
        ///             Tolerance = 5,
        ///             SourceDatasetFields = new string[] { "NAME" }  //设置源数据集中保留字段列表。
        ///         };
        /// 
        ///         //源数据集过滤对象。
        ///          QueryParameter sourceDatasetFilter = new QueryParameter()
        ///         {
        ///             AttributeFilter = "smid &gt; 100 and smid &lt; 200"
        ///         };
        /// 
        ///         //执行叠加分析操作。
        ///          DatasetSpatialAnalystResult result = spatialAnalyst.Overlay(sourceDataset, sourceDatasetFilter, operateRegions, OverlayOperationType.INTERSECT, resultSetting);
        /// 
        ///         Console.ReadLine();
        ///     }
        /// }
        /// </code>
        /// </example>
        public DatasetSpatialAnalystResult Overlay(string sourceDataset, QueryParameter sourceDatasetFilter, Geometry[] operateRegions, OverlayOperationType operation, DatasetOverlayResultSetting datasetOverlayResultSetting)
        {
#if NET40
            if (string.IsNullOrWhiteSpace(sourceDataset))
            {
                throw new ArgumentNullException("sourceDataset", Resources.ArgumentIsNotNull);
            }
#else
            if (string.IsNullOrEmpty(sourceDataset))
            {
                throw new ArgumentNullException("sourceDataset", Resources.ArgumentIsNotNull);
            }
#endif
            if (operateRegions == null)
            {
                throw new ArgumentNullException("operateRegions", Resources.ArgumentIsNotNull);
            }
            return _spatialAnalystProvier.Overlay(sourceDataset, sourceDatasetFilter, operateRegions, operation, datasetOverlayResultSetting);
        }
Example #8
0
 /// <summary>
 /// 通过 SQL 查询条件获取要素。
 /// </summary>
 /// <param name="datasetNames">
 /// <para>数据集名称数组(datasourceName:datasetName),必选参数。 </para>
 /// <para>数据集名称由数据源名和数据集名构成,例如 World 数据源下的 Ocean 数据集,这里的数据集名称就是“World:Ocean”。</para>
 /// </param>
 /// <param name="maxFeatures">最多可返回的要素数量。</param>
 /// <param name="queryParam">查询参数。</param>
 /// <returns>要素集合。</returns>
 /// <exception cref="ArgumentNullException">参数 datasetNames 为空时抛出异常。</exception>
 /// <exception cref="SuperMap.Connector.Utility.ServiceException">服务端处理错误时抛出异常。</exception>
 /// <example>
 /// 请参见:<see cref="GetFeature(string[], SuperMap.Connector.Utility.QueryParameter)"/>
 /// </example>
 public List<Feature> GetFeature(string[] datasetNames, QueryParameter queryParam, int maxFeatures)
 {
     return _dataProvider.GetFeature(datasetNames, queryParam, maxFeatures);
 }
 public DatasetSpatialAnalystResult Buffer(string datasetName, BufferAnalystParameter bufferAnalystParameter, QueryParameter filterQueryParameter, BufferResultSetting bufferResultSetting)
 {
     string baseUrl = string.Format("{0}/spatialanalyst/datasets/{1}/buffer.json?returnContent=true", this._serviceUrl,
         HttpUtility.UrlEncode(datasetName));
     DatasetBufferRequestParameter parameter = new DatasetBufferRequestParameter(bufferAnalystParameter, filterQueryParameter, bufferResultSetting);
     string strBufferResult = SynchHttpRequest.GetRequestString(baseUrl, HttpRequestMethod.POST, JsonConvert.SerializeObject(parameter));
     return JsonConvert.DeserializeObject<DatasetSpatialAnalystResult>(strBufferResult);
 }
 public DatasetSpatialAnalystResult IsoLineInternal(string DatasetName, QueryParameter filterQueryParameter, string zValueField, double? resolution, ExtractParameter parameter, DataReturnOption resultSetting)
 {
     string baseUrl = string.Format("{0}/spatialanalyst/datasets/{1}/isoline.json?returnContent=true", this._serviceUrl, DatasetName);
     ExtractRequestParameter isoLineParameter = new ExtractRequestParameter(filterQueryParameter, zValueField, resolution, parameter, resultSetting);
     string strIsoLineResult = SynchHttpRequest.GetRequestString(baseUrl, HttpRequestMethod.POST, JsonConvert.SerializeObject(isoLineParameter));
     return JsonConvert.DeserializeObject<DatasetSpatialAnalystResult>(strIsoLineResult);
 }
 public DatasetSpatialAnalystResult IsoLine(string pointDataset, QueryParameter filterQueryParameter, string zValueField, double resolution, ExtractParameter parameter, DataReturnOption resultSetting)
 {
     return IsoLineInternal(pointDataset, filterQueryParameter, zValueField, resolution, parameter, resultSetting);
 }
        public DatasetSpatialAnalystResult Overlay(string sourceDataset, QueryParameter sourceDatasetFilter, Geometry[] operateRegions, OverlayOperationType operation, DatasetOverlayResultSetting datasetOverlayResultSetting)
        {
            string baseUrl = string.Format("{0}/spatialanalyst/datasets/{1}/overlay.json?returnContent=true", this._serviceUrl, HttpUtility.UrlEncode(sourceDataset));
            DatasetOverlayRequestParameter parameter = new DatasetOverlayRequestParameter(sourceDatasetFilter, null, null, operation, operateRegions, datasetOverlayResultSetting);
            string strOverlayResul = SynchHttpRequest.GetRequestString(baseUrl, HttpRequestMethod.POST, JsonConvert.SerializeObject(parameter));

            return JsonConvert.DeserializeObject<DatasetSpatialAnalystResult>(strOverlayResul);
        }
        /// <summary>
        /// 通过 SQL 查询条件获取要素。
        /// </summary>
        /// <param name="datasetNames">
        /// <para>数据集名称数组(datasourceName:datasetName),必选参数。 </para>
        /// <para>数据集名称由数据源名和数据集名构成,例如 World 数据源下的 Ocean 数据集,这里的数据集名称就是“World:Ocean”。</para>
        /// </param>
        /// <param name="maxFeatures">最多可返回的要素数量。</param>
        /// <param name="queryParam">查询参数。</param>
        /// <returns>要素集合。</returns>
        public List<Feature> GetFeature(string[] datasetNames, QueryParameter queryParam, int maxFeatures)
        {
            if (datasetNames == null || datasetNames.Length <= 0 || string.IsNullOrEmpty(datasetNames[0]))
            {
                throw new ArgumentNullException("datasetNames", Resources.ArgumentIsNotNull);
            }
            if (queryParam == null)
            {
                queryParam = new QueryParameter();
            }
            GetFeatureResource featureResource = new GetFeatureResource();

            featureResource.DatasetNames = datasetNames;
            featureResource.QueryParameter = queryParam;

            featureResource.GetFeatureMode = GetFeatureMode.SQL;

            return GetFeatureInternal(featureResource, maxFeatures);
        }
        ////根据Point2D计算最小外接矩形
        //private Rectangle2D CalcBounds(Point2D[] point2Ds)
        //{
        //    if (point2Ds == null)
        //    {
        //        throw new InvalidOperationException("The \"Points\" field is null, can't calculate bounds.");
        //    }
        //    Rectangle2D bounds = new Rectangle2D();
        //    int maxX, minX, maxY, minY;
        //    maxX = minX = maxY = minY = 0;

        //    for (int i = 1; i < point2Ds.Length; i++)	//从第二个点开始遍历比较。
        //    {
        //        if (point2Ds[i] == null)
        //        {
        //            continue;
        //        }

        //        if (point2Ds[i].X < point2Ds[minX].X)
        //        {
        //            minX = i;
        //        }
        //        else if (point2Ds[i].X > point2Ds[maxX].X)
        //        {
        //            maxX = i;
        //        }

        //        if (point2Ds[i].Y < point2Ds[minY].Y)
        //        {
        //            minY = i;
        //        }
        //        else if (point2Ds[i].Y > point2Ds[maxY].Y)
        //        {
        //            maxY = i;
        //        }
        //    }

        //    bounds.LeftBottom.X = point2Ds[minX].X;
        //    bounds.LeftBottom.Y = point2Ds[minY].Y;
        //    bounds.RightTop.X = point2Ds[maxX].X;
        //    bounds.RightTop.Y = point2Ds[maxY].Y;
        //    return bounds;
        //}

        /// <summary>
        /// 通过 SQL 查询条件获取要素。
        /// </summary>
        /// <param name="datasetNames">
        /// <para>数据集名称数组(datasourceName:datasetName),必选参数。 </para>
        /// <para>数据集名称由数据源名和数据集名构成,例如 World 数据源下的 Ocean 数据集,这里的数据集名称就是“World:Ocean”。</para>
        /// </param>
        /// <param name="queryParam">查询参数。</param>
        /// <returns>要素集合。</returns>
        public List<Feature> GetFeature(string[] datasetNames, QueryParameter queryParam)
        {
            return GetFeature(datasetNames, queryParam, 0);
        }
        public void DatasetOverlay_IntersectOperateDatasetHasFilter()
        {
            string serviceUrl = string.Format("http://{0}:8090/iserver/services/spatialanalyst-overlay/restjsr", ip);
            SpatialAnalyst spatialAnalyst = new SpatialAnalyst(serviceUrl);
            string sourceDataset = "Lake_R@overlay";
            string operateDataset = "Provices_Part@overlay";
            string returnDatasetName = "polygonOverlay";

            DatasetOverlayResultSetting resultSetting = new DatasetOverlayResultSetting()
            {
                DataReturnOption = new DataReturnOption()
                {
                    Dataset = returnDatasetName,
                    DeleteExistResultDataset = true,
                    DataReturnMode = DataReturnMode.DATASET_AND_RECORDSET
                },
                Tolerance = 5,
            };

            QueryParameter sourceDatasetFilter = new QueryParameter()
            {
                AttributeFilter = "smid=79",
            };

            QueryParameter operateDatasetFilter = new QueryParameter()
            {
                AttributeFilter = "smid=1",
            };

            DatasetSpatialAnalystResult result = spatialAnalyst.Overlay(sourceDataset, sourceDatasetFilter, operateDataset, operateDatasetFilter, OverlayOperationType.INTERSECT, resultSetting);
            Assert.IsNotNull(result);
            Assert.IsTrue(result.Recordset.Features.Length == 0);
        }
        public void DatasetAndGeometryOverlay_IntersectHasSourceFilter()
        {
            string serviceUrl = string.Format("http://{0}:8090/iserver/services/spatialanalyst-overlay/restjsr", ip);
            SpatialAnalyst spatialAnalyst = new SpatialAnalyst(serviceUrl);
            string sourceDataset = "Sdzzd_P@overlay";
            string returnDatasetName = "PointAndCustomRegionOverlay";

            Point2D point1 = new Point2D(-119275.149508913, 2797273.49481734);
            Point2D point2 = new Point2D(2205422.68158318, 2797273.49481734);
            Point2D point3 = new Point2D(2205422.68158318, 3750228.67190104);
            Point2D point4 = new Point2D(-119275.149508913, 3750228.67190104);
            Geometry region = new Geometry()
            {
                Type = GeometryType.RECTANGLE,
                Parts = new int[] { 4 },
                Points = new Point2D[] { point1, point2, point3, point4 }
            };

            DatasetOverlayResultSetting resultSetting = new DatasetOverlayResultSetting()
            {
                DataReturnOption = new DataReturnOption()
                {
                    Dataset = returnDatasetName,
                    DeleteExistResultDataset = true,
                    DataReturnMode = DataReturnMode.DATASET_AND_RECORDSET
                },
                Tolerance = 5,
            };

            QueryParameter sourceDatasetFilter = new QueryParameter()
            {
                Ids = new int[] { 159, 1272 },
            };

            Geometry[] operateRegions = new Geometry[] { region };
            DatasetSpatialAnalystResult result = spatialAnalyst.Overlay(sourceDataset, sourceDatasetFilter, operateRegions, OverlayOperationType.INTERSECT, resultSetting);
            Assert.IsNotNull(result);
            Assert.IsTrue(!string.IsNullOrWhiteSpace(result.Dataset));
            Assert.IsTrue(result.Recordset.Features[0].Geometry.Type == GeometryType.POINT);
        }
        /// <summary>
        /// 根据数据集创建缓冲区。
        /// </summary>
        /// <param name="datasetName">数据集标识。</param>
        /// <param name="filterQueryParameter">过滤参数,可选。设置了过滤参数后,只对数据集中满足此过滤条件的对象创建缓冲区。</param>
        /// <param name="bufferAnalystParameter">缓冲区分析参数,必设参数。指定缓冲距离、缓冲区端点类型等缓冲区分析需要的信息,请参见 <see cref="BufferAnalystParameter"/> 类。</param>
        /// <param name="bufferResultSetting">数据集缓冲区分析结果设置参数。</param>
        /// <returns>数据集缓冲区分析结果。</returns>
        /// <exception cref="ArgumentNullException">参数 datasetName 为空时抛出异常。</exception>
        /// <exception cref="SuperMap.Connector.Utility.ServiceException">服务端处理错误时抛出异常。</exception>
        /// <example>
        /// 以下示例代码演示如何根据数据集进行缓冲区分析。
        /// <code>
        /// using System;
        /// using System.Collections.Generic;
        /// using System.Text;
        /// using SuperMap.Connector;
        /// using SuperMap.Connector.Utility;
        ///
        /// class Program
        /// {
        ///     static void Main(string[] args)
        ///     {
        ///         //根据服务组件地址初始化一个SpatialAnalyst对象。
        ///          SpatialAnalyst spatialAnalyst = new SpatialAnalyst("http://*****:*****@Changchun";   //用来进行缓冲区分析的数据集,@符号前为数据集名称,@符号后为数据源名称。
        /// 
        ///         //执行缓冲区分析。
        ///          DatasetSpatialAnalystResult bufferResult = spatialAnalyst.Buffer(datasetName, bufferparameter, filterQueryParameter, bufferResultSetting);
        /// 
        ///         Console.WriteLine(string.Format("缓冲区分析结果数据集名称为:{0}", bufferResult.Dataset));
        ///         Console.ReadLine();
        ///     }
        /// }
        /// 
        /// //分析输出如下结果:
        /// //缓冲区分析结果数据集名称为:bufferResult@Changchun
        /// </code>
        /// </example>
        public DatasetSpatialAnalystResult Buffer(string datasetName, BufferAnalystParameter bufferAnalystParameter, QueryParameter filterQueryParameter, BufferResultSetting bufferResultSetting)
        {
#if NET40
            if (string.IsNullOrWhiteSpace(datasetName))
            {
                throw new ArgumentNullException("datasetName", Resources.ArgumentIsNotNull);
            }
#else
            if (string.IsNullOrEmpty(datasetName))
            {
                throw new ArgumentNullException("datasetName", Resources.ArgumentIsNotNull);
            }
#endif
            return _spatialAnalystProvier.Buffer(datasetName, bufferAnalystParameter, filterQueryParameter, bufferResultSetting);
        }