clsspacialsel.cs.svn-base
来自「以构建的方式来实现对通用的查询统计」· SVN-BASE 代码 · 共 397 行 · 第 1/2 页
SVN-BASE
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 + -
显示快捷键?