clsspacialsel.cs

来自「以构建的方式来实现对通用的查询统计」· CS 代码 · 共 397 行 · 第 1/2 页

CS
397
字号
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;
using System.Collections;
using DevExpress.XtraEditors.Repository;
using dist.hb.EnvQueryStat.Pub;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Controls;


namespace dist.hb.EnvQueryStat.Query
{
  public class SpacialSel
  {
    public clsMapQueryEnv m_MapQueryEnv;
    public SpacialSel()
    {
      m_MapQueryEnv = null;
    }
    ~SpacialSel()
    {
    }

    public void ShowSelection(ArrayList AList)
    {
      if (AList == null || AList.Count == 0) return;
      IFeatureLayer FLayer = clsGISPub.FindFeatureLayer(m_MapQueryEnv.MapControl.Map, m_MapQueryEnv.QueryLayer);//要查询的图层
      if (FLayer == null) return;
      IFeatureSelection FSelection = FLayer as IFeatureSelection;
      if (FSelection == null) return;
      FSelection.Clear();

      string codeField = m_MapQueryEnv.SpacialField;// GetCodeFieldFromLayer(m_MapQueryEnv.QueryLayer);
      string sql = "";

      bool bStr = IsStringField(FLayer, codeField);
      for (int i = 0; i < AList.Count; i++)
      {
        if (bStr)
        {
          if (sql == "") sql = "'" + AList[i].ToString() + "'";
          else sql = sql + " , '" + AList[i].ToString() + "'";
        }
        else
        {
          if (sql == "") sql =  AList[i].ToString();
          else sql = sql + ","+ AList[i].ToString() ;
        }
      }
      IQueryFilter2 queryFilter2 = new QueryFilterClass();
      queryFilter2.WhereClause = codeField + " in (" + sql + ")";

      //Using a query filter to search a feature class:
      try
      {
        FSelection.SelectFeatures(queryFilter2, esriSelectionResultEnum.esriSelectionResultNew, false);
      }
      catch (Exception e)
      {
        MessageBox.Show(e.Message); 
        throw;
      }
    }

    private bool IsStringField(IFeatureLayer FLayer, string sField)
    {
      IFeatureClass fc = FLayer.FeatureClass;
      if (fc == null) return true;
      int i = fc.Fields.FindField(sField);
      if (i < 0) return true;
      IField fld = fc.Fields.get_Field(i);
      if (fld.Type == esriFieldType.esriFieldTypeString) return true;
      else return false;
    }


    public void ClearSelection()
    {
      IFeatureLayer FLayer = clsGISPub.FindFeatureLayer(m_MapQueryEnv.MapControl.Map, m_MapQueryEnv.QueryLayer);//要查询的图层
      if (FLayer == null) return;
      IFeatureSelection FSelection = FLayer as IFeatureSelection;
      if (FSelection == null) return;
      FSelection.Clear();
      DeleteTempRecond();
      m_MapQueryEnv.MapControl.Refresh(esriViewDrawPhase.esriViewGeography, Type.Missing, Type.Missing);

    }
    private void DeleteTempRecond()
    {
      if (m_MapQueryEnv == null) return;
      string strSQL;
      strSQL = "DELETE  FROM " + BaseDataDef.QueryStatTempTable + " WHERE GUID ='" + m_MapQueryEnv.GUID + "'";
      OleDbCommand command = new OleDbCommand(strSQL, m_MapQueryEnv.DbConn);
      command.ExecuteNonQuery();
      command.Dispose();
    }

    //处理在地图上画几何体
    public IGeometry GetDrawPoint(IGeometry pGeo)
    {
      if (m_MapQueryEnv == null || pGeo == null) return null;
      if (m_MapQueryEnv.MapQueryMethod != MapQueryMethod.DRAW) return null;
      if (m_MapQueryEnv.MapDraw != MAPDRAW.MAPDRAW_POINT) return null;
      double dbBufferR = GetBufferR();
      if (dbBufferR < BaseDataDef.ZERO) dbBufferR = ToMapDist(BaseDataDef.ScreenBufferR);//
      return BufferFeature(pGeo, dbBufferR);
    }
    public IGeometry GetDrawLine(IGeometry pGeo)
    {
      if (m_MapQueryEnv == null || pGeo == null) return null;
      if (m_MapQueryEnv.MapQueryMethod != MapQueryMethod.DRAW) return null;
      if (m_MapQueryEnv.MapDraw != MAPDRAW.MAPDRAW_LINE) return null;
      double dbBufferR = GetBufferR();
      if (dbBufferR < BaseDataDef.ZERO) return pGeo;
      return BufferFeature(pGeo, dbBufferR);
    }
    public IGeometry GetDrawRect(IGeometry pEnv)
    {
      if (m_MapQueryEnv == null || pEnv == null) return null;
      if (m_MapQueryEnv.MapQueryMethod != MapQueryMethod.DRAW) return null;
      if (m_MapQueryEnv.MapDraw != MAPDRAW.MAPDRAW_RECT) return null;

      double dbBufferR = GetBufferR();
      if (dbBufferR < BaseDataDef.ZERO) return pEnv;
      return BufferFeature(pEnv, dbBufferR);
    }

    public IGeometry GetDrawCircle(IGeometry pGeo)
    {
      if (m_MapQueryEnv == null || pGeo == null) return null;
      if (m_MapQueryEnv.MapQueryMethod != MapQueryMethod.DRAW) return null;
      if (m_MapQueryEnv.MapDraw != MAPDRAW.MAPDRAW_CIRCLE) return null;
      double dbBufferR = GetBufferR();
      if (dbBufferR < BaseDataDef.ZERO) return pGeo;
      return BufferFeature(pGeo, dbBufferR);
    }
    public IGeometry GetDrawPolygon(IGeometry pGeo)
    {
      if (m_MapQueryEnv == null || pGeo == null) return null;
      if (m_MapQueryEnv.MapQueryMethod != MapQueryMethod.DRAW) return null;
      if (m_MapQueryEnv.MapDraw != MAPDRAW.MAPDRAW_POLYGON) return null;
      double dbBufferR = GetBufferR();
      if (dbBufferR < BaseDataDef.ZERO) return pGeo;
      return BufferFeature(pGeo, dbBufferR);
    }
    double GetBufferR()
    {
      if (m_MapQueryEnv == null) return 0;
      double dbBufferR = 0;
      if (m_MapQueryEnv.BufferR < BaseDataDef.ZERO) return 0;
      if (m_MapQueryEnv.unitType == UnitType.Screen)
      {
        dbBufferR = ToMapDist(Convert.ToInt32(m_MapQueryEnv.BufferR));
      }
      else
      {
        dbBufferR = m_MapQueryEnv.BufferR;
      }
      return dbBufferR;
    }
    IGeometry BufferFeature(IGeometry pGeo, double dbRadius)
    {
	    if (pGeo == null || dbRadius <  BaseDataDef.ZERO) return pGeo;
      ITopologicalOperator pTop = (ITopologicalOperator)pGeo;
      if (pTop == null) return pGeo;
	    IGeometry pOutGeo;
      pOutGeo = pTop.Buffer(dbRadius);	
	    return pOutGeo;
    }
    double ToMapDist(int nScreenDist)
    {
      if (m_MapQueryEnv == null) return 0;
      if (m_MapQueryEnv.MapControl == null) return 0;
      IActiveView pActiveView;
      pActiveView = m_MapQueryEnv.MapControl.ActiveView;
      if (pActiveView == null) return 0;

      IScreenDisplay pScreenDisplay;
      pScreenDisplay = pActiveView.ScreenDisplay;
      if(pScreenDisplay == null) return 0;

      IDisplayTransformation pDisplayTrans;
      pDisplayTrans = pScreenDisplay.DisplayTransformation;
      if (pDisplayTrans == null) return 0;

      tagRECT rectDeviceFrame;
      rectDeviceFrame = pDisplayTrans.get_DeviceFrame();

      int nScreenWidth;
      nScreenWidth = rectDeviceFrame.right - rectDeviceFrame.left;

      double dbRealWidth;
      IEnvelope pEnve;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?