ArcIMS根据查询结果定位的方法总结(C#+ADF)

来源:互联网 发布:魔兽世界mac客户端 编辑:程序博客网 时间:2024/05/30 13:41

方法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, nullout 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;
        }
原创粉丝点击