📄 itemvalue.java
字号:
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 + -