毕设_利用经纬度判断距离和角度(三)
package anglepage;
//import anglepage.Angle;
public class Angle {
// longitude 经度,latitude 纬度
MyLatLng A, B;
public MyLatLng getA() {
return A;
}
public MyLatLng getB() {
return B;
}
public void setA(MyLatLng a) {
A = a;
}
public void setB(MyLatLng b) {
B = b;
}
public Angle(double longitudeA, double latitudeA, double longitudeB,
double latitudeB) {
this.A = new MyLatLng(longitudeA, latitudeA);
this.B = new MyLatLng(longitudeB, latitudeB);
}
public double getAngle() {
double dx = (B.m_RadLo - A.m_RadLo) * A.Ed;
double dy = (B.m_RadLa - A.m_RadLa) * A.Ec;
double angle = 0.0;
angle = Math.atan(Math.abs(dx / dy)) * 180. / Math.PI;
double dLo = B.m_Longitude - A.m_Longitude;
double dLa = B.m_Latitude - A.m_Latitude;
if (dLo > 0 && dLa <= 0) {
angle = (90. - angle) + 90;
} else if (dLo <= 0 && dLa < 0) {
angle = angle + 180.;
} else if (dLo < 0 && dLa >= 0) {
angle = (90. - angle) + 270;
}
return angle;
}
// public static void main(String[] args) {
// Angle angle = new Angle(113.249648, 23.401553, 113.246033, 23.403362);
// System.out.println(angle.getAngle());
// angle.A.set(113.246033, 23.403362);
// angle.B.set(113.249648, 23.401553);
// System.out.println(angle.getAngle());
// }
}
package anglepage;
public class MyLatLng {
final static double Rc = 6378137;
final static double Rj = 6356725;
double m_LoDeg, m_LoMin, m_LoSec;
double m_LaDeg, m_LaMin, m_LaSec;
double m_Longitude, m_Latitude;
double m_RadLo, m_RadLa;
double Ec;
double Ed;
public void set(double longitude, double latitude) {
m_Longitude = longitude;
m_Latitude = latitude;
}
public MyLatLng(double longitude, double latitude) {
m_LoDeg = (int) longitude;
m_LoMin = (int) ((longitude - m_LoDeg) * 60);
m_LoSec = (longitude - m_LoDeg - m_LoMin / 60.) * 3600;
m_LaDeg = (int) latitude;
m_LaMin = (int) ((latitude - m_LaDeg) * 60);
m_LaSec = (latitude - m_LaDeg - m_LaMin / 60.) * 3600;
m_Longitude = longitude;
m_Latitude = latitude;
m_RadLo = longitude * Math.PI / 180.;
m_RadLa = latitude * Math.PI / 180.;
Ec = Rj + (Rc - Rj) * (90. - m_Latitude) / 90.;
Ed = Ec * Math.cos(m_RadLa);
}
}
进行距离的计算:
d = 6370*math.acos(math.cos(A.x)*math.cos(B.x)*math.cos(A.y-B.y)+math.sin(A.x)*math.sin(B.x))
该方法是错的,纠正为:
http://blog.csdn.net/b_h_l/article/details/8657040
使用python导入该文件转换的jar包后,直接建立一个对象,进行赋值即可。
jarpath = os.path.join(os.path.abspath('.'), 'C:/Python27/jarpage')
jpype.startJVM(jpype.getDefaultJVMPath(), "-Djava.ext.dirs=%s" % jarpath)
Test = jpype.JClass('anglepage.Angle') # 取得包
angle = Test(113.246033, 23.403362,113.249648,23.401553)
angle.getA().set(113.249648,23.401553)
angle.getB().set(113.246033, 23.403362)
print(angle.getAngle())
jpype.shutdownJVM()
浙公网安备 33010602011771号