📄 form1.cs
字号:
// return;
//}
/////////////////////////////////////////////////////////////////////////////////
// run Geoprocessor
// Initialize the Geoprocessor
Geoprocessor GP = new Geoprocessor();
GP.OverwriteOutput = true;
//ESRI.ArcGIS.SpatialAnalystTools.TabulateArea
//创建toolbox
TabulateArea intesectArea = new TabulateArea();
// 工具参数设置
intesectArea.in_class_data = XZFeatureClass;
intesectArea.in_zone_data = FXFeatureClass;
intesectArea.class_field = "xzid";
intesectArea.zone_field = "fxZone";
intesectArea.out_table = Application.StartupPath+@"\test.dbf";
//执行地理工具
// GP.Execute(intesectArea, null);
IGeoProcessorResult results = (IGeoProcessorResult)GP.Execute(intesectArea, null);
//MessageBox.Show(ReturnMessages(GP));
if (results != null)
{
if (results.Status.ToString() == esriJobStatus.esriJobSucceeded.ToString())
{
//执行地理工具结束
//打开table
IWorkspaceFactory2 workspaceFactory = new ShapefileWorkspaceFactoryClass();
IFeatureWorkspace Workspace = (IFeatureWorkspace)workspaceFactory.OpenFromFile(Application.StartupPath, 0);
ITable OutTable = Workspace.OpenTable("test");
for (int i = 0; i < XZFeatureClass.FeatureCount(new QueryFilterClass()); i++)
{
IFeature XZfeature = XZFeatureClass.GetFeature(i);
XZname = XZfeature.get_Value(indexNmfiled).ToString(); //得到乡镇名
string xzid = XZfeature.get_Value(indexIdfiled).ToString(); //得到ID
IArea Area = (IArea)XZfeature.Shape.Envelope;
WHArea = Area.Area; //完整的面积
ICursor PCursor = OutTable.Search(new QueryFilterClass(), false);
IRow Prow = PCursor.NextRow();
AftArea = 0;
while (Prow != null)
{
if (OutTable.Fields.FindField("XZID_" + xzid) != -1)
{
AftArea = AftArea + (double)Prow.get_Value(OutTable.Fields.FindField( "XZID_" + xzid));
}
Prow = PCursor.NextRow();
}
//string sql = "select * from shjj where 乡='" + XZname + "'";
DataView dv = new DataView(dt);
dv.RowFilter = "乡='" + XZname + "'";
//SqlCommand cmdLiming = new SqlCommand(sql, Conn);
//using (SqlDataReader drLiming = cmdLiming.ExecuteReader())
{
//while (drLiming.Read())
foreach (DataRowView drLiming in dv)
{
// if (drLiming.)
if (XZname == (string)drLiming["乡"])
{
Re_area = Re_area + AftArea / WHArea * (double)drLiming["面积"];
Re_gdp = Re_gdp + AftArea / WHArea * (double)drLiming["gdp"];
Re_gdzc = Re_gdzc + AftArea / WHArea * (double)drLiming["固定资产"];
Re_house = Re_house + AftArea / WHArea * (double)drLiming["房屋"];
Re_people = Re_people + AftArea / WHArea * (double)drLiming["人口"];
Re_village = Re_village + AftArea / WHArea * (double)drLiming["村"];
//MessageBox.Show(drLiming[0].ToString());
////ListViewItem myItem = new ListViewItem(drLiming[0].ToString());
////myItem.SubItems.Add(drLiming[1].ToString());
////myItem.SubItems.Add(drLiming[2].ToString());
////myItem.SubItems.Add(drLiming[3].ToString());
////myItem.SubItems.Add(drLiming[4].ToString());
////ListView1.Items.Add(myItem);
////myItem.ImageIndex = 0;
//SqlDataAdapter da = new SqlDataAdapter(sql, Conn);
//DataSet dst = new DataSet();
//da.Fill(dst, "tongji");
}
}
}
}
pResultesDt.Rows.Add(new object[] { FXFeatureClass.AliasName, Re_area, Re_gdp, Re_people, Re_gdzc, Re_house, Re_village });
}
else {
MessageBox.Show(FXFeatureClass.AliasName + "计算失败!" + ReturnMessages(GP));
}
}
else
{
MessageBox.Show(FXFeatureClass.AliasName + "计算失败!" + ReturnMessages(GP));
// MessageBox.Show(ReturnMessages(GP));
}
}
private string ReturnMessages(Geoprocessor gp)
{
StringBuilder sb = new StringBuilder();
if (gp.MessageCount > 0)
{
for (int Count = 0; Count <= gp.MessageCount - 1; Count++)
{
System.Diagnostics.Trace.WriteLine(gp.GetMessage(Count));
sb.AppendFormat("{0}\n", gp.GetMessage(Count));
}
}
return sb.ToString();
}
private IFeatureClass getIFeatureClass(string paths)
{
//cast for the feature workspace from the workspace
string dataPath;
string nameOfFeatureClass;
dataPath = paths.Substring(0, paths.LastIndexOf("\\")); //将最后一个字符“/”之前的字符提取出来
nameOfFeatureClass = paths.Remove(0, paths.LastIndexOf("\\") + 1); //将最后一个字符“/”之后的字符提取出来
nameOfFeatureClass = nameOfFeatureClass.Substring(0, nameOfFeatureClass.Length - 4); //将最后一个字符“.”之前的字符提取出来
try
{
IWorkspaceFactory2 workspaceFactory = new ShapefileWorkspaceFactoryClass();
//IWorkspace pp = workspaceFactory.OpenFromFile(dataPath, 0);
IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspaceFactory.OpenFromFile(dataPath, 0);
// IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace; //open the featureclass
return featureWorkspace.OpenFeatureClass(nameOfFeatureClass);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "无法打开数据!");
throw;
}
}
private void button1_Click(object sender, EventArgs e)
{
QureySql(getIFeatureClass(@"D:\例子\intersect\FxtTools\乡镇界图层\乡镇界.shp"), "");
}
private void QureySql(object layer, object Sql)
{
//查出结果 点击一条记录,定位或者选中要素
}
private void QureySql(IFeatureClass FCL, string sql)
{
//IFeatureClass FCL = getIFeatureClass(featurepath);
IQueryFilter pQueryFilter=new QueryFilterClass();
pQueryFilter.WhereClause=sql;
DataRow newRow;
IFeatureCursor feaCur = FCL.Search(pQueryFilter, false);
IFeature Pfeature = feaCur.NextFeature();
DataTable DTtable = new DataTable();
//增加列
for (int i=0; i < FCL.Fields.FieldCount; i++)
{
DTtable.Columns.Add(FCL.Fields.get_Field(i).Name.ToString(), typeof(string));
}
newRow = DTtable.NewRow();
while (Pfeature != null)
{
for (int i = 0; i < feaCur.Fields.FieldCount; i++)
{
newRow[i] = Pfeature.get_Value(i).ToString();
}
DTtable.Rows.Add(newRow);
newRow = DTtable.NewRow();
Pfeature= feaCur.NextFeature();
}
this.dataGridView1.DataSource = DTtable.DefaultView;
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
// MessageBox.Show(dataGridView1.CurrentCell.OwningRow.Cells[0].Value.ToString());
string fid;
fid = dataGridView1.CurrentCell.OwningRow.Cells["fid"].Value.ToString();
// MessageBox.Show(fid);
//axMapControl1.AddLayerFromFile(@"D:\例子\intersect\FxtTools\乡镇界图层\乡镇界.shp");
Single_zoom(fid, axMapControl1.Map,axMapControl1.get_Layer(0));
}
private void Single_zoom(string fid,IMap pmap,ILayer player)
{
IFeatureLayer pFlayer = (IFeatureLayer)player;
IFeatureClass pFC = pFlayer.FeatureClass;
IQueryFilter PQF = new QueryFilterClass();
PQF.WhereClause ="FID="+fid;
//PQF.WhereClause = "FID = 1";
try
{
IFeatureCursor pfcur = pFC.Search(PQF, false);
ISelectionSet pseletionSet=pFC.Select(PQF, esriSelectionType.esriSelectionTypeSnapshot, esriSelectionOption.esriSelectionOptionNormal, null);
//pseletionSet.Select(PQF, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionEmpty, null);
IFeature pFeature = pfcur.NextFeature();
pmap.ClearSelection();
pmap.SelectFeature(player,pFeature);
IActiveView iAview = (IActiveView)pmap;
iAview.Extent = pFeature.Extent;
iAview.Refresh();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "该数据无法在图上显示!");
throw;
}
}
private void zoombotton_Click(object sender, EventArgs e)
{
Mule_zoom(axMapControl1.get_Layer(0),axMapControl1.Map);
}
private void Mule_zoom(ILayer pLayer,IMap pmap)
{
IFeatureLayer pFlayer = (IFeatureLayer)pLayer;
IFeatureClass pFC = pFlayer.FeatureClass;
pmap.ClearSelection();
IQueryFilter PQF = new QueryFilterClass();
string whereClause = "";
string fid = "";
for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
{
int rowNum_select = dataGridView1.SelectedRows[i].Index; ; ;
//pow.
fid = dataGridView1.Rows[rowNum_select].Cells["fid"].Value.ToString();
if (i == 0)
{
whereClause = "FID=" + fid;
}
else
{
whereClause =whereClause+ "OR FID=" + fid;
}
}
PQF.WhereClause = whereClause;
IFeatureCursor pfcur = pFC.Search(PQF, false);
IFeature pfeature=pfcur.NextFeature();
IEnvelope penvelope = (IEnvelope)pfeature.Extent;
//ISelectionSet pseletionSet = pFC.Select(PQF, esriSelectionType.esriSelectionTypeSnapshot, esriSelectionOption.esriSelectionOptionNormal, null);
//pseletionSet.Select(new QueryFilter(), esriSelectionType.esriSelectionTypeSnapshot, esriSelectionOption.esriSelectionOptionNormal, null);
//pmap.FeatureSelection = pseletionSet;
while (pfeature!=null)
{
pmap.SelectFeature(pLayer, pfeature);
if (penvelope.XMax < pfeature.Extent.XMax) { penvelope.XMax = pfeature.Extent.XMax; }
if (penvelope.XMin > pfeature.Extent.XMin) { penvelope.XMin = pfeature.Extent.XMin; }
if (penvelope.YMax < pfeature.Extent.YMax) { penvelope.MMax = pfeature.Extent.YMax; }
if (penvelope.YMin> pfeature.Extent.YMin) { penvelope.YMin = pfeature.Extent.YMin; }
pfeature = pfcur.NextFeature();
}
IActiveView iAview = (IActiveView)pmap;
iAview.Extent = penvelope;
iAview.Refresh();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -