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

本文介绍了三种使用ArcGIS进行地图定位的方法。方法一通过特定ID查询并调整地图范围;方法二利用关联表及自定义查询表达式实现定位;方法三则通过图层字段查询定位,并能针对单点或多点进行不同操作。

方法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;
        }
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天下布武8

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值