Hi Hi

'sl4a 위치 기반 동작'에 해당되는 글 1건

  1. Python sl4a- 위치 기반 동작

Python sl4a- 위치 기반 동작

 

원하는 장소의 GPS 좌표들만 알면 특정 장소에서 전화기가 무음 모드로 들어가게 만드는 스크립트 이다.

이러한 스크립트에는 '특정' 장소와 현재 위치 사이의 거리를 계한하는 기능이 필요하다.

다음은 두 GPS 지점들 사이의 거리를 헤이버사인 공식을 이용해서 계산하는 함수이다.

from math import *

def haversine(lon1,lat1,lon2, lat2):
    """
    위도와 경도를 지정된 지표면 상의 두 점 사이의 대원 거리(great circle distance)를 계산한다. 위도와 경도는 도(degrre) 단위로 계산한다.
    """
    # 도의 단위를 라디안 으로 변환한다.
    lon1, lat1, lon2, lat2 = map(radians, [lon1,lat1,lon2,lat2])
    #헤이비 사인공식
   
    dlon = lon2-lon1
    dlat = lat2-lat1
   
    a= sin(dlat/2)**2 + cos(lat1)*cos(lat2)*sin(dlon/2)**2
    c= 2* atan2(sqrt(a), sqrt(1-a))
   
    Km= 6367*c
   
    return Km

 

이제 이 함수를 이용해서 현재 위치와 특정 장소 사이의 거리를 구하고, 그 거리가 일정 문턱값 미만이면 전화기의 무음 모드를 켜면 된다.

import android, time

droid = android.Android()

lat1 = 33.111111
lon1 = 90.000000

droid.startLocating()

time.sleep(15)

while True:
    loc = droid.readLocation().result
    if loc = {}:
        loc = getLastKnownLocation().result
   
    if loc != {}:
        try:
            n = loc['gps']
        except KeyError:
            n = loc['network']
   
    la = n['latitude']
    lo = n['longitude']
   
    if haversine(la, lo, lat1, lon1) < 1:
        droid.toggleRingerSilentMode(True)
    else:
        droid.toggleRingerSilentMode(False)

'' 카테고리의 다른 글

Python sl4a - 자동 실행기  (0) 2012.06.13
Python sl4a - 구글 문서와 동기화하기  (0) 2012.06.12
Python sl4a - 시간 기반 동작  (0) 2012.06.11
Python sl4a- 위치 기반 동작  (0) 2012.06.10
Python SL4A - 방향 기반 동작  (0) 2012.06.09
안드로이드 API 둘러보기  (0) 2012.05.30