📄 roadhandle.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 + -