岩心数字化管理系统系列(四)岩心可视化

岩心三维图综合管理模块实现了岩心图册展示、综合图文显示及三维综合显示功能,如下图所示:

 1.岩心图像图册展示功能

 选择井号和筒次,单击查询按钮:

上图为图册功能实际效果图。岩心图文数据通过井号和筒次查询后图册化显示,暂缺数据以空白代替。以“可见图即可得数据信息”的理念,系统实现了点击查看数据功能,即点击岩心图片,鼠标点击处即会显示红线以标示位置,同时弹出数据显示框,显示信息包括井号、筒次、岩心编号、起始深度、终止深度、当前深度、图像长度、层位。

核心功能局部图:

核心代码:

 <td ><a href="#"  style="cursor:hand" ><img id="<%=picNum%>"  st = "<%=Double.parseDouble(oilList.get(picNum).get("ISTARTDEPTH").toString()) %>"  len = "<%=Double.parseDouble(oilList.get(picNum).get("ILENGTH").toString()) %>"  mytitle="井号:<%=oilList.get(picNum).get("WELLNUMBER").toString() %>&#10;筒次:<%=oilList.get(picNum).get("CORENUMBER") %>&#10;岩心编号:<%=oilList.get(picNum).get("CORECOD").toString() %>&#10;起始深度:<%=Double.parseDouble(oilList.get(picNum).get("ISTARTDEPTH").toString()) %>m&#10;终止深度:<%=Double.parseDouble(oilList.get(picNum).get("IENDDEPTH").toString()) %>m&#10" mytitle1 = "m&#10图像长度:<%=Double.parseDouble(oilList.get(picNum).get("ILENGTH").toString()) %>m&#10;层位:<%=oilList.get(picNum).get("POSITION").toString() %>" border="0" src="load.jsp?path=<%=oilList.get(picNum).get("SECTIONPATH").toString()%>&name=<%=oilList.get(picNum).get("SECTIONNAME").toString()%>" onclick = "dodraw()" class="mod4" height="230px" width="100px"  /></a></td>

function dodraw(e){
                   var eve = e || window.event;
        var x = eve.clientX, // 相对于客户端的X坐标
        y = eve.clientY, // 相对于客户端的Y坐标
        x1 = eve.screenX, // 相对于计算机屏幕的X坐标
        y1 = eve.screenY; // 相对于计算机屏幕的Y坐标
        var tid = eve.srcElement.id;
        
        var elemet = document.getElementById(tid);
         var objTop = elemet.getBoundingClientRect().top;//对象x位置
         var objLeft = elemet.getBoundingClientRect().left;//对象y位置
        //计算点击的相对位置
         var objX = eve.clientX - objLeft;
         var objY = eve.clientY - objTop;
         var clickObjPosition = objTop + "," + objLeft;       
         var startlen = elemet.st;        
         var nowl = (elemet.len *1 /228 *objX + startlen*1).toFixed(3);          
        document.getElementById("myDiv").innerText = elemet.mytitle + "当前深度:" + nowl  + elemet.mytitle1;        
        var o=$("#myDiv");       
        o.css({
            position:"absolute",
            top:eve.clientY + document.body.scrollTop + 50+"px",
            left:eve.clientX+ 50+"px"
        })

2.岩心数据综合显示

选择井号和筒次,单击查询按钮:

岩心数据综合显示将岩心图片的层位、深度、图像和描述信息综合排列显示,整体显示,方便了数据管理及浏览。

核心代码如下:

 // List<Map<String, String>> list  =  oilDao.getCoreImageLists();
         Map<String, String> map4=oilList.get(0);
         double st1 = Double.parseDouble(map4.get("ISTARTDEPTH"));
         int pNUM = oilList.size();//图片总数
     double  startLine[];//进尺起始位置
        startLine = new double [pNUM];   
     double  endLine[];//进尺结束位置
        endLine = new double [pNUM];       
         numC = 100;
        double  deepTh[];//进尺深度  决定图片高度
        deepTh = new double [pNUM];       
         double  tdNum[];//进尺深度  决定图片高度
        tdNum = new double [pNUM + 50];       
        String  imgWBM[];//图片列表
        imgWBM = new String[pNUM +50];
        String  imgZQM[];//图片列表
        imgZQM = new String[pNUM +50];
        String  imgBH[];//图片列表
        imgBH= new String[pNUM +50];
        String  imgWBMID[];//图片ID
        imgWBMID = new String[pNUM +50];
        pcount = 0;
        tablecount = 0;
        piccount = 0;
        tempn = 0;
        

       for (Map<String, String> map : oilList) {      
            startLine[pcount] = Double.parseDouble(map.get("ISTARTDEPTH"));
            endLine[pcount]   = Double.parseDouble(map.get("IENDDEPTH"));           
            deepTh[pcount]    = Math.round((endLine[pcount] - startLine[pcount])*numC);           
          if(pcount != 0 && startLine[pcount]!=endLine[tempn])
            {
              if((pcount+1)%2 == 0)
              {
               tdNum[tablecount] = Math.round((startLine[pcount] - endLine[tempn])*500 );
               imgWBM[piccount]   = "未衔接处";
               piccount++;
               tablecount++;              
              }
             else
             {
              tdNum[tablecount] =  Math.round((startLine[pcount] - endLine[tempn])*500 );
              imgWBM[piccount]   = "未衔接处";
              tablecount++;
              piccount++;        

             }
            }
           if((pcount+1)%2 == 0)
              {
               tdNum[tablecount] = Math.round(deepTh[pcount]*5);
              }
              else
              {
               tdNum[tablecount] = Math.round(deepTh[pcount]*5);
              }           
          imgWBM[piccount]   = map.get("SURFACENAME");
          imgZQM[piccount]   = map.get("SECTIONNAME");
          imgWBMID[piccount]=map.get("COREIMAGEID");           
             tempn = pcount;
             pcount++;
             tablecount++;
             piccount++;
            }
 %>
 <%
     if(oilList!=null){
      Map<String, String> mm=oilList.get(0);
 %>

3.岩心三维综合显示

选择井号和筒次,单击查询按钮:

岩心三维综合显示将岩心深度、图像及岩心描述信息进行综合显示。点击左侧岩心图像,则中部三维浏览区域将以柱状来三维展示岩心图片;同时右侧岩心资料区域显示本图片的岩心资料数据。本系统通过三维技术完美展示了岩心柱状形态(三维显示具备岩心柱体自转、鼠标随动、半径缩放和整体缩放)。

核心代码如下:

<script type="text/javascript">
        var jsReady = false;
   function refreshWell(){              
              var wellId = $("#wellId").attr("value");           
                if(wellId != '')
                {
                    $.post("../cylinder/jquery.jsp?coreNumber=<%=coreNumber%>", {Action:"post",wellId:wellId}, function(data, textStatus){               
                        var coreNumber = $("#coreNumber");
                        coreNumber.empty();
                        coreNumber.append(data);                   
                    });
                }
            }
      function refreshCoreNumber(){             
              var wellId = $("#wellId").attr("value");    
                        if(wellId != '')
                        {
                            $.post("../cylinder/jquery.jsp", {Action:"post",wellId:wellId}, function(data, textStatus){
                        
                                var coreNumber = $("#coreNumber");
                                coreNumber.empty();
                                coreNumber.append(data);                           
                            });
                        }     
      }
    function query(){           
                var wellId = document.form1.wellId;
                if(wellId.value==null||wellId.value==""){
                    alert("请选择井号!");
                    wellId.focus();
                    return false;
                }
                var coreNumber = document.form1.coreNumber;
                if(coreNumber.value==null||coreNumber.value==""){
                    alert("请选择筒次!");
                    coreNumber.focus();
                    return false;
                }
                document.form1.submit();               
            }
     function isReady() {
         return jsReady;
     }
     function pageInit(id,url) {
         jsReady = true;
         sendToActionScript(url);
         var wellId = $("#wellId").attr("value");
         var coreNumber = $("#coreNumber").attr("value");
         var imageId = id;
         $.post("loaddes.jsp", {Action:"post",wellId:wellId,coreNumber:coreNumber,imageId:imageId}, function(data, textStatus){               
                $('#show').html(data);                    
            });
     }
     function thisMovie(movieName) {
         if (navigator.appName.indexOf("Microsoft") != -1) {
             return window[movieName];
         } else {
             return document[movieName];
         }
     }
     function sendToActionScript(value) {
         thisMovie("ExternalInterfaceExample").sendToActionScript(value);
     }
     function sendToJavaScript(value) {
         document.forms["form1"].output.value += "ActionScript says: " + value + "\n";
     }       
        function testLine() {
        line(1, 2, 88, 88, document.getElementById(container));
        }  
       
    function line(startX, startY, endX, endY, container) {
    if (startX == endX) {
        if (startY > endY) {
            var tempY = startY;
            startY = endY;
            endY = tempY;
        }
        for (var k = startY; k < endY; k++) {
            createPoint(container, startX, k);
        }
    }
    // y = ax + b
    var a = (startY - endY) / (startX - endX);
    var b = startY - ((startY - endY) / (startX - endX)) * startX;
    if (Math.abs(startX - endX) > Math.abs(startY - endY)) {
        if (startX > endX) {
            var tempX = endX;
            endX = startX;
            startX = tempX;
        }
        var left = container.style.left;
        var top = container.style.top;
        for (var i = startX; i <= endX; i++) {
            createPoint(container, i, a * i + b);
        }
    } else {
        if (startY > endY) {
            var tempY = startY;
            startY = endY;
            endY = tempY;
        }
        for (var j = startY; j <= endY; j++) {
            createPoint(container, (j - b) / a, j);
        }
    }     


function createPoint(container, x, y) {
    var node = document.createElement(div);
    node.className = line;
    node.style.marginTop = y;
    node.style.marginLeft = x;
    container.appendChild(node);
}  
        </script>

猜你喜欢

转载自www.cnblogs.com/redsnail/p/12308196.html
今日推荐