zoukankan      html  css  js  c++  java
  • 毕设_利用经纬度判断距离和角度(三)

    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()
    

      

  • 相关阅读:
    c++之运算符
    C++开源库,欢迎补充。
    C++ 图像处理类库
    C++开源代码项目汇总
    视频会议及流媒体十大开源项目
    多媒体的框架
    C++开发资源汇总
    Juce之旅-第一个例子(图形窗口)
    Juce-强大的开源类库
    图像处理库的比较:OpenCV,FreeImage,CImg,CxImage
  • 原文地址:https://www.cnblogs.com/lovelystone/p/6692771.html
Copyright © 2011-2022 走看看