}//end 静态井位 //从layer文件夹下提取动态井位 static public void creatLayerDataDynamicWellPosition(string sLayer, string sYMSelect, string sDir) { string fileName = Path.Combine(sDir, "dynWellPosion.lay"); StreamWriter sw = new StreamWriter(fileName, false, Encoding.UTF8); List <ItemDicLayerDataStatic> listLayerDataSelected = cIODicLayerDataStatic.readDicLayerData2struct().FindAll(p => p.sXCM == sLayer); List <string> ltStrJHinjCurrentYM = cIOInputWellInject.getJHInjByYM(sYMSelect); List <string> ltStrJHproCurrentYM = cIOinputWellProduct.getJHProductByYM(sYMSelect); if (listLayerDataSelected.Count > 0) { foreach (ItemDicLayerDataStatic item in listLayerDataSelected) { //由于可能计算小层数据表后又对井做修改 所以 必须判断小层数据表的井是否在项目井范围内 if (cProjectData.ltStrProjectJH.IndexOf(item.sJH) >= 0) { ItemWellMapPosition wellMapLayer = new ItemWellMapPosition(item); if (ltStrJHinjCurrentYM.IndexOf(item.sJH) >= 0) { wellMapLayer.iWellType = (int)TypeWell.Injectwater; } if (ltStrJHproCurrentYM.IndexOf(item.sJH) >= 0) { wellMapLayer.iWellType = (int)TypeWell.Oil; } sw.WriteLine(ItemWellMapPosition.item2string(wellMapLayer)); } } } sw.Close(); }//end 静态井位
}//end 静态井位 static public List <ItemWellMapPosition> getLayerDataGeoWellPosition(string sLayer, string sDir) { List <ItemWellMapPosition> ltStrReturn = new List <ItemWellMapPosition>(); string fileName = Path.Combine(sDir, "geoWellPosion.lay"); int iLineIndex = 0; if (File.Exists(fileName)) { using (StreamReader sr = new StreamReader(cProjectManager.filePathLayerDataDic)) { String line; while ((line = sr.ReadLine()) != null) //delete the line whose legth is 0 { iLineIndex++; if (iLineIndex > 1) { ltStrReturn.Add(ItemWellMapPosition.parseLine(line)); } } } } else { MessageBox.Show(fileName + "不存在"); } return(ltStrReturn); }//end 静态井位
private void cbxAddHorizonWell_CheckedChanged(object sender, EventArgs e) { if (cbxAddHorizonWell.Checked == true) { List <string> llistHorizinalJH = new List <string>(); foreach (object selecteditem in lbxJHSeclected.Items) { string strItem = selecteditem as String; llistHorizinalJH.Add(strItem); } //add svg文件中水平井段 if (File.Exists(filePathOperate)) { cXMLLayerMapHorizonalWell.delHorizonalWellIntervalNode(this.filePathOperate); List <string> _ltStrData = new List <string>(); foreach (string _sjh in llistHorizinalJH) { List <ItemDicWellPath> currentWellPath = cIOinputWellPath.readWellPath2Struct(_sjh); //井必须在project井范围内 if (cProjectData.ltStrProjectJH.IndexOf(_sjh) >= 0) { ItemDicWellPath top = currentWellPath.Find(x => x.f_incl > 80); ItemDicWellPath tail = currentWellPath.FindLast(x => x.f_incl > 80); // 井号+ 井型 + 井口view坐标 + head view 坐标 + tail view 坐标 // ItemWellMapPosition item = this.listWellsStatic.Find(x => x.sJH == _sjh); ItemWellMapPosition item = new ItemWellMapPosition(); if (item != null && top.sJH != null && tail.sJH != null) { _ltStrData.Add(_sjh); _ltStrData.Add(item.iWellType.ToString()); _ltStrData.Add(item.dbX.ToString()); _ltStrData.Add(item.dbY.ToString()); _ltStrData.Add(top.dbX.ToString()); _ltStrData.Add(top.dbY.ToString()); _ltStrData.Add(tail.dbX.ToString()); _ltStrData.Add(tail.dbY.ToString()); } } }//end foreach string _data = string.Join(" ", _ltStrData); cXMLLayerMapHorizonalWell.addLayerWellHorizonalInterval2XML(this.filePathOperate, "horizonalWellInterval", _data); } else { MessageBox.Show("请先创建原始图件。"); } } else { //删除水平井段 cXMLLayerMapHorizonalWell.delHorizonalWellIntervalNode(this.filePathOperate); } }
public static string item2string(ItemWellMapPosition item) { List <string> ltStrWrited = new List <string>(); ltStrWrited.Add(item.sJH); ltStrWrited.Add(item.sXCM); ltStrWrited.Add(item.dbX.ToString()); ltStrWrited.Add(item.dbY.ToString()); ltStrWrited.Add(item.iWellType.ToString()); return(string.Join("\t", ltStrWrited.ToArray())); }
//创建geo文件 首行写 layer类型 layerID //从layer文件夹下的小层数据表提取绘制静态井位的cqhk数据文件 static public void creatLayerDataGeoWellPosition(string sLayer, string sDir) { string fileName = Path.Combine(sDir, "geoWellPosion.lay"); StreamWriter sw = new StreamWriter(fileName, false, Encoding.UTF8); List <ItemDicLayerDataStatic> listLayerDataSelected = cIODicLayerDataStatic.readDicLayerData2struct().FindAll(p => p.sXCM == sLayer); foreach (ItemDicLayerDataStatic item in listLayerDataSelected) { //由于可能计算小层数据表后又对井做修改 所以 必须判断小层数据表的井是否在项目井范围内 if (cProjectData.ltStrProjectJH.IndexOf(item.sJH) >= 0) { ItemWellMapPosition wellMapLayer = new ItemWellMapPosition(item); sw.WriteLine(ItemWellMapPosition.item2string(wellMapLayer)); } } sw.Close(); }//end 静态井位
private void btnMakeLayerMap_Click(object sender, EventArgs e) { //用静态数据表,更新静态井位列表 //静态、动态小层数据分别在tab面板更新。 listWellsStatic.Clear(); if (listLayersDataCurrentLayerStatic.Count > 0) { foreach (ItemDicLayerDataStatic item in listLayersDataCurrentLayerStatic) { //由于可能计算小层数据表后又对井做修改 所以 必须判断小层数据表的井是否在项目井范围内 if (cProjectData.ltStrProjectJH.IndexOf(item.sJH) >= 0) { ItemWellMapPosition wellMapLayer = new ItemWellMapPosition(item); listWellsStatic.Add(wellMapLayer); } } } addLayerBase2XML(listWellsStatic); generateSVGfilemapByConfigxml(); this.tbcLayerMap.SelectedTab = this.tbgSVGLayer; }
public static ItemWellMapPosition parseLine(string line) { string[] split = line.Trim().Split(new char[] { ' ', '\t', ',' }, StringSplitOptions.RemoveEmptyEntries); ItemWellMapPosition item = new ItemWellMapPosition(); if (split.Count() >= 5) { item.sJH = split[0]; item.sXCM = split[1]; item.dbX = 0.0; double.TryParse(split[2], out item.dbX); item.dbY = 0.0; double.TryParse(split[3], out item.dbY); item.dbZ = 0.0; double.TryParse(split[4], out item.dbZ); item.dbTop = 0.0; double.TryParse(split[11], out item.dbTop); item.dbBot = 0.0; double.TryParse(split[12], out item.dbBot); } return(item); }
private void btnSelectWorkWells_Click(object sender, EventArgs e) { if (rdbALLayer.Checked == true) { listLayersDataCurrentLayerDynamic = cIODicLayerDataDynamic.readDicLayerData2struct(sSelectYM, cProjectData.sAllLayer); } else { listLayersDataCurrentLayerDynamic = cIODicLayerDataDynamic.readDicLayerData2struct(sSelectYM, sSelectLayer); } //增加当前动态字典数据 cXMLLayerMapDynamic.addWellDynamicDataDic2XML(filePathOperate, sSelectYM, sSelectLayer, listLayersDataCurrentLayerDynamic); List <ItemWellMapPosition> listWellsDynamic = new List <ItemWellMapPosition>(); foreach (ItemDicLayerDataDynamic itemDynamicLayerData in listLayersDataCurrentLayerDynamic) { ItemWellMapPosition itemWellDynamic = new ItemWellMapPosition(); if (itemDynamicLayerData.iWellType != 0) //remove well not work { itemWellDynamic.sJH = itemDynamicLayerData.sJH; itemWellDynamic.sXCM = sSelectLayer; //here use globe sSelectLayer because user may select ALLLayerData ItemDicLayerDataStatic itemStaitic = listLayersDataCurrentLayerStatic.Find(p => p.sJH == itemWellDynamic.sJH && p.sXCM == sSelectLayer); itemWellDynamic.dbX = itemStaitic.dbX; itemWellDynamic.dbY = itemStaitic.dbY; itemWellDynamic.iWellType = itemDynamicLayerData.iWellType; listWellsDynamic.Add(itemWellDynamic); } } ////增加当前生产井井位图层 //cXMLLayerMapStatic.addLayerWellPosition2XML(filePathOperate, sSelectLayer + "_" + sSelectYM, listWellsDynamic); ////增加日产日注分析 //if (listLayersDataCurrentLayerDynamic.Count > 0) // cPublicMethodForm.setListBoxwithltStr(lbxSelectDynamicJH, listWellsDynamic.Select(p => p.sJH).ToList()); }
public static string generateLayerMap(string filePathLayerOperate, string sCurrentLayer) { //注意偏移量,偏移主要是为了好看 如果不偏移的话 就会绘到角落上,这时的偏移是整个偏移 后面的不用偏移了,相对偏移0,0 //svg文件和XML对应的问题还要思考一下 string dirPathLayer = Path.Combine(cProjectManager.dirPathLayerDir, sCurrentLayer); string filePathSVGLayerMap = Path.Combine(dirPathLayer, Path.GetFileNameWithoutExtension(filePathLayerOperate) + ".svg"); //这块需要处理覆盖问题。 if (File.Exists(filePathSVGLayerMap)) { File.Delete(filePathSVGLayerMap); } //解析当前的XML配置文件,根据每个Layer标签的LayerType生成id为层名的图层,添加到svgLayer中去 XmlDocument xmlLayerMap = new XmlDocument(); xmlLayerMap.Load(filePathLayerOperate); //获取基本的页面信息及基础配置文件信息 //获取井位List XmlNodeList xnWellDataList = xmlLayerMap.SelectNodes("/LayerMapConfig/DataDicStatic/data/item"); List <ItemWellMapPosition> listWellLayerMap = new List <ItemWellMapPosition>(); foreach (XmlNode xn in xnWellDataList) { ItemWellMapPosition item = ItemWellMapPosition.parseLine(xn.Attributes["LayerDataDicText"].Value); listWellLayerMap.Add(item); } //根据配置文件,读取页面基本配置信息 cXELayerPage curPage = new cXELayerPage(xmlLayerMap); int idx = 200; int idy = 200; int PageWidth = curPage.iPageWidth; int PageHeight = curPage.iPageHeight; string sUnit = "mm"; cSVGDocLayerMap svgLayerMap = new cSVGDocLayerMap(PageWidth, PageHeight, idx, idy, sUnit); //add title string sTitle = Path.GetFileNameWithoutExtension(filePathLayerOperate); svgLayerMap.addMapTitle(sTitle, PageWidth / 2, 20); XmlElement returnElemment; cXEWellCss wellCss = new cXEWellCss(xmlLayerMap); //从配置文件中 读取图层列表,根据配置绘制图层 XmlNode xnLayerList = xmlLayerMap.SelectSingleNode("/LayerMapConfig/LayerList"); //或许Layer标签的节点 foreach (XmlNode xn in xnLayerList.ChildNodes) { string sIDLayer = xn.Attributes["id"].Value; string sLayerType = xn.Attributes["layerType"].Value; string sLayerVisible = xn["visible"].InnerText; //建立新层 XmlElement gNewLayer = svgLayerMap.gLayerElement(sIDLayer); svgLayerMap.addgLayer(gNewLayer, idx, idy); #region 测井曲线图层 if (sLayerVisible == "1" && sLayerType == TypeLayer.LayerLog.ToString()) { LayerDataLog layerDataLog = new LayerDataLog(xn); foreach (ItemWellMapPosition itemWell in listWellLayerMap) { Point PViewWell = cCordinationTransform.transRealPointF2ViewPoint(itemWell.dbX, itemWell.dbY, curPage.xRef, curPage.yRef, curPage.dfscale); returnElemment = cXMLLayerMapWellLog.gLayerWellLog(svgLayerMap, itemWell, layerDataLog); //新层加内容 int xViewStart = PViewWell.X; int yViewStart = PViewWell.Y; //如果左值小于右值,就把曲线坐班绘制 if (layerDataLog.iLeftDraw == 1) { xViewStart = xViewStart - layerDataLog.iTrackWidth; } svgLayerMap.addgElement2Layer(gNewLayer, returnElemment, xViewStart, yViewStart); } } #endregion #region 小层SectionLayer图层。 if (sLayerVisible == "1" && sLayerType == TypeLayer.LayerSection.ToString()) { //建立新层 XmlElement gWellLayer = svgLayerMap.gLayerElement("LayerSection"); svgLayerMap.addgLayer(gWellLayer, 0, 0); for (int i = 0; i < listWellLayerMap.Count; i++) { string sCurJH = listWellLayerMap[i].sJH; string sCurXCM = listWellLayerMap[i].sXCM; string dirLayerJH = Path.Combine(cProjectManager.dirPathLayerDir, sCurXCM, sCurJH); string filePathSecitonTemplatOper = Path.Combine(dirLayerJH, sCurJH + "_" + sCurXCM + ".xml"); string filePathSecitonLayerSectionSVG = Path.Combine(dirLayerJH, sCurJH + "_" + sCurXCM + ".svg"); //斜井模式 double fVscaleLayerSection = 50; makeWellLayerSectionGraph(filePathSecitonTemplatOper, listWellLayerMap[i].dbTop, listWellLayerMap[i].dbBot, fVscaleLayerSection); Point PViewWell = cCordinationTransform.transRealPointF2ViewPoint(listWellLayerMap[i].dbX, listWellLayerMap[i].dbY, curPage.xRef, curPage.yRef, curPage.dfscale); //新层加内容 int xViewStart = PViewWell.X; int yViewStart = PViewWell.Y; //这块应该改成相对路径 string pathLayerSectionRelative = Path.Combine(sCurJH, sCurJH + "_" + sCurXCM + ".svg"); if (File.Exists(filePathSecitonLayerSectionSVG)) { svgLayerMap.addgSVG2Layer(gNewLayer, filePathSecitonLayerSectionSVG, xViewStart, yViewStart); } } } #endregion #region 断层图层。 if (sLayerVisible == "1" && sLayerType == TypeLayer.LayerFaultLine.ToString()) { XmlNode dataLine = xn.SelectSingleNode("dataList"); if (dataLine != null) { XmlNodeList dataItem = dataLine.SelectNodes("dataItem"); foreach (XmlNode faultItem in dataItem) { ItemFaultLine curItemdata = new ItemFaultLine(faultItem); List <Point> listPointView = new List <Point>(); foreach (PointD pd in curItemdata.ltPoints) { Point PViewWell = cCordinationTransform.transRealPointF2ViewPoint(pd.X, pd.Y, curPage.xRef, curPage.yRef, curPage.dfscale); listPointView.Add(PViewWell); } returnElemment = cXMLLayerMapStatic.gFault(svgLayerMap, curItemdata, listPointView); //新层加内容 svgLayerMap.addgElement2Layer(gNewLayer, returnElemment); } } } #endregion #region 井位图层。 if (sLayerVisible == "1" && sLayerType == TypeLayer.LayerWellPosition.ToString()) { XmlNode dataList = xn.SelectSingleNode("dataList"); if (dataList != null) { XmlNodeList dataItem = dataList.SelectNodes("dataItem"); foreach (XmlNode xnWell in dataItem) { ItemLayerWellPattern itemWell = new ItemLayerWellPattern(xnWell); Point PViewWell = cCordinationTransform.transRealPointF2ViewPoint(itemWell.X, itemWell.Y, curPage.xRef, curPage.yRef, curPage.dfscale); returnElemment = cXMLLayerMapStatic.gWellPattern(svgLayerMap, itemWell, 10, 5, 5, 5, 5); //新层加内容 svgLayerMap.addgElement2Layer(gNewLayer, returnElemment, PViewWell.X, PViewWell.Y); } } } #endregion #region 井位饼图图层 if (sLayerType == TypeLayer.LayerPieGraph.ToString()) { returnElemment = cXMLLayerMapWellPieGraph.gWellPieGraphFromXML(svgLayerMap.svgDoc, xn, sIDLayer, listWellLayerMap, curPage); //新层加内容 svgLayerMap.addgElement2Layer(gNewLayer, returnElemment); } #endregion //由于井位图是底图,造成被压在最下面一层。这个问题要解决一下。 returnElemment = cSVGLayerWellPosition.gWellsPosition(xmlLayerMap, listWellLayerMap, "井位", wellCss, curPage); svgLayerMap.addgElement2BaseLayer(returnElemment); #region 比例尺 if (curPage.iShowScaleRuler == 1) { XmlElement gLayerScaleRuler = svgLayerMap.gLayerElement("比例尺"); svgLayerMap.addgLayer(gLayerScaleRuler, svgLayerMap.offsetX_gSVG, svgLayerMap.offsetY_gSVG); returnElemment = svgLayerMap.gScaleRuler(0, 0, curPage.dfscale); svgLayerMap.addgElement2Layer(gLayerScaleRuler, returnElemment, 100, 100); } #endregion #region 页面网格及标志 if (curPage.iShowMapFrame == 1) { returnElemment = svgLayerMap.gMapFrame(curPage); svgLayerMap.addgElement2BaseLayer(returnElemment); } #endregion #region 指南针 if (curPage.iShowCompass == 1) { XmlElement gLayerCompass = svgLayerMap.gLayerElement("指南针"); svgLayerMap.addgLayer(gLayerCompass, svgLayerMap.offsetX_gSVG, svgLayerMap.offsetY_gSVG); svgLayerMap.addgElement2Layer(gLayerCompass, svgLayerMap.gCompass(300, 100)); } #endregion } //end of 所有图层的绘制 svgLayerMap.makeSVGfile(filePathSVGLayerMap); return(filePathSVGLayerMap); }