/// <summary> /// /// </summary> /// <param name="featureResource"></param> /// <param name="maxFeatures"></param> /// <returns></returns> private List<Feature> GetFeatureInternal(GetFeatureResource featureResource, int maxFeatures) { string maxFeaturesStr = ""; if (maxFeatures > 0) { maxFeaturesStr = string.Format("&fromIndex=0&toIndex={0}", maxFeatures - 1); } string uri = string.Format("{0}/data/featureResults.json?returnContent=true{1}", this._serviceUrl, maxFeaturesStr); string postData = JsonConvert.SerializeObject(featureResource); string requestResultJson = SynchHttpRequest.GetRequestString(uri, postData); FeaturesResourceResult featuresResult = JsonConvert.DeserializeObject<FeaturesResourceResult>(requestResultJson); return featuresResult.Features; }
/// <summary> /// 获取在指定空间范围内,并满足一定属性过滤条件的要素。 /// </summary> /// <param name="datasetNames">数据集名称数组(datasourceName:datasetName),如 World:Capitals,必选参数。</param> /// <param name="bounds">指定的查询范围。</param> /// <param name="attributeFilter">属性过滤条件。</param> /// <param name="fields">待返回的字段数组。当该参数为 null 时,返回全部字段。</param> /// <returns>要素集合。</returns> public List<Feature> GetFeature(string[] datasetNames, Rectangle2D bounds, string attributeFilter, string[] fields) { if (datasetNames == null || datasetNames.Length <= 0 || string.IsNullOrEmpty(datasetNames[0])) { throw new ArgumentNullException("datasetNames", Resources.ArgumentIsNotNull); } if (bounds == null) { throw new ArgumentNullException("bounds", Resources.ArgumentIsNotNull); } GetFeatureResource featureResource = new GetFeatureResource(); featureResource.DatasetNames = datasetNames; featureResource.Bounds = bounds; featureResource.AttributeFilter = attributeFilter; if (fields != null) { featureResource.QueryParameter = new QueryParameter(); featureResource.QueryParameter.Fields = fields; } //attributeFilter存在属性过滤条件的,使用 BOUNDS_ATTRIBUTEFILTER 方式 if (string.IsNullOrEmpty(attributeFilter)) { featureResource.GetFeatureMode = GetFeatureMode.BOUNDS; } else { featureResource.GetFeatureMode = GetFeatureMode.BOUNDS_ATTRIBUTEFILTER; } return GetFeatureInternal(featureResource, 0); }
/// <summary> /// 根据指定要素 ID 获取指定数据集中的要素。 /// </summary> /// <param name="datasetNames">数据集名称数组(datasourceName:datasetName),如 World:Capitals,必选参数。</param> /// <param name="ids">要素 ID。</param> /// <param name="fields">待返回的字段数组。当该参数为 null 时,返回全部字段。</param> /// <returns>要素集合。</returns> public List<Feature> GetFeature(string[] datasetNames, int[] ids, string[] fields) { if (datasetNames == null || datasetNames.Length <= 0 || string.IsNullOrEmpty(datasetNames[0])) { throw new ArgumentNullException("datasetNames", Resources.ArgumentIsNotNull); } if (ids == null || ids.Length <= 0) { throw new ArgumentNullException("ids", Resources.ArgumentIsNotNull); } GetFeatureResource featureResource = new GetFeatureResource(); featureResource.DatasetNames = datasetNames; featureResource.Ids = ids; if (fields != null) { featureResource.QueryParameter = new QueryParameter(); featureResource.QueryParameter.Fields = fields; } featureResource.GetFeatureMode = GetFeatureMode.ID; return GetFeatureInternal(featureResource, 0); }
/// <summary> /// 获取与指定几何对象具有特定空间查询模式的要素。 /// </summary> /// <param name="datasetNames">数据集名称数组(datasourceName:datasetName),如 World:Capitals,必选参数。</param> /// <param name="geometry">几何对象。</param> /// <param name="spatialQueryMode">空间查询模式。</param> /// <param name="attributeFilter">属性过滤条件。</param> /// <param name="fields">待返回的字段数组。当该参数为 null 时,返回全部字段。</param> /// <returns>要素集合。</returns> public List<Feature> GetFeature(string[] datasetNames, Geometry geometry, SpatialQueryMode spatialQueryMode, string attributeFilter, string[] fields) { if (datasetNames == null || datasetNames.Length <= 0 || string.IsNullOrEmpty(datasetNames[0])) { throw new ArgumentNullException("datasetNames", Resources.ArgumentIsNotNull); } if (geometry == null) { throw new ArgumentNullException("geometry", Resources.ArgumentIsNotNull); } GetFeatureResource featureResource = new GetFeatureResource(); featureResource.DatasetNames = datasetNames; featureResource.Geometry = geometry; featureResource.SpatialQueryMode = spatialQueryMode; featureResource.AttributeFilter = attributeFilter; if (fields != null) { featureResource.QueryParameter = new QueryParameter(); featureResource.QueryParameter.Fields = fields; } if (string.IsNullOrEmpty(attributeFilter)) { featureResource.GetFeatureMode = GetFeatureMode.SPATIAL; } else { featureResource.GetFeatureMode = GetFeatureMode.SPATIAL_ATTRIBUTEFILTER; } return GetFeatureInternal(featureResource, 0); }
/// <summary> /// 获取落在指定几何对象的缓冲区内的要素。 /// </summary> /// <param name="datasetNames">数据集名称数组(datasourceName:datasetName),必选参数。</param> /// <param name="geometry">几何对象,必选参数。</param> /// <param name="bufferDistance">缓冲区的半径,单位同当前数据集坐标单位(coordUnit)。</param> /// <param name="attributeFilter">属性查询过滤条件。如 fieldValue < 100,name like '%酒店%'。</param> /// <param name="fields">待返回的字段数组。当该参数为 null 时,返回全部字段。</param> /// <returns>要素集合。</returns> public List<Feature> GetFeature(string[] datasetNames, Geometry geometry, double bufferDistance, string attributeFilter, string[] fields) { if (datasetNames == null || datasetNames.Length <= 0 || string.IsNullOrEmpty(datasetNames[0])) { throw new ArgumentNullException("datasetNames", Resources.ArgumentIsNotNull); } if (geometry == null) { throw new ArgumentNullException("geometry", Resources.ArgumentIsNotNull); } if (bufferDistance <= 0) { throw new ArgumentException(string.Format(Resources.ArgumentMoreThanZero, "bufferDistance")); } GetFeatureResource featureResource = new GetFeatureResource(); featureResource.DatasetNames = datasetNames; featureResource.Distance = bufferDistance; featureResource.Geometry = geometry; if (fields != null) { featureResource.QueryParameter = new QueryParameter(); featureResource.QueryParameter.Fields = fields; } featureResource.AttributeFilter = attributeFilter; if (string.IsNullOrEmpty(attributeFilter)) { featureResource.GetFeatureMode = GetFeatureMode.BUFFER; } else { featureResource.GetFeatureMode = GetFeatureMode.BUFFER_ATTRIBUTEFILTER; } return GetFeatureInternal(featureResource, 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> 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); }