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;
        }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天下布武8

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

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

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

打赏作者

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

抵扣说明:

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

余额充值