ArcIMS根据查询结果定位的方法总结(C#+ADF)
方法1:
//不能根据数据库的查询条件进行选择
ESRI.ArcGIS.ADF.IMS.Geometry.Envelope env = null;
Filter queryFilter = new Filter("sde.SDE.SZPOINT.点位ID=164");
//Get feature count - using previously retrieved layer object; no selection buffer
int featureCount = theLayer.GetFeatureCount(queryFilter, null, out env);
ESRI.ArcGIS.ADF.Web.Geometry.Envelope pEnv = (ESRI.ArcGIS.ADF.Web.Geometry.Envelope)ESRI.ArcGIS.ADF.Web.Geometry.Geometry.GetMinimumEnclosingEnvelope(ESRI.ArcGIS.ADF.Web.DataSources.IMS.Converter.ToADFGeometry(env));
Map1.Extent.XMax = pEnv.XMax + 500;
Map1.Extent.XMin = pEnv.XMin - 500;
Map1.Extent.YMax = pEnv.YMax + 500;
Map1.Extent.YMin = pEnv.YMin - 500;方法2:
//可以根据关联后的数据库中的查询条件来对结果进行定位
ESRI.ArcGIS.ADF.IMS.Carto.Layer.Filter electionFilter = new ESRI.ArcGIS.ADF.IMS.Carto.Layer.Filter();
electionFilter.JoinTables.Add(JoinTable);
electionFilter.WhereExpression = "sde.SDE.SZPOINT.点位ID=zwbj.dbo.v_projectinfo_full.location_id and " + strWhere;
ESRI.ArcGIS.ADF.IMS.Carto.Layer.QueryParameters queryPara = new ESRI.ArcGIS.ADF.IMS.Carto.Layer.QueryParameters(electionFilter);
queryPara.ReturnGlobalEnvelope = true;
queryPara.FeatureLimit = 1000;
ESRI.ArcGIS.ADF.IMS.Carto.Layer.FeatureTable featTable = theLayer.Query(queryPara);
Map1.Extent.XMax = featTable.GlobalEnvelope.XMax;
Map1.Extent.XMin = featTable.GlobalEnvelope.XMin;
Map1.Extent.YMax = featTable.GlobalEnvelope.YMax;
Map1.Extent.YMin = featTable.GlobalEnvelope.YMin;方法3:
//只能通过图层里的字段查询进行定位
ESRI.ArcGIS.ADF.IMS.Carto.Layer.Filter queryFilter= new ESRI.ArcGIS.ADF.IMS.Carto.Layer.Filter();
queryFilter.JoinTables.Add(JoinTable);
queryFilter.WhereExpression = "查询条件";
ESRI.ArcGIS.ADF.IMS.Carto.Layer.QueryParameters queryParameters = new ESRI.ArcGIS.ADF.IMS.Carto.Layer.QueryParameters(queryFilter);
queryParameters.ReturnGlobalEnvelope = true;
queryParameters.ReturnGeometries = true;
queryParameters.ReturnEnvelopes = true;
ESRI.ArcGIS.ADF.IMS.Data.Dataset ds = theLayer.Dataset;
//执行查询
ESRI.ArcGIS.ADF.IMS.Carto.Layer.FeatureTable featureTable = theLayer.Query(queryParameters);
if (featureTable == null || featureTable.Rows.Count == 0)
{
}
//定位到单点
if (featureTable.Rows.Count == 1)
{
string geometryColumn = String.Empty;
foreach (DataColumn col in featureTable.Columns)
{
if (col.DataType == typeof(ESRI.ArcGIS.ADF.IMS.Geometry.Geometry))
{
geometryColumn = col.ColumnName;
break;
}
}
ESRI.ArcGIS.ADF.IMS.Geometry.Multipoint featureMultiPt;
ESRI.ArcGIS.ADF.IMS.Geometry.Point pt = null;
if (geometryColumn != String.Empty)
{
// Retrieve the geometry (point) for each city, add to point collection
foreach (DataRow featureRow in featureTable.Rows)
{
featureMultiPt = (ESRI.ArcGIS.ADF.IMS.Geometry.Multipoint)featureRow[geometryColumn];
pt = featureMultiPt.Points[0];
}
}
ESRI.ArcGIS.ADF.Web.Geometry.Point new_adf_point = (ESRI.ArcGIS.ADF.Web.Geometry.Point)ESRI.ArcGIS.ADF.Web.DataSources.IMS.Converter.ToADFGeometry(pt);
Map1.CenterAt(new_adf_point);
}
//定位到区域
else
{
ESRI.ArcGIS.ADF.IMS.Geometry.Envelope globalEnvelope = featureTable.GlobalEnvelope;
ESRI.ArcGIS.ADF.Web.Geometry.Envelope pEnv = new ESRI.ArcGIS.ADF.Web.Geometry.Envelope(globalEnvelope.XMin, globalEnvelope.YMin, globalEnvelope.XMax, globalEnvelope.YMax);
Map1.Extent = pEnv;
}
浙公网安备 33010602011771号