python 경위도 2 점 거리,3 점 면적 조작
이러한 수요 에 대해 서 는 반 정 실 공식 을 사용 하여 우리 가 원 하 는 거리,면적 치 를 계산 할 수 있다.
먼저 반 정 실 공식(haversine formula)을 드 립 니 다.
![](https://s1.md5.ltd/image/cbf1f97c83be316a145434cfe4156456.png)
![](https://s1.md5.ltd/image/c61a5ee861e13cf02daefab7a51bfe92.png)
먼저 첫 번 째 식,등호 의 오른쪽 을 보고 입력 매개 변 수 는?φ、λ,등호 의 오른쪽 에는 d,r 가 있 는데 그 중에서φ위 도 를 나타 내 고,λ경도
r 는 지구 반경 이 고 d/r 는 두 점 이 원 에 있 는 호 도 를 나타 낸다θ。
두 식 을 정리 하면 얻 을 수 있 습 니 다:
![](https://s1.md5.ltd/image/d1a8e71a5f53b60cee09b75c02f53811.png)
![](https://s1.md5.ltd/image/020124606d8753a40231040b1ebd6946.png)
즉,위의 마지막 줄 식 에 따라 해당 하 는 경위도 값 과 지구 반지름 을 가 져 가면 우리 가 원 하 는 두 점 의 구면 거 리 를 얻 을 수 있다 는 것 이다.
여기 서 우 리 는 지구 가 균일 한 구체(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
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.