/// <summary> /// 创建 dataPage页面,首先要传入 装载页面的容器 PageView,这个方法有缓存 /// </summary> /// <param name="pLayer"></param> /// <returns></returns> public static PagerPage CreateMapDataPage(ILayer pLayer) { PagerPage page; if (userControlReids.TryGetValue(pLayer, out page)) { for (int a = 0; a < pageView.Items.Count; a++) { if ((pageView.Items[a] as PageViewItem).Header.Equals(pLayer.Name)) { //pageView.SelectedIndex = a; if (a != pageView.Items.Count - 1) { var temp = pageView.Items[a]; pageView.Items.RemoveAt(a); pageView.Items.Add(temp); pageView.SelectedIndex = pageView.Items.Count - 1; //pageView.Items.Insert(0,temp); // pageView.SelectedIndex = 0; } break; } } return(page); } IList <IFeature> features = ArcGisUtils.GetFeatures(pLayer); page = CreateMapDataPage(pLayer, features); userControlReids.Add(pLayer, page); return(page); }
/// <summary> /// 设置图幅号 /// </summary> /// <param name="features"></param> public static void SetTuFu(IFeatureLayer tufulayer, IList <IFeature> features, string filedName = "TuFu") { int index; if (features.Count != 0) { index = features[0].Fields.FindField(filedName); } else { return; } StringBuilder sb = new StringBuilder(); foreach (IFeature feature in features) { IList <IFeature> tufus = ArcGisUtils.GetSeartchFeatures(tufulayer, feature.Shape, esriSpatialRelEnum.esriSpatialRelIntersects); TuFuOderByTuFuHao(tufus); for (int a = 0; a < tufus.Count; a++) { if (a != 0) { sb.Append("、"); } sb.Append(tufus[a].get_Value(3)); } feature.Value[index] = sb.ToString(); feature.Store(); sb.Remove(0, sb.Length); } }
public static IList <JZD> GetMapJZD(string sql = "") { IFeatureLayer jtLayer = ArcGisUtils.GetFeatureLayer(JZDCustom.JZDLayer); IFeatureCursor cur = ArcGisUtils.GetEntitys(sql, jtLayer); IList <IFeature> features = ArcGisUtils.CursorToList(cur); return(FeatureToList(features)); }
/// <summary> /// 将shp导出 成单个的 mxd /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SpliceSHPToMxd_Click(object sender, ItemClickEventArgs e) { //打开map //得到选中的地块 IList <IFeature> features = ArcGisUtils.GetInstance().GetSelectFeature(); //得到模板mxd //导出mxd }
private static bool CheckBZPoint(IPoint pt1, IList <IFeatureLayer> layers, double radius) { foreach (IFeatureLayer layer in layers) { if (ArcGisUtils.CircleSelect(pt1, layer, radius).Count != 0) { return(false); } } return(true); }
/// <summary> /// pdf转换 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Button_Click_2(object sender, RoutedEventArgs e) { IList <string> mxdPaths = ListView.DataContext as IList <string>; if (MyUtils.Utils.CheckListExists(mxdPaths)) { ArcGisUtils.ExportPDFS(mxdPaths); } else { MessageBox.Show("无数据转换!!!"); } }
public Dictionary <string, IList <JZD> > GetMapJZDS() { Dictionary <string, IList <JZD> > dic = new Dictionary <string, IList <JZD> >(); IList <IFeature> features = ArcGisUtils.GetEntitysList("", JZDCustom.JZDLayer); if (Utils.CheckListExists(features)) { IList <JZD> jzds = JZDCustom.FeatureToList(features); return(Utils.GetGroupDicToList("ZDNUM", jzds)); } else { return(dic); } }
public IList <JZD> ExtractJZD_Intersectant(JTSYQ jtsyq, IList <JZD> jzds) { IFeature feature = jtsyq.Feature; IList <JZD> jzds1 = ExtractJzd(jtsyq, ArcGisUtils.GetFeatureLayer(JTSYQCustom.JTSYQLayerName), ArcGisUtils.GetFeatureLayer(JZDCustom.JZDLayer)); foreach (JZD jzd in jzds1) { jzd.ZDNUM = jtsyq.BM; jzd.JTSYQOBJECTID = jtsyq.OBJECTID; //jzd.Feature.Shape = jzd.Point; //JZDCustom.SaveMap(jzd); } JZDCustom.SaveMap(jzds1); return(null); }
private void ok() { if (siziE == null || jtsyq == null) { return; } JTSYQCustom jTSYQCustom = new JTSYQCustom(jtsyq); Dictionary <string, IList <IFeature> > featuresDic = ArcGisUtils.GetFeatureDicByLayer(features); //其他集体所有权 IList <IFeature> siziFeatures; if (featuresDic.TryGetValue(JTSYQCustom.JTSYQLayerName, out siziFeatures)) { IList <JTSYQ> sizeJTSYQS = JTSYQCustom.FeaturesToJTSYQ(siziFeatures); jTSYQCustom.SetSiZi(siziE, sizeJTSYQS); } jTSYQCustom.ArcGisSave(); }
private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e) { IGeometry geometry; switch (MapMouseDownFlag) { case 3: IFeatureLayer tufulayer = ArcGisUtils.GetFeatureLayer("TuFu"); if (tufulayer != null) { IFeatureClass tufuFeatureClass = tufulayer.FeatureClass; geometry = axMapControl1.TrackRectangle(); TuFu.CreateTuFuFeautre(geometry.Envelope, tufuFeatureClass); axMapControl1.ActiveView.Refresh(); } break; } }
/// <summary> /// 设置界址线标注 /// </summary> /// <param name="map"></param> /// <param name="jzxs"></param> public static void SaveJZXBZMap(IMap map, IList <JZX> jzxs) { ITextSymbol textSymbol = ArcGisUtils.CreateTextSymbol(10, "宋体"); IGraphicsContainer pGraph = map as IGraphicsContainer; foreach (JZX jzx in jzxs) { string bz = jzx.QLR + "\n" + jzx.BM; if (bz != null) { bz = bz.Replace("成都高新区", ""); IPointCollection pc = jzx.Polyline as IPointCollection; IPoint pt = ArcGisUtils.GetPolyCore(pc); var textELment = ArcGisUtils.CreateTextElement(bz, pt, textSymbol); pGraph.AddElement(textELment as IElement, 0); } } }
public void ExcelToShp(string path) { if (Utils.CheckFileExists(path)) { string zjdShpTemplte = System.AppDomain.CurrentDomain.BaseDirectory + "ArcGisTemplete\\宅基地模板shp"; string saveDir = path.Substring(0, path.LastIndexOf(".")) + "SHP"; FileUtils.CopyDir(zjdShpTemplte, saveDir, true); while (axMapControl.LayerCount > 0) { axMapControl.DeleteLayer(0); } axMapControl.AddShapeFile(saveDir, "ZJD.shp"); IFeatureLayer featureLayer = ArcGisUtils.GetFeatureLayer2("ZJD"); IFeatureClass featureClass = featureLayer.FeatureClass; IWorkspaceEdit workspaceEdit = ArcGisUtils.StratEdit(featureClass); IFeatureCursor featureCursor = featureClass.Insert(false); IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer(); ISheet sheet = ExcelManager.ExcelRead.ReadExcelSheet(path, 0); foreach (NPOI.SS.UserModel.IRow row in sheet) { IPointCollection pc = new Polygon(); string[] pcStrArray = row.GetCell(2).StringCellValue.Split(','); foreach (string ptStr in pcStrArray) { string[] ptArray = ptStr.Split(':'); IPoint point = new PointClass(); point.PutCoords(double.Parse(ptArray[0]), double.Parse(ptArray[1])); pc.AddPoint(point); } IPolygon polygon = ArcGisUtils.CreatePolygon(pc); featureBuffer.Shape = polygon; featureBuffer.Value[3] = row.GetCell(0).StringCellValue; featureBuffer.Value[4] = row.GetCell(1).StringCellValue; featureCursor.InsertFeature(featureBuffer); } //IList<IFeature> list = ArcGisUtils.GetEntitysList("", "ZJD"); ArcGisDao.EndEdit(workspaceEdit); } }
/// <summary> /// 设置多个四至 /// </summary> /// <param name="features"></param> private void SetJTSYQSiZi(PreviewKeyDownEventArgs e) { if (CurrentJTSYQ == null) { return; } IList <IFeature> features = ArcGisUtils.GetInstance().GetSelectFeature(); if (!MyUtils.Utils.CheckListExists(features)) { return; } JTSYQCustom jTSYQCustom = new JTSYQCustom(CurrentJTSYQ); Dictionary <string, IList <IFeature> > featuresDic = ArcGisUtils.GetFeatureDicByLayer(features); //其他集体所有权 IList <IFeature> siziFeatures; if (featuresDic.TryGetValue(JTSYQCustom.JTSYQLayerName, out siziFeatures)) { IList <JTSYQ> siziJTSYQS = JTSYQCustom.FeaturesToJTSYQ(siziFeatures); if (!MyUtils.Utils.CheckListExists(siziJTSYQS)) { return; } //移除自身地块 int count = siziJTSYQS.Count; for (int a = 0; a < count; a++) { JTSYQ round = siziJTSYQS[a]; if (round.Feature.OID == CurrentJTSYQ.Feature.OID) { siziJTSYQS.RemoveAt(a); count--; a--; } } jTSYQCustom.SetSiZi(e, siziJTSYQS); } jTSYQCustom.ArcGisSave(); //更新显示的table中 的josn数据 }
/// <summary> /// 表格双击 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public override void Table_Click(object sender, MouseButtonEventArgs e) { GridControl gridControl = sender as GridControl; GridColumn column = gridControl.CurrentColumn as GridColumn; MapTabDictoryCustom row = gridControl.CurrentItem as MapTabDictoryCustom; if (column.VisibleIndex == objectIndex) { } //图形缩放 var obj = gridControl.CurrentItem; int objectId = (int)row.Dic["OBJECTID"]; IFeature feature = featureDic[objectId]; if (pLayer.Name == JTSYQCustom.JTSYQLayerName) { MapForm.CurrentJTSYQ = JTSYQCustom.FeaturesToJTSYQ(feature); MapForm.CurrentJTSYQ.MapTabDictoryCustom = row; } ArcGisUtils.ExtentShp(feature, pLayer, 2); }
public static void DeleteTuFuKuang() { IFeatureLayer tufulayer = ArcGisUtils.GetFeatureLayer("TuFu"); if (tufulayer != null) { IFeatureClass tufuFeatureClass = tufulayer.FeatureClass; IFeatureCursor curs = tufuFeatureClass.Update(new QueryFilterClass(), true); IFeature feautre = curs.NextFeature(); while (feautre != null) { curs.DeleteFeature(); feautre = curs.NextFeature(); } mapForm.axMapControl1.ActiveView.Refresh(); } else { MessageBox.Show("没有这个图层:TuFu"); } }
private void FlushTuFu_Click(object sender, ItemClickEventArgs e) { AddDocument(MapFormCustom.GetInstance()); IList <JTSYQ> jtsyqs = GetSelectJTSYQS(); if (jtsyqs != null) { List <IFeature> list = new List <IFeature>(); foreach (JTSYQ jtsyq in jtsyqs) { foreach (JTSYQ child in jtsyq.GroupJTSYQ) { list.Add(child.Feature); } } TuFu.SetTuFu(ArcGisUtils.GetFeatureLayer("TuFu"), list); } else { MessageBox.Show("你没有选择行政区"); } }
/// <summary> /// 界址点近顺序编码 /// </summary> /// <param name="jtsyq"></param> /// <param name="jzds"></param> /// <param name="featureLayer"></param> public static void SetBM(int startBH, JTSYQ jtsyq, IList <JZD> jzds, IFeatureLayer featureLayer) { if (jzds == null) { return; } //找到西北角第一点 IPolygon pl = jtsyq.Feature.Shape as IPolygon; int[] fourPoint = ArcGisUtils.GetFourPointsIndex(pl); int index = PointDiMin(fourPoint[0], jzds); int startIndex = index; int id = jtsyq.OBJECTID; if (jzds.Count == 0) { MessageBox.Show("你选择的图中有没有界址点的,宗地是:" + jtsyq.QLR + ", 编码是:" + jtsyq.BM); return; } while (startIndex < jzds.Count) { JZD jzd = jzds[startIndex]; jzd.JTSYQOBJECTID = id; jzd.JZDH = startBH++; startIndex++; } int min = 0; while (min < index) { JZD jzd = jzds[min]; jzd.JTSYQOBJECTID = id; jzd.JZDH = startBH++; min++; } //修改 Update(jzds); }
/// <summary> /// 得到图幅号 /// </summary> /// <param name="ev"></param> /// <returns></returns> public static void CreateTuFuFeautre(IEnvelope ev, IFeatureClass featureClass) { IPoint pt1 = ev.UpperLeft; if (pt1.IsEmpty) { return; } IPoint pt2 = ev.UpperRight; IPoint pt4 = ev.LowerRight; IList <string> list = new List <string>(); double y1 = pt1.Y; double y4 = pt4.Y; IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer(); IFeatureCursor cursor = featureClass.Insert(true); int index = cursor.FindField("TuFu"); while (y1 > y4) { double x1 = pt1.X; double x2 = pt2.X; while (x1 < x2) { string tufu = GetTuFu(x1, y1); list.Add(tufu); IPointCollection pc = GeTuPointCollection(x1, y1); IPolygon polygon = ArcGisUtils.CreatePolygon(pc); featureBuffer.Shape = polygon; featureBuffer.set_Value(3, tufu); cursor.InsertFeature(featureBuffer); x1 += 500; } y1 -= 500; } }
/// <summary> /// 增加界址点标注 /// </summary> /// <param name="groupJTSYQ"></param> public static void SaveJZDBZMap(IMap map, IList <JZD> jzds) { ITextSymbol textSymbol = ArcGisUtils.CreateTextSymbol(10, "宋体"); IGraphicsContainer pGraph = map as IGraphicsContainer; IList <IFeatureLayer> layers = new List <IFeatureLayer>(); for (int a = 0; a < map.LayerCount; a++) { layers.Add(map.Layer[a] as IFeatureLayer); } foreach (JZD jzd in jzds) { string bz = "J" + jzd.JZDH; if (bz != null) { IPoint pt = GetBZPoint(jzd, layers); ITextElement textELment = ArcGisUtils.CreateTextElement(bz, pt, textSymbol); pGraph.AddElement(textELment as IElement, 0); } } }
public void ExportCun_GongShiTuActions(XZDM cunXZDM, string saveDir) { //IList<JTSYQ> jtsyqs = null; //得到所有界址短线 IList <JZX> jzxs = JZXCustom.SetJZX(cunXZDM.JTSYQS); //从中删除本村的界址短线 for (int a = 0; a < jzxs.Count; a++) { JZX jzx = jzxs[a]; string str = jzx.BM.Substring(0, 12); if (str == cunXZDM.DJZQDM) { jzxs.RemoveAt(a); a--; } } string mxdPath = saveDir + "\\" + System.IO.Path.GetFileName(JTSYQCustom.JTSYQGSTMxd); string mdbPath = saveDir + "\\" + System.IO.Path.GetFileName(JTSYQCustom.JTSYQGSTMDB); //1、复制maxd FileUtils.CopyFile(JTSYQCustom.JTSYQGSTMxd, mxdPath); //2、复制数据库 FileUtils.CopyFile(JTSYQCustom.JTSYQZDTMdb, mdbPath); //打开工作文件 MapDocumentClass mapDocument = new MapDocumentClass(); mapDocument.Open(mxdPath, ""); AxMapControl mapControl = ArcGisUtils.axMapControl; IMap map = mapDocument.Map[0]; mapControl.Map = map; //3、设置数据源,数据源是相对路径,不需要设置 //4、复制 本村的界址线shap JTSYQCustom.SaveMap(cunXZDM.JTSYQS); //设置本村的界址点标注 JTSYQCustom.SaveJTSYQBZMap(map, cunXZDM.JTSYQS); JZXCustom.SaveJZXMap(jzxs); JZXCustom.SaveJZXBZMap(map, jzxs); double scale = 100.0; // mapControl.Extent = JTSYQCustom.SetExtent(cunXZDM.JTSYQS); ArcGisUtils.axMapControl.Extent = JTSYQCustom.GetLayer().AreaOfInterest; double num = (double)((int)((map.MapScale + 30.0) / scale) * scale + scale); //mapControl.MapScale = 329; ArcGisUtils.ChangeMapScale(mapDocument, num); //5、替换文字内容, Dictionary <string, XMLObject> xmlObjectDic = XMLRead.XmlToObjects(JTSYQCustom.XZDM_Reflect, true); XMLObject xmlObject = new XMLObject { Column = "BLC", Deafult = "1:" + num }; xmlObjectDic.Add("BLC", xmlObject); ArcGisService.ReplaceText(cunXZDM, xmlObjectDic, mapDocument); //使用的xml缓存,必须移除 xmlObjectDic.Remove("BLC"); //6、工程文件保留 mapDocument.Save(); mapDocument.Close(); ArcGisUtils.Refresh(); }
private IList <JZD> ExtractJzd(JTSYQ dk, IFeatureLayer dkLayer, IFeatureLayer jzdLayer) { IFeature feature = dk.Feature; IPolygon polygon = feature.Shape as IPolygon; IPointCollection pointCollection = polygon as IPointCollection; IList <JZD> list = new List <JZD>(); int num = pointCollection.PointCount - 2; IPoint point = new PointClass(); point.X = 0.0; point.Y = 0.0; IList <JTSYQ> list2 = JTSYQCustom.FeaturesToJTSYQ(ArcGisUtils.CircleSelect(pointCollection.get_Point(num), dkLayer)); IList <JTSYQ> list3 = JTSYQCustom.FeaturesToJTSYQ(ArcGisUtils.CircleSelect(pointCollection.get_Point(0), dkLayer)); IList <JTSYQ> entity = JTSYQCustom.FeaturesToJTSYQ(ArcGisUtils.CircleSelect(pointCollection.get_Point(1), dkLayer)); for (int i = 0; i <= num; i++) { IPoint point2 = pointCollection.get_Point(i); int num2 = list3.Count <JTSYQ>(); bool flag2 = num2 > list2.Count || num2 > entity.Count; if (flag2) { JZD JZD = new JZD(); JZD.JZDIndex = i; JZD.Point = point2; list.Add(JZD); point = point2; } else { bool flag3 = num2 != 1 && this.DifferentDks(list3, list2); if (flag3) { JZD JZD = new JZD(); JZD.JZDIndex = i; JZD.Point = point2; list.Add(JZD); point = point2; } else { double num3 = ArcGisUtils.CalculateTwoPt(point2, point); bool flag4 = i == 0; double num4 = -1; if (flag4) { num4 = ArcGisUtils.Angle(point2, pointCollection.get_Point(num), pointCollection.get_Point(1)); } else { bool flag5 = i == num; if (flag5) { num4 = ArcGisUtils.Angle(point2, pointCollection.get_Point(i - 1), pointCollection.get_Point(0)); double num5 = ArcGisUtils.CalculateTwoPt(point2, pointCollection.get_Point(0)); bool flag6 = num5 < num3; if (flag6) { num3 = num5; } } else { num4 = ArcGisUtils.Angle(point2, pointCollection.get_Point(i - 1), pointCollection.get_Point(i + 1)); } } bool flag7 = num4 < 150; if (flag7) { bool flag8 = num4 <130.0 || num3> 2.0; if (flag8) { //检查与上一个 int count = list.Count - 1; if (count >= 0) { double di = ArcGisUtils.CalculateTwoPt(point2, list[count].Point); if (di > 1) { //有上一个点的话,要大于50距离才增加 JZD JZD = new JZD(); JZD.JZDIndex = i; JZD.Point = point2; list.Add(JZD); point = point2; } } else { JZD JZD = new JZD(); JZD.JZDIndex = i; JZD.Point = point2; list.Add(JZD); point = point2; } } else { IList <IFeature> featureCursor = ArcGisUtils.CircleSelect(point2, jzdLayer); if (Utils.CheckListExists(featureCursor)) { JZD JZD = new JZD(); JZD.JZDIndex = i; JZD.Point = point2; list.Add(JZD); point = point2; } } } } } list2 = list3; list3 = entity; bool flag10 = i != num; if (flag10) { entity = JTSYQCustom.FeaturesToJTSYQ(ArcGisUtils.CircleSelect(pointCollection.get_Point(i + 2), dkLayer)); } else { entity = JTSYQCustom.FeaturesToJTSYQ(ArcGisUtils.CircleSelect(pointCollection.get_Point(0), dkLayer)); } } return(list); }
private void Import(String filename = null) { var rasterFile = filename; if (rasterFile == null) { LandCoverTableViewModel.BufferDistance = BankModificationIndicator.BufferDistance; LandCoverTableViewModel.ImportStep = false; var id = new LandCoverImportWindow { Owner = Application.Current.MainWindow, DataContext = LandCoverTableViewModel }; if (id.ShowDialog() != true) { return; } BankModificationIndicator.BufferDistance = LandCoverTableViewModel.BufferDistance; var dialog = new OpenFileDialog { Title = "Import Land Cover GeoTIFF", DefaultExt = ".tif", CheckFileExists = true }; if (dialog.ShowDialog() != true) { return; } rasterFile = dialog.FileName; } if (String.IsNullOrWhiteSpace(rasterFile)) { return; } GdalConfiguration.ConfigureOgr(); GdalConfiguration.ConfigureGdal(); var ci = Model.EcosystemVitality.FetchIndicator <ConnectivityIndicator>(); if (!(ci?.Reaches?.Count > 0)) { MessageBox.Show( "You must have reaches for the Connectivity Indicator imported in order to process the channel modification."); return; } var raster = Gdal.Open(rasterFile, Access.GA_ReadOnly); var progress = new ProgressDialog { Label = $"Processing Channel Modification:\n{raster.GeoTiffDescription()}", Owner = Application.Current.MainWindow, IsCancellable = true, IsIndeterminate = false }; var result = new Dictionary <byte, int>(); progress.Execute((ct, p) => { var ip = new Progress <int>(); var reachNumber = 0; var sr = new SpatialReference(ArcGisUtils.WkidToWktxt(Model.Attributes.Wkid)); foreach (var reach in ci.Reaches) { var line = new Geometry(wkbGeometryType.wkbLineString); line.AssignSpatialReference(sr); foreach (var node in reach.Nodes) { line.AddPoint_2D(node.Location.Longitude, node.Location.Latitude); } // convert from the user specified buffer distance (in meters) to the projected buffer units. no idea how well this works in general. var distance = sr.IsGeographic() == 1 ? BankModificationIndicator.BufferDistance / 110000 * Math.Abs(Math.Cos(sr.GetAngularUnits() * reach.Nodes[0].Location.Latitude)) : BankModificationIndicator.BufferDistance / sr.GetLinearUnits(); GdalRasterUtils.ReadRasterRows(raster, line.Buffer(distance, 5), out var tally, ct, ip); foreach (var key in tally.Keys) { if (!result.ContainsKey(key)) { result[key] = 0; } result[key] += tally[key]; } p.Report((int)(100.0 * reachNumber++ / ci.Reaches.Count)); } }); var message = new TextWindow { Owner = Application.Current.MainWindow, Text = "Histogram of extracted data:\n" + GdalRasterUtils.DumpResult(result) + "\n\n--- Raster File Details ---\n" + GdalRasterUtils.DumpDatasetInfo(raster) }; message.ShowDialog(); BankModificationIndicator.Notes = message.Text; var coverage = BankModificationIndicator.Coverage.Clone(); foreach (var item in coverage) { item.Area = 0.0; if (item.Mapping == null) { continue; } foreach (var map in item.Mapping) { if (result.ContainsKey(map)) { item.Area += result[map]; } } } var total = coverage.Sum(x => x.Area); for (var i = 0; i < coverage.Count; i++) { BankModificationIndicator.Coverage[i].Area = 100.0 * coverage[i].Area / total; } }
public static IFeatureLayer GetJZDLayer() { return(ArcGisUtils.GetFeatureLayer2(JZDLayer)); }
public static IList <JZD> SearchOrCreateJZD(JTSYQ jtsyq, IFeatureLayer featureLayer) { IList <JZD> list = new List <JZD>(); string bm = jtsyq.BM; IPolygon polygon = jtsyq.Feature.Shape as IPolygon; IPointCollection pc = polygon as IPointCollection; //减少一个收尾的 因闭合多一个点 int max = pc.PointCount - 1; for (int a = 0; a < max; a++) { IPoint pt1 = pc.Point[a]; IList <JZD> oldJZDS = JZDCustom.FeatureToList(ArcGisUtils.CircleSelect(pc.get_Point(a), featureLayer)); if (!Utils.CheckListExists(oldJZDS)) { continue; } else if (oldJZDS.Count >= 2) { RemoveMoreJZD(oldJZDS); } bool flag = true; foreach (JZD jzd in oldJZDS) { flag = false; string jzdbm = jzd.ZDNUM; //如果有空编码 或者 本宗地 直接添加 if (Utils.IsStrNull(jzdbm) || jzdbm.Equals(bm)) { jzd.JZDIndex = a; jzd.ZDNUM = bm; bool hasJzd = true; //检查重复是不有重复点 foreach (JZD jzd1 in list) { double dx = Math.Abs(pc.get_Point(a).X - (jzd1.Feature.Shape as IPoint).X); if (dx < 0.01) { double dy = Math.Abs(pc.get_Point(a).Y - (jzd1.Feature.Shape as IPoint).Y); hasJzd = false; break; } } if (hasJzd) { list.Add(jzd); } break; } } if (flag) { IPoint JTSYQJZD = pc.get_Point(a); //检查完才能确定,是否有其他宗地编码,则创建 JZD jzd = new JZD(); Point point = new PointClass(); point.PutCoords(JTSYQJZD.X, JTSYQJZD.Y); jzd.ZDNUM = bm; jzd.JZDIndex = a; jzd.Point = point; SaveMap(jzd); list.Add(jzd); } } return(list); }
public void ExportZu_ZhongDiTu(JTSYQ jtsyqGroup, string saveDir) { IList <JZX> jzxs = JZXCustom.SetJZX(jtsyqGroup.GroupJTSYQ); string mxdPath = saveDir + "\\" + System.IO.Path.GetFileName(JTSYQCustom.JTSYQZDTMxd); string mdbPath = saveDir + "\\" + System.IO.Path.GetFileName(JTSYQCustom.JTSYQZDTMdb); //1、复制maxd FileUtils.CopyFile(JTSYQCustom.JTSYQZDTMxd, mxdPath); //2、复制数据库 FileUtils.CopyFile(JTSYQCustom.JTSYQZDTMdb, mdbPath); //打开工作文件 MapDocumentClass mapDocument = new MapDocumentClass(); mapDocument.Open(mxdPath, ""); AxMapControl mapControl = ArcGisUtils.axMapControl; IMap map = mapDocument.Map[0]; mapControl.Map = map; //3、设置数据源,数据源是相对路径,不需要设置 //4、复制shap JTSYQCustom.SaveMap(jtsyqGroup.GroupJTSYQ); JTSYQCustom.SaveJTSYQBZMap(map, jtsyqGroup.GroupJTSYQ); IList <JZD> jzds = JZDCustom.SaveMap(jtsyqGroup); JZXCustom.SaveJZXMap(jzxs); JZXCustom.SaveJZXBZMap(map, jzxs); JZDCustom.SaveJZDBZMap(map, jzds); double scale = 100.0; mapControl.Extent = JTSYQCustom.SetExtent(jtsyqGroup.GroupJTSYQ); double num = (double)((int)((map.MapScale + 30.0) / scale) * scale + scale); //mapControl.MapScale = 329; ArcGisUtils.ChangeMapScale(mapDocument, num); //5、替换文字内容, int index = 0; for (int a = 0; a > -1; a++) { string tufu = jtsyqGroup.TuFu; if (Utils.IsStrNull(tufu)) { MessageBox.Show("你还没有生成图幅号!!!:" + jtsyqGroup.QLR); ArcGisUtils.Refresh(); return; } index = tufu.IndexOf("、", index + 1); if (index == -1) { break; } if (a % 2 != 0) { jtsyqGroup.TuFu = tufu.Insert(index + 1, "\n"); } } Dictionary <string, XMLObject> xmlObjectDic = XMLRead.XmlToObjects(JTSYQCustom.JTSYQ_Reflect, true); XMLObject xmlObject = new XMLObject { Column = "BLC", Deafult = "1:" + num }; xmlObjectDic.Add("BLC", xmlObject); ArcGisService.ReplaceText(jtsyqGroup, xmlObjectDic, mapDocument); //使用的xml缓存,必须移除 xmlObjectDic.Remove("BLC"); //6、工程文件保留 mapDocument.Save(); mapDocument.Close(); ArcGisUtils.Refresh(); }
public JTSYQDao() { arcGisUtils = ArcGisManager.ArcGisUtils.GetInstance(); }
/// <summary> /// 设置周围的界址线 /// </summary> /// <param name="jtsyqs"></param> public static List <JZX> SetJZX(IList <JTSYQ> jtsyqs) { List <JZX> list = new List <JZX>(); IList <JTSYQ> otherJTSYQS = new List <JTSYQ>(); foreach (JTSYQ jtsyq in jtsyqs) { IGeometry geometry = jtsyq.Feature.Shape; //相交的面 IList <IFeature> intersectFeature = ArcGisUtils.GetSeartchFeatures(JTSYQCustom.GetLayer(), geometry.Envelope, esriSpatialRelEnum.esriSpatialRelIntersects); IList <JTSYQ> interJTSYQS = JTSYQCustom.FeaturesToJTSYQ(intersectFeature); IList <JZX> jzxs = new List <JZX>(); foreach (JTSYQ inter in interJTSYQS) { if (JTSYQHasObject(inter.OBJECTID, jtsyqs)) { continue; } JZX jzx = new JZX(); jzx.BM = inter.BM; jzx.QLR = inter.QLR; jzx.JTSYQOBJECTID = inter.OBJECTID; IEnvelope envelope = jtsyq.Feature.Shape.Envelope; IPolyline pl2 = ArcGisUtils.PolygonToPolyline(inter.Feature.Shape as IPolygon); IGeometry clipGeometry = ArcGisUtils.GeometryClip(pl2, ArcGisUtils.ScaleEnvelope(envelope, 1.2)); jzx.Polyline = clipGeometry as IPolyline; jzxs.Add(jzx); inter.SelfJZX = jzx; otherJTSYQS.Add(inter); } jtsyq.JZXS = jzxs; } //移除重复的地块 int count = otherJTSYQS.Count; /* for (int a =0; a < count; a++) * { * JTSYQ j1 = otherJTSYQS[a]; * * for (int b= a+1; b < count;b++) * { * JTSYQ j2 = otherJTSYQS[b]; * if(j1.OBJECTID == j2.OBJECTID) * { * otherJTSYQS.RemoveAt(b); * b--; * count--; * } * } * * }*/ //移除被大地块所包含的 for (int a = 0; a < count; a++) { JTSYQ j1 = otherJTSYQS[a]; IList <IFeature> containsFeature = ArcGisUtils.GetSeartchFeatures(JTSYQCustom.GetLayer(), ArcGisUtils.ScaleEnvelope(j1.Feature.Shape.Envelope, 0.9), esriSpatialRelEnum.esriSpatialRelContains); IList <JTSYQ> containsJTSYQS = JTSYQCustom.FeaturesToJTSYQ(containsFeature); if (containsJTSYQS != null) { for (int c = 0; c < containsJTSYQS.Count; c++) { for (int b = 0; b < count; b++) { if (a == b) { //除自己 continue; } JTSYQ j2 = otherJTSYQS[b]; if (containsJTSYQS[c].OBJECTID == j2.OBJECTID) { otherJTSYQS.RemoveAt(b); b--; count--; } } } } } List <JZX> lastJZXS = new List <JZX>(); foreach (JTSYQ jtsyq in otherJTSYQS) { lastJZXS.Add(jtsyq.SelfJZX); } //groupJTSYQ.JZXS = lastJZXS; return(lastJZXS); }