⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 roadhandle.java

📁 一个很有特点的地图平台,可以以动画方试展现电子地图,有拉近,拉远,滑动功能,最主要的是它是一个地图维护台,处理地图到数据库的数据导入
💻 JAVA
字号:
package mapcenter.weihu;

import java.sql.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import mapcenter.service.*;
import com.mapinfo.mapj.*;
import com.mapinfo.util.*;
import com.mapinfo.dp.*;
import com.mapinfo.dp.util.*;
import com.mapinfo.unit.*;

public class RoadHandle extends Thread implements ActionListener{
  private static final Log log = LogFactory.getLog("WebGIS");
  private JProgressBar progBar;
  private JLabel progLabel;
  private MapJ myMap;

  public RoadHandle(MapHandle mapHandle)throws Exception{
    this.myMap = mapHandle.getMapJ();
  }

  public void initRoad(){
    Connection conn = null;
    try{
      FeatureLayer roadLayer = myMap.getLayers().getLayer("街道图层");
      TableInfo tabInfo = roadLayer.getTableInfo();
      List columnNames = new ArrayList();
      columnNames.add("名称");
      FeatureSet featureSet = roadLayer.searchAll(columnNames,QueryParams.ALL_PARAMS);

      conn = ConnDBFactory.getInstance().getConnection();
      progLabel.setText("正在删除路段表数据......");
      progBar.setValue(50);
      progBar.setString("50%");
      this.clearRoadInfo(conn);//首先清除节点表和弧段表数据
      PreparedStatement nodeStmt = conn.prepareStatement("Insert Into net_node_list(centerx,centery,nodeid) Values(?,?,?)");
      PreparedStatement arcStmt = conn.prepareStatement("Insert Into net_arc_list(from_node,to_node,lenght,power,state,name) Values(?,?,?,?,?,?)");
      double fromNode, toNode, nodeStep = 0;
      Feature feature = null;
      RewindableFeatureSet rwFeatureSet = new RewindableFeatureSet(featureSet);
      double featureCount = 0;
      log.debug(String.valueOf(new java.util.Date().getTime()));
      while(rwFeatureSet.getNextFeature() != null){
        featureCount++;
      }
      log.debug(String.valueOf(new java.util.Date().getTime()));
      log.debug("图元总数"+String.valueOf(featureCount));
      rwFeatureSet.rewind();
      int position = 0;
      for(int i=0; i<featureCount; i++){
        progLabel.setText("正在生成路段表数据......");
        feature = rwFeatureSet.getNextFeature();
        double[] points = new double[4];
        Geometry geom = feature.getGeometry();
        if(geom.getType() != Geometry.TYPE_LINE)continue;
        PointList pointList = ((VectorGeometry)geom).getNextPointList();
        pointList.getNextPoints(points, 0, 2);
        String x1 = String.valueOf(points[0]);
        String y1 = String.valueOf(points[1]);
        String x2 = String.valueOf(points[2]);
        String y2 = String.valueOf(points[3]);

        Statement stmt = conn.createStatement();
        ResultSet rs1 = stmt.executeQuery("Select nodeid from net_node_list where centerx = '"+x1+"' and centery = '"+y1+"'");
        if(rs1.next() == false){
          nodeStmt.setString(1,x1);
          nodeStmt.setString(2,y1);
          nodeStmt.setDouble(3,nodeStep);
          nodeStmt.executeUpdate();
          fromNode = nodeStep;nodeStep++;
        }else{
          fromNode = rs1.getInt("nodeid");
        }//结束输入第一个点
        ResultSet rs2 = stmt.executeQuery("Select nodeid from net_node_list where centerx = '"+x2+"' and centery = '"+y2+"'");
        if(rs2.next() == false){
          nodeStmt.setString(1,x2);
          nodeStmt.setString(2,y2);
          nodeStmt.setDouble(3,nodeStep);
          nodeStmt.executeUpdate();
          toNode = nodeStep;nodeStep++;
        }else{
          toNode = rs2.getInt("nodeid");
        }//结束输入第二个点
        double lenght = GeometryUtils.length(geom,LinearUnit.kilometer);
        String name = "";
        try{feature.getAttribute(tabInfo.getColumnIndex("名称")).getString();}catch(Exception ee){}
        ResultSet rs3 = stmt.executeQuery("select * from net_arc_list where from_node = '"+String.valueOf(fromNode)+"' and to_node = '"+String.valueOf(toNode)+"'");
        if(rs3.next() == false){
          arcStmt.setDouble(1,fromNode);
          arcStmt.setDouble(2,toNode);
          arcStmt.setDouble(3,lenght);
          arcStmt.setDouble(4,lenght);
          arcStmt.setString(5,"通行");
          arcStmt.setString(6,name);
          arcStmt.executeUpdate();

          arcStmt.setDouble(1,toNode);
          arcStmt.setDouble(2,fromNode);
          arcStmt.setDouble(3,lenght);
          arcStmt.setDouble(4,lenght);
          arcStmt.setString(5,"通行");
          arcStmt.setString(6,name);
          arcStmt.executeUpdate();
        }
        rs1.close();rs2.close();rs3.close();stmt.close();
        int pocent = (int)Math.floor(i/featureCount*100);
        if(pocent > position){
          position = pocent;
          progBar.setValue(position);
          progBar.setString(String.valueOf(position)+"%");
        }
      }
      nodeStmt.close();
      arcStmt.close();
      log.debug(String.valueOf(new java.util.Date().getTime()));
    }catch(Exception e){
      log.error(e);
    }finally{
      try{conn.close();}catch(Exception ee){}
    }
  }
  //================= 清除路段信息数据 =================
  private void clearRoadInfo(Connection conn)throws Exception{
    Statement stmt = conn.createStatement();
    stmt.executeUpdate("delete from net_node_list");
    stmt.executeUpdate("delete from net_arc_list");
    stmt.close();
  }

  public void actionPerformed(ActionEvent parm1){
    JButton runButton = (JButton)parm1.getSource();
    this.progLabel = (JLabel)runButton.getClientProperty("Label");
    this.progBar = (JProgressBar)runButton.getClientProperty("jprog");
    this.start();
  }

  public void run(){
    try{
      this.initRoad();
    }catch(Exception e){log.error(e);}
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -