Beispiel #1
0
        }//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 静态井位
Beispiel #2
0
        }//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 静态井位
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
        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()));
        }
Beispiel #5
0
        //创建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 静态井位
Beispiel #6
0
 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;
 }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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());
        }
Beispiel #9
0
        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);
        }