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

📄 itemvalue.java

📁 基于Java的地图数据管理软件。使用MySQL数据库管理系统。
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    Node[] thisWpt = null;
    if (types == null) {
      return null;
    }
    Node[] waypoint = ItemValue.getWaypoint();
    for (int i = 0; i < waypoint.length; i++) {
      String type = ItemValue.getWaypointKP(waypoint[i]);

      if (types.indexOf(type) > -1) {
        //ItemValue.setWaypointKP(waypoint[i],WptType.W1XingZhengCun);
        ve.add(waypoint[i]);
      }
    }
    if (ve.size() > 0) {
      thisWpt = new Node[ve.size()];
      for (int i = 0; i < ve.size(); i++) {
        thisWpt[i] = (Node) ve.elementAt(i);
      }
    }
    return thisWpt;
  }

  public static void deleteTracksPoint(Node tracksNode, int item) {
    tracksNode.getChildNodes().item(30).removeChild(getTracksPoint(tracksNode).
        item(item));
  }

  public static void deleteTracksPoint(Node tracksNode, Node point) {
    tracksNode.getChildNodes().item(30).removeChild(point);
  }

  public static void deleteTracksAllPoint(Node tracksNode) {
    NodeList nl = tracksNode.getChildNodes().item(30).getChildNodes();
    for (int i = 0; i < nl.getLength(); i++) {
      deleteTracksPoint(tracksNode, nl.item(i));
    }
  }

  public static void appendTracksPoint(Node tracksNode, Node point) {
    tracksNode.getChildNodes().item(30).appendChild(point);
  }

  public static String getTracksPointX(Node tracksPointNode) {
    return tracksPointNode.getChildNodes().item(0).getChildNodes().item(0).
        getNodeValue();
  }

  public static String getTracksPointY(Node tracksPointNode) {
    return tracksPointNode.getChildNodes().item(1).getChildNodes().item(0).
        getNodeValue();
  }

  public static String getTracksPointZ(Node tracksPointNode) {
    return tracksPointNode.getChildNodes().item(2).getChildNodes().item(0).
        getNodeValue();
  }

  public static String getTracksPointTime(Node tracksPointNode) {
    return tracksPointNode.getChildNodes().item(3).getChildNodes().item(0).
        getNodeValue();
  }

  /**
   * 在 refChild前插入一个航迹点
   * trk为航迹节点
   */
  public static Node appendTrackPoint(Node trk, String sx,
                                      String sy, String sz,String dataTime) {
    Node track_line = ItemValue.getTracks_StringLine(trk);
    return GarminGMLDoc.addXmlTrackPoint( (Element) track_line,
                                         Float.parseFloat(sx),
                                         Float.parseFloat(sy),
                                         Float.parseFloat(sz), dataTime);
  }

  /**
   * 在 refChild前插入一个航迹点
   * trk为航迹节点
   */
  public static Node appendTrackPoint(Node trk, Node trackpoint) {
    Node track_line = ItemValue.getTracks_StringLine(trk);
    return GarminGMLDoc.addXmlTrackPoint( (Element) track_line,
                                         Float.parseFloat(ItemValue.getTracksPointX(trackpoint)),
                                         Float.parseFloat(ItemValue.getTracksPointY(trackpoint)),
                                         Float.parseFloat(ItemValue.getTracksPointZ(trackpoint)), ItemValue.getTracksPointTime(trackpoint));
  }


  /**
   * 在 refChild前插入一个航迹点
   * trk为航迹节点
   */
  public static Node insertNewTrackPoint(Node trk, Node refChild, String sx,
                                         String sy, String sz) {
    return GarminGMLDoc.insertXmlTrackPoint(trk, refChild, Float.parseFloat(sx),
                                            Float.parseFloat(sy),
                                            Float.parseFloat(sz), "");
  }

  public static Node getNewTrackPoint(String sx, String sy, String sz,
                                      String stime) {
    Document d = GarminGMLDoc.getDocument();
    Element c = d.createElement("gml_coord");

    Element x = d.createElement("X");
    Text t = d.createTextNode(sx);
    x.appendChild(t);

    Element y = d.createElement("Y");
    t = d.createTextNode(sy);
    y.appendChild(t);

    Element z = d.createElement("Z");
    t = d.createTextNode(sz);
    z.appendChild(t);

    Element time = d.createElement("Time");
    t = d.createTextNode(stime);
    time.appendChild(t);

    c.appendChild(x);
    c.appendChild(y);
    c.appendChild(z);
    c.appendChild(time);

    return c;

  }

  public static Node getNewWayPoint() {
    Document d = GarminGMLDoc.getDocument();
    Element e = d.createElement("gml_Point");

    Element ename = d.createElement("gml_name");
    Text t = d.createTextNode("");
    ename.appendChild(t);

    e.appendChild(ename);

    Element epos = d.createElement("gml_coord");

    Element ex = d.createElement("X");
    t = d.createTextNode("");
    ex.appendChild(t);

    Element ey = d.createElement("Y");
    t = d.createTextNode("");
    ey.appendChild(t);

    Element ez = d.createElement("Z");
    t = d.createTextNode("");
    ez.appendChild(t);

    Element et = d.createElement("Time");
    t = d.createTextNode("");
    et.appendChild(t);

    Element rs = d.createElement("RS"); //路面变化
    t = d.createTextNode("");
    rs.appendChild(t);

    Element rwa = d.createElement("RWa"); //宽度变化
    t = d.createTextNode("");
    rwa.appendChild(t);

    Element rwb = d.createElement("RWb"); //宽度变化
    t = d.createTextNode("");
    rwb.appendChild(t);

    Element kp = d.createElement("KP"); //关键点
    t = d.createTextNode("");
    kp.appendChild(t);

    Element tracksid = d.createElement("TracksID"); //航迹的ID
    t = d.createTextNode("new" + "");
    tracksid.appendChild(t);

    epos.appendChild(ex);
    epos.appendChild(ey);
    epos.appendChild(ez);
    epos.appendChild(et);
    epos.appendChild(rs);
    epos.appendChild(rwa);
    epos.appendChild(rwb);
    epos.appendChild(kp);
    epos.appendChild(tracksid);
//    epos.appendChild(addElement(t,"gml_xzc",xzc));
//    epos.appendChild(addElement(t,"gml_renkou",renkou));
//    epos.appendChild(addElement(t,"gml_shouru",shouru));
//    epos.appendChild(addElement(t,"gml_jingji",jingji));
//    xzcArray = new String[11];
//    for (int i = 0; i < xzcArray.length; i++) {
//      xzcArray[i] = "子节点" + i;
//    }
//    //行政村
//    Element exzc = d.addElement(t, "gml_jtb_after_xzc", "");
//    if (xzcArray != null) {
//      exzc.appendChild(addXZC(exzc, xzcArray));
//    }
//    //桥梁
//    Element eQiaoliang = addElement(t, "gml_jtb_after_qiaoliang", "");
//    if (qlArray != null) {
//      eQiaoliang.appendChild(addQiaoliang(eQiaoliang, qlArray));
//    }
//    //隧道
//    Element eSuidao = addElement(t, "gml_jtb_after_suidao", "");
//    if (sdArray != null) {
//      eSuidao.appendChild(addSuidao(eSuidao, sdArray));
//    }
//    //渡口
//    Element eDukou = addElement(t, "gml_jtb_after_dukou", "");
//    if (dkArray != null) {
//      eDukou.appendChild(addDukou(eDukou, dkArray));
//    }
//    epos.appendChild(exzc);
//    epos.appendChild(eQiaoliang);
//    epos.appendChild(eSuidao);
//    epos.appendChild(eDukou);
//    e.appendChild(epos);

//    return e;

    return e;

  }

  public static Node turnTracksPointToWaypoint(Node tracksPointNode) {
    String X = getTracksPointX(tracksPointNode);
    String Y = getTracksPointY(tracksPointNode);
    String Z = getTracksPointZ(tracksPointNode);
    String Time = getTracksPointTime(tracksPointNode);
    return GarminGMLDoc.addXmlWaypoint("新转换的航点", Float.parseFloat(X),
                                       Float.parseFloat(Y), Float.parseFloat(Z),
                                       "", "", "", "", "", "", null, null, null, null);
  }

  public static Node createNewWaypoint(String name, String X, String Y,
                                       String Z) {
    return GarminGMLDoc.addXmlWaypoint(name, Float.parseFloat(X),
                                       Float.parseFloat(Y), Float.parseFloat(Z),
                                       "", "", "", "", "", "", null, null, null, null);
  }

  /*
     public static double getTrackPointDistance(Node A,Node B){
    double lata = Double.parseDouble(getTracksPointX(A));
    double lona = Double.parseDouble(getTracksPointY(A));
    double latb = Double.parseDouble(getTracksPointX(B));
    double lonb = Double.parseDouble(getTracksPointY(B));
    double a_2d = 6378137;
    double e_2d = 0.00669438;
    int h_2d = 15;
    double DEG_2_RAD = 0.01745329252;
    double RAD_2_DEG = 57.2957795129;
    double x_rads = Math.abs(lona) * DEG_2_RAD;
    double y_rads = Math.abs(lata) * DEG_2_RAD;
   double n_2ds = a_2d / Math.sqrt(1 - e_2d * Math.sin(y_rads) * Math.sin(y_rads));
    double x_2d = (n_2ds + h_2d) * Math.cos(y_rads) * Math.cos(x_rads);
    double y_2d = (n_2ds + h_2d) * Math.cos(y_rads) * Math.sin(x_rads);
    double z_2d = (n_2ds * (1 - e_2d) + h_2d) * Math.sin(y_rads);
    double x_radm = Math.abs(lonb) * DEG_2_RAD;
    double y_radm = Math.abs(latb) * DEG_2_RAD;
   double n_2dm = a_2d / Math.sqrt(1 - e_2d * Math.sin(y_radm) * Math.sin(y_radm));
    double x_2d_mark = (n_2dm + h_2d) * Math.cos(y_radm) * Math.cos(x_radm);
    double y_2d_mark = (n_2dm + h_2d) * Math.cos(y_radm) * Math.sin(x_radm);
    double z_2d_mark = (n_2dm * (1 - e_2d) + h_2d) * Math.sin(y_radm);
    double curdistance = (x_2d_mark - x_2d) * (x_2d_mark - x_2d) + (y_2d_mark - y_2d) * (y_2d_mark - y_2d) + (z_2d_mark - z_2d) * (z_2d_mark - z_2d);
    curdistance = Math.sqrt(curdistance);

    return curdistance;
     }*/
  public static double getTrackPointDistanceA(Node A, Node B) { //这一段算法是运用书上的公式
    //testPoint++;
    //testPointIncrease();
    double distance = 0.0;
    final double a = 6378137.0, c = 6356752.31420, f = 1 / 298.257;

    //double latA = Double.parseDouble(getTracksPointX(A));//A点纬度
    //double lonA = Double.parseDouble(getTracksPointY(A));//A点经度
    //double latB = Double.parseDouble(getTracksPointX(B));//B点纬度
    //double lonB = Double.parseDouble(getTracksPointY(B));//B点经度
    //test
    double latA = 117.3382115; //A点纬度
    double lonA = 31.7323565; //A点经度
    double latB = 117.33915569; //B点纬度
    double lonB = 31.7330003; //B点经度

    //转换成弧度
    //latA = latA*(2*Math.PI/360);
    //lonA = lonA*(2*Math.PI/360);
    //latB = latB*(2*Math.PI/360);
    //lonB = lonB*(2*Math.PI/360);

    //运用计算公式
    double x1 = a * Math.cos(latA) * Math.cos(lonA);
    double y1 = a * Math.cos(latA) * Math.sin(lonA);
    double z1 = c * Math.sin(latA);
    double x2 = a * Math.cos(latB) * Math.cos(lonB);
    double y2 = a * Math.cos(latB) * Math.sin(lonB);
    double z2 = c * Math.sin(latB);

    //运用空间距离公式
    distance = Math.sqrt( (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) +
                         (z1 - z2) * (z1 - z2));
    return distance;
  }

  public static double calculateDistanceBetween2Nodes(Node A, Node B) {
    /*
          定义:S_两点距离,R_地球半径,A点坐标:LatA,LonA,B点坐标:LatB,LonB
          则:S=R*sqrt{(LatA-LatB)^2+[(cos((LatA+LatB)/2))^2-((LatA+LatB)/2)^2]*(LonA-LonB)^2}
     */
    double distance = 0.0;
    double xa = Double.parseDouble(getTracksPointX(A));
    double ya = Double.parseDouble(getTracksPointY(A));
    double xb = Double.parseDouble(getTracksPointX(B));
    double yb = Double.parseDouble(getTracksPointY(B));

    double R = 6371008.77140;

    distance = R *
        Math.sqrt( (ya - yb) * (ya - yb) +
                  (Math.cos( (ya + yb) / 2) * Math.cos( (ya + yb) / 2) -
                   ( (ya + yb) / 2) * ( (ya + yb) / 2)) * (xa - xb) * (xa - xb));
    distance = R *
        Math.sqrt( (ya - yb) * (ya - yb) +
                  ( (Math.cos( (ya + yb) / 2)) * (Math.cos( (ya + yb) / 2)) -
                   ( (ya + yb) / 2) * (ya + yb) / 2) * (xa - xb) * (xa - xb));
    return distance;
  }

  public static double calculateDistanceBetween2Nodes1(Node A, Node B) {
    /*
       可以编个小程序实现这个功能。具体的计算方法如下:

     void myTestCalc (double n,double e,double h,double *x,double *y,double *z)
     {
      double m;
      const double ee = 0.00669437999013;

      m = 6378137/sqrt( 1-ee*pow(sin(n),2.0) );
     *x = ( m+h )*cos(n)*cos(e);
     *y = ( m+h )*cos(n)*sin(e);
     *z = ( m+h - m*ee )*sin(n);  //已知点坐标
      return;
     }
// h 为高度, n 为纬度(以弧度表示), e 为经度 (以弧度表示), x、y、z 为空间直角坐标

     计算出两点的空间直角坐标后,直接用空间两点间距离公式即可计算出距离。
     */

    /*
     参数名称 		        符号及单位 	WGS-84大地坐标系 	1980西安坐标系 		1954年北京坐标系
     长半径 			a(m) 		6378137 		6378140 		6378245
     短半径 			b(m) 		6356752.31420 		6356755.28820 		6356863.01880
     平均半径    	        R=(2a+b)/3(m) 	6371008.77140 		6371011.76273 		6371117.67293
     地球自转角速度    	ω(10-11rad/s) 	7292115 		7292115  
     地球引力常数(含大气层) 	GM(108m3/s2) 	3986005 		3986005  
     正常化二阶带谐系数  	C2.0(10-6) 	-484.16685    
        二阶带谐系数  	J2(10-6)   				1082.63  
     扁率         	α=(a-b)/a 	1/298.257223563 	1/298.257 		1/298.3
     第一偏心率平方   	e2 		0.00669437999013 	0.00669438499959 	0.006693421622966
     第二偏心率平方   	e'2 		0.006739496742227 	0.00673950181947 	0.006738525414683
     椭球正常重力位   	u0(m2s-2) 	62636860.85 		62636830  
     赤道正常重力位    	γe(ms-2) 	9.970326771 		9.780318  

     */
    double distance = 0.0;
    double lonA = Double.parseDouble(getTracksPointX(A)) * Math.PI / 180;
    double latA = Double.parseDouble(getTracksPointY(A)) * Math.PI / 180;
    double hA = Double.parseDouble(getTracksPointZ(A));
    double lonB = Double.parseDouble(getTracksPointX(B)) * Math.PI / 180;
    double latB = Double.parseDouble(getTracksPointY(B)) * Math.PI / 180;
    double hB = Double.parseDouble(getTracksPointZ(B));

    double ee = 0.00669437999013;
    double m = 6378137 / Math.sqrt(1 - ee * Math.pow(Math.sin(latA), 2.0));
    double xA = (m + hA) * Math.cos(latA) * Math.cos(lonA);

⌨️ 快捷键说明

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