python 경위도 2 점 거리,3 점 면적 조작

지구 상의 두 점 의 경 위 를 제시 하여 두 점 사이 의 구면 거 리 를 계산 하 다.지구 상의 세 점 의 경 위 를 제시 하여 형 성 된 삼각형 면적 을 구하 다.
이러한 수요 에 대해 서 는 반 정 실 공식 을 사용 하여 우리 가 원 하 는 거리,면적 치 를 계산 할 수 있다.
먼저 반 정 실 공식(haversine formula)을 드 립 니 다.


먼저 첫 번 째 식,등호 의 오른쪽 을 보고 입력 매개 변 수 는?φ、λ,등호 의 오른쪽 에는 d,r 가 있 는데 그 중에서φ위 도 를 나타 내 고,λ경도
r 는 지구 반경 이 고 d/r 는 두 점 이 원 에 있 는 호 도 를 나타 낸다θ。
두 식 을 정리 하면 얻 을 수 있 습 니 다:


즉,위의 마지막 줄 식 에 따라 해당 하 는 경위도 값 과 지구 반지름 을 가 져 가면 우리 가 원 하 는 두 점 의 구면 거 리 를 얻 을 수 있다 는 것 이다.
여기 서 우 리 는 지구 가 균일 한 구체(r=6371.393 킬로미터)라 고 가정 한다.
구체 적 인 python 코드 는 다음 과 같 습 니 다.

import math
class cal_distance(object):
    def __init__(self,**kwargs):
        self.lat1 = kwargs.get('lat1')
        self.lon1 = kwargs.get('lon1')
        self.lat2 = kwargs.get('lat2')
        self.lon2 = kwargs.get('lon2')
        
    def twopoint_distance(self):
        R=6371.393
        dlat=self.deg2rad(self.lat2-self.lat1)
        dlon=self.deg2rad(self.lon2-self.lon1)
        a=math.sin(dlat/2)**2+math.cos(self.deg2rad(self.lat1))*math.cos(self.deg2rad(self.lat2))*math.sin(dlon/2)**2
        c=2*math.atan2(math.sqrt(a),math.sqrt(1-a))
        return R*c
        
    def deg2rad(self,deg):
        return deg*(math.pi/180)
cal 정의distance 류 는 입력 매개 변수 가 두 점 인 경위도 로 두 점 의 구면 거 리 를 계산 하 는 기능 을 합 니 다.deg2reg 함 수 는 도수 회전 호도 함수,투 포인트distance 는 거리 계산 기능 함수 이 고 출력 두 점 거리 이 며 단 위 는 천 미터(킬로미터)입 니 다.

from cal_distance import cal_distance
def run():
    point1_lat = 39.2186266952
    point2_lat = 39.08579871
    point1_lon = 117.8175961241
    point2_lon = 117.7040162
    Distance = cal_distance(lat1=point1_lat,lon1=point1_lon1,lat2=point2_lat,lon2=point2_lon)
    distance = Distance.twopoint_distance()
    print distance
    
if __name__=='__main__':
    run()
이 코드 는 구체 적 인 함수 호출 부분,실례 화 대상,투 포인트 호출distance(),우리 가 원 하 는 거리 값 을 얻 을 수 있 습 니 다.
현재 코드 를 바탕 으로 세 개의 점 으로 둘러싸 인 면적 을 계산 하려 면 쉽게 이 루어 진다.세 개의 점 두 개 에서 세 개의 변 의 거 리 를 구하 고 세 개의 변 을 이용 하여 면적 공식 을 구하 면 삼각형 의 면적 치 를 얻 을 수 있다.
다음 클래스 의 정의 부분:

import math
class cal_area(object):
    def __init__(self,**kwargs):
        self.lat1 = kwargs.get('lat1')
        self.lon1 = kwargs.get('lon1')
        self.lat2 = kwargs.get('lat2')
        self.lon2 = kwargs.get('lon2')
        self.lat3 = kwargs.get('lat3')
        self.lon3 = kwargs.get('lon3')
        
    def twopoint_distance(self,lat1,lon1,lat2,lon2):
        R=6371.393
        dlat=self.deg2rad(lat2-lat1)
        dlon=self.deg2rad(lon2-lon1)
        a=math.sin(dlat/2)**2+math.cos(self.deg2rad(self.lat1))*math.cos(self.deg2rad(self.lat2))*math.sin(dlon/2)**2
        c=2*math.atan2(math.sqrt(a),math.sqrt(1-a))
        return R*c
        
    def deg2rad(self,deg):
        return deg*(math.pi/180)
    
    def area(self):
        distance12=self.twopoint_distance(self.lat1,self.lon1,self.lat2,self.lon2)
        distance13=self.twopoint_distance(self.lat1,self.lon1,self.lat3,self.lon3)
        distance23=self.twopoint_distance(self.lat2,self.lon2,self.lat3,self.lon3)
        p=self.half_perimeter(distance12,distance23,distance13)
        s=math.sqrt(p*(p-distance12)*(p-distance23)*(p-distance13))
        return s
        
    def half_perimeter(a,b,c):
        return (a+b+c)/2
Python Haversine 공식 계산 두 점(경위도 좌표)거리
WGS 84 좌표계 에서 두 점(경위도 좌표)사이 의 거리(단위:km)를 계산한다.

import math
def LLs2Dist(lat1, lon1, lat2, lon2):
    R = 6371
    dLat = (lat2 - lat1) * math.pi / 180.0
    dLon = (lon2 - lon1) * math.pi / 180.0
    a = math.sin(dLat / 2) * math.sin(dLat / 2) + math.cos(lat1 * math.pi / 180.0) * math.cos(lat2 * math.pi / 180.0) * math.sin(dLon / 2) * math.sin(dLon / 2)
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
    dist = R * c
    return dist
인증:

x1 = 37.779388
y1 = -122.423246
x2 = 32.719464
y2 = -117.220406
dist = LLs2Dist(y1, x1, y2, x2)
print dist
출력 결 과 는:
642.185478152
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기