아나콘다에서 패키지를 설치 하거나 신규 환경을 만들거나 텐서플로우를 설치를 할때

그냥 따라하기만 하고 나면 뭐가 뭔지 잘 모를 수 있습니다.

사용하는 명령어가 어떤 기능을 하는지 기초적인 명령어만 알아도 설치할 때 지금 내가 뭔 짓을 하고 있는지 알 수 있습니다.


anaconda general commands


자주 사용하는 용어를 몇 개 설명 합니다.


pip 명령어도 업데이트를 “pip install –upgrade” 이런 식으로 사용하는 것 빼고는 사용법이 비슷합니다.


 명령어

 설명

 conda --version

 설치된 아나콘다 버전 확인

 conda clean

 설치된 패키지를 모두 삭제

 conda create

 새로운 가상환경 생성

 conda config

 설정 보기, 신규 설정, 수정등

 conda info

 설치된 아나콘다 정보

 conda install

 패키지 설치

 conda list

 설치된 패키지 정보(환경 별로 다름)

 conda remove

 설치된 패키지 삭제

 conda search

 설치된 패키지 조회

 conda uninstall

 Alias for conda remove

 conda update

 최신 버전으로 업데이트

 conda upgrade

 Alias for conda update


사용법은 conda [command] –n [environment name] [package_spec] 대부분 이런식입니다.


여기에서는 자주 사용하는 일부 명령어만 정리 되었습니다.

좀더 자세한 내용은 아나콘다 사이트를 찾아보시면 더 많은 명령어가 자세히 설명이 되어 있습니다.

 

 

- conda create

 

새로운 가상 환경을 생성 합니다.

>conda create -n tensorflow python=3.6

tensorflow라는 새로운 환경을 python 3.6 버전으로 생성 합니다.






생성된 가상환경을 조회해 봅니다.



tensorflow 이름으로 생성이 되었습니다.



- conda info

 

>conda info

설지된 아나콘다 정보를 조회 합니다.




- conda install

 

신규 패키지를 설치 합니다.

> conda install -n tensorflow scipy

tensorflow 가상 환경에 scipy를 설치 합니다.




- conda list

 

>conda list

현재 가상환경에 설치된 패키지 리스트를 조회 합니다.

(base)에서 조회시 base 설치된 리스트가 조회 됩니다.



너무 길어서 중간 생략

 

다음은 가상환경 tensorflow로 이동하여 조회한 패키지 리스트 입니다.



한 화면에 다 나오는 군요.

 

 

- conda remove

 

설치된 패키지를 삭제 합니다.

>conda remove –n base msgpack-python

base에 설치한 msgpack-python 제거 합니다.



다시 삭제를 해보겠습니다.



패키지를 찾을 수 없다고 하는군요.



- conda search

 

설치된 패키지를 조회 합니다.

>conda search -n base msgpack-python

base에 설치된 msgpack-python을 찾아 봅니다.




- conda update

 

최신 버전의 패키지로 업데이트를 진행 합니다.

>conda update -n base conda

baseconda를 최신 버전으로 업데이트 합니다.





- copy coding -


1. 설치 위치 찾기


아나콘다를 설치할 때 사용자를 All Users로 설정하면 설치 위치가 ProgramData 경로에 설치 됩니다.

설치를 Just Me로 설정을 했으면 User 폴더에 설치 됩니다.

삭제를 위해 파일 탐색기를 열어 경로를 찾아 봅니다.



그렇지만 숨김으로 되어 있어서 기본설정 탐색기에서는 보이지 않습니다.

파일 탐색기 설정을 변경 해보도록 합니다.


Windows7은 탐색기를 선택한 상태에서 키보드의 Alt키를 누르면 상단에 메뉴가 나타나는데 여기서


도구 > 폴더옵션(O)


을 선택 합니다.



Windows 10


보기 > 옵션 > 폴더 및 검색 옵션 변경


을 선택 합니다.



그럼 폴더 옵션 창이 나옵니다.

옵션 창에서 두가지 선택 관련 작업을 해주면 됩니다.



보호된 운영 체제 파일 숨기기(권장)의 체크를 제거 합니다.

숨김 파일, 폴더 및 드라이브 표시 라디오 버튼을 선택 합니다.

[적용]버튼을 선택 하면 적용 됩니다.



이제 ProgramData 폴더와 하부에 Anaconda3 폴더가 보입니다.

 

Just Me로 설치한 경우도 잘 보입니다.



Anaconda3 폴더로 이동을 합니다.




2. 제거파일 실행


Anaconda3 폴더 하단에서 uninstall 파일을 찾아 봅니다.

Uninstall-Anaconda3.exe

 

파일을 실행 합니다.


anaconda delete


삭제 하려는 프로그램과 버전을 확인 하고

[Next] 버튼을 선택 합니다.



삭제 하려는 파일의 위치를 확인 합니다.

[Uninstall] 버튼을 선택 합니다.



삭제가 진행 됩니다.



삭제가 완료 되었습니다.

[Next] 버튼을 선택 합니다.



삭제가 완료 되었습니다.

[Finish] 버튼을 선택하고 시스템에 반영을 하면 됩니다.


- copy coding -


1. 아나콘다 다운로드

 

아나콘다 사이트에 접속하여 설치 파일을 다운로드 받습니다.


아나콘다 다운로드

https://www.anaconda.com/download


현재(201812) 윈도우즈 용으로 Python 3.7이 포함된 Anaconda 5.3.1 버전이 있습니다.


 


그냥 Python을 사용하려는 경우는 다운받은 Python 3.7지원 파일을 설치하면 됩니다.

그러나 텐서플로우를 설치 하려는 사용자는 다른 버전 설치를 진행해야 합니다.


윈도우즈용 텐서플로우 패키지가 현재 지원하는 python 버전은 텐서플로우 사이트에 가면 다음과 같이 기술되어 있습니다.


Requires Python 3.4, 3.5, or 3.6


아나콘다의 현재 버전은 Python 3.7이 설치가 됩니다.

물론 텐서플로우를 설치 할때 3.6을 명기할 수 있지만 Python 3.6을 포함한 다른 버전의 아나콘다를 다운받아 설치 합니다.

예전 버전을 제공하는 사이트에 접속 합니다.


https://repo.continuum.io/archive/index.html


python 3.6이 포함된 Anaconda 설치 파일을 찾아 봅니다.



파일을 다운로드 받습니다.

자신의 운영체제에 맞게 선택 하고 32-Bit64-Bit 중 텐서플로우가 64만 지원하므로 64-Bit를 선택 합니다.

자신의 컴퓨터가 32-Bit인 경우 또는 CPU의 종류에 따라 소스 컴파일이 필요합니다.

 

지금부터 설치를 진행 하는데 참조된 화면이 Windows 7Windows 10이 서로 섞여 있습니다.

windows 7Windows 10환경의 설치와 선택 값을 비교하기 때문입니다.

기본 화면이 Windows 7입니다.

그리고 기존에 Python이 설치된 경우와 아닌 경우도 비교를 하기 때문에 화면이 다소 혼란스러울 수 있습니다.

 

Anaconda3-5.2.0-Windows-x86_64.exe

다운받은 파일을 실행하여 설치를 진행 합니다.(Anaconda3-5.3.1도 동일합니다)



[실행] 버튼을 선택 합니다.


anaconda download install


버전과 Bit를 확인하는 창입니다.

[Next] 버튼을 클릭 합니다.



저작권 관련입니다.

[I Agree] 버튼을 클릭 합니다.



- Windows 7으로 All Users를 선택한 경우 입니다.

[Next] 버튼을 클릭 합니다.



- windows 10에는 Just Me를 선택한 경우 입니다

 [Next] 버튼을 클릭 합니다.



- Windows 7으로 All Users를 선택한 경우 설치 위치가 C:\ProgramData\Anaconda3 입니다.

[Next] 버튼을 클릭 합니다.



- windows 10에는 Just Me를 선택한 경우 사용자 디렉토리에 설치 됩니다.

[Next] 버튼을 클릭 합니다.



Python 3.6이 설치 됩니다.

[Install] 버튼을 클릭 합니다.



참고용 화면 입니다.

Anaconda3-5.3.1인 경우는 Python 3.7이 설치 되는걸 알 수 있습니다.



- windows 10 Just Me를 선택한 경우 아무것도 선택 되어있지 않습니다.

위쪽 체크박스를 선택해 봅니다.



개인용도인 경우 다른 방법을 추천 하는군요.


그럼 아래에 있는 체크박스를 선택해 봅니다.



기존에 python이 설치되어 있어서 어쩌구 저쩌구...

기존에 설치한 phthon을 삭제 합니다.

삭제방법은 간단 한데 필요하시면 다음 링크를 참고 하세요.


Python 삭제 방법


Python을 삭제 했거나 기존에 설치를 하지 않았다면



이제는 아무일 없이 진행이 됩니다.

지금까지 windows 10 Just Me를 선택한 경우에 대한 설명 이었습니다.



[Next] 버튼을 선택하면 이제 설치가 진행 됩니다.



설치가 다 되었습니다.

[Next]를 선택 합니다.



Microsoft VSCode를 설치 하겠냐는데 필요하시면 설치를 하시고 아니면

[Skip] 버튼을 선택 합니다.



설치가 완료 되었습니다.

 

확인 들어가 보겠습니다.



아나콘다를 설치하면 Python도 같이 설치가 됩니다.

Anaconda Prompt를 실행하고 파이썬 버전을 확인하고 작동하는지 테스트를 해 봅니다.



. 설치가 잘 되었습니다.


- copy coding -


위치 이동이 없는 경우 걸음 횟수를 계산하지 않는 방법을 질문하여 간단하게 테스트를 하여보았습니다.

기존에 올린 글 두개를 섞어서 만들어 보았습니다.


안드로이드 핸드폰 걸음 감지 센서 작동 테스트 (TYPE_STEP_DETECTOR)

안드로이드 GPS 이용한 속도 측정


소스는 간단 설명하면

1. 걸음 센서 작동 감지

2. 마지막 위치와 현재 위치 사이의 거리 계산

3. 일정 부분 움직인 경우만 걸음 수 계산

이렇게 됩니다.

 

조금씩 테스트 하면서 거리 값을 수정해야 할 것 같고 필요하면 시간도 포함을 하면 조금 좋은 걸음 수 계산을 할 수 있을 것 같습니다.


1. 걸음 센서 작동 감지 / 3. 걸음 수 계산


TYPE_STEP_DETECTOR가 감지되면 getGPSLocation() 함수를 호출 합니다.

if(longWork > 0.05) 테스트를 위해 거리 이동 감지를 0.05m로 했습니다.

0.05m 이상 이동하면 카운트를 하겠죠

@Override
public void onSensorChanged(SensorEvent event) {
    if(event.sensor.getType() == Sensor.TYPE_STEP_DETECTOR) {
        if(event.values[0] == 1.0f) {
            double longWork = getGPSLocation();
            if(longWork > 0.05) {
                mStepDetector++;
                tvStepDetector.setText("Step Detect : " + String.valueOf(mStepDetector));
                tvTimeDif.setText("Return 간격 : " + String.format("%.3f",longWork) + " m");  // Time Difference
            }
        }
    }
}


2. 마지막 위치와 현재 위치 사이의 거리 계산


최종 위치와 현재 위치를 이용하여 거리를 계산 합니다.

deltaDist = distance(lat1,  lng1,  lat2,  lng2);

 


4. 프로그램 소스

 

4.1 결과

 

걸음 감지가 되기 전에는 거리 계산을 하지 않아 모든 값이 공백입니다.

걸음이 감지 되면 기존 위치와 현재 위치를 이용하여 거리를 계산합니다.


step detector gps provider


핸드폰에서 직접 좌표이용 만보계를 테스트 해보세요.


StepLocation.apk




4.2 AndroidManifest.xml


위치 정보를 사용하기 위한 퍼미션 정보를 설정 합니다.


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="copycoding.tistory.steplocation">

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


4.3 activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Step Detector Sensor"
        android:layout_marginTop="50dp"
        android:textSize="30dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/tvGpsEnable"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="GPS Enable :"
        app:layout_constraintTop_toBottomOf="@+id/tvTitle"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="25dp"
        />

    <TextView
        android:id="@+id/tvStepDetector"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Step Detect : 0"
        app:layout_constraintTop_toBottomOf="@+id/tvGpsEnable"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textSize="25dp"
        />

    <TextView
        android:id="@+id/tvGpsLatitude"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Start Latitude : "
        app:layout_constraintTop_toBottomOf="@+id/tvStepDetector"
        android:textSize="20dp"
        />
    <TextView
        android:id="@+id/tvGpsLongitude"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Start Longitude : "
        app:layout_constraintTop_toBottomOf="@+id/tvGpsLatitude"
        android:textSize="20dp"
        />
    <TextView
        android:id="@+id/tvEndLatitude"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="End Latitude : "
        app:layout_constraintTop_toBottomOf="@+id/tvGpsLongitude"
        android:textSize="20dp"
        />
    <TextView
        android:id="@+id/tvEndLongitude"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="End Longitude : "
        app:layout_constraintTop_toBottomOf="@+id/tvEndLatitude"
        android:textSize="20dp"
        />
    <TextView
        android:id="@+id/tvTimeDif"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="시간 간격 :"
        app:layout_constraintTop_toBottomOf="@+id/tvEndLongitude"
        android:textSize="25dp"
        />
    <TextView
        android:id="@+id/tvDistDif"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="거리 간격 :"
        app:layout_constraintTop_toBottomOf="@+id/tvTimeDif"
        android:textSize="25dp"
        />
    <TextView
        android:id="@+id/tvNowLatitude"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Now Latitude : "
        app:layout_constraintTop_toBottomOf="@+id/tvDistDif"
        android:textSize="20dp"
        />
    <TextView
        android:id="@+id/tvNowLongitude"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Now Longitude : "
        app:layout_constraintTop_toBottomOf="@+id/tvNowLatitude"
        android:textSize="20dp"
        />

</android.support.constraint.ConstraintLayout>


4.4 MainActivity.java


package copycoding.tistory.steplocation;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements SensorEventListener, LocationListener {

    private SensorManager sensorManager;
    private Sensor stepDetectorSensor;
    TextView tvStepDetector, tvGpsEnable, tvGpsLatitude, tvGpsLongitude, tvTimeDif, tvDistDif, tvEndLatitude, tvEndLongitude, tvNowLatitude, tvNowLongitude;
    private int mStepDetector = 0;
    private boolean isGPSEnable = false;

    private LocationManager locationManager;
    private Location lastKnownLocation = null;
    private Location nowLastlocation = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //location -------
        tvGpsEnable = (TextView)findViewById(R.id.tvGpsEnable);
        tvGpsLatitude = (TextView)findViewById(R.id.tvGpsLatitude);
        tvGpsLongitude = (TextView)findViewById(R.id.tvGpsLongitude);
        tvEndLatitude = (TextView)findViewById(R.id.tvEndLatitude);
        tvEndLongitude = (TextView)findViewById(R.id.tvEndLongitude);
        tvNowLatitude = (TextView)findViewById(R.id.tvNowLatitude);
        tvNowLongitude = (TextView)findViewById(R.id.tvNowLongitude);
        tvTimeDif = (TextView)findViewById(R.id.tvTimeDif);
        tvDistDif = (TextView)findViewById(R.id.tvDistDif);
        //권한 체크
        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
//        lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        // GPS 사용 가능 여부 확인
        isGPSEnable = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        tvGpsEnable.setText("GPS Enable: " + isGPSEnable);  //GPS Enable
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);

        //step -----
        tvStepDetector = (TextView)findViewById(R.id.tvStepDetector);
        sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        stepDetectorSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
        if(stepDetectorSensor == null) {
            Toast.makeText(this, "No Step Detect Sensor", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if(event.sensor.getType() == Sensor.TYPE_STEP_DETECTOR) {
            if(event.values[0] == 1.0f) {
                double longWork = getGPSLocation();
                if(longWork > 0.05) {
                    mStepDetector++;
                    tvStepDetector.setText("Step Detect : " + String.valueOf(mStepDetector));
                    tvTimeDif.setText("Return 간격 : " + String.format("%.3f",longWork) + " m");  // Time Difference
                }
            }
        }
    }

    public double getGPSLocation() {
        double deltaTime = 0.0;
        double deltaDist = 0.0;
        //GPS Start
        if(isGPSEnable) {
            if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                return 0.0;
            }
//            lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
            if(lastKnownLocation == null ) {
                lastKnownLocation = nowLastlocation;
            }

            if (lastKnownLocation != null && nowLastlocation != null) {
                double lat1 = lastKnownLocation.getLatitude();
                double lng1 = lastKnownLocation.getLongitude();
                double lat2 = nowLastlocation.getLatitude();
                double lng2 = nowLastlocation.getLongitude();

                deltaTime = (nowLastlocation.getTime() - lastKnownLocation.getTime()) / 1000.0;  //시간 간격


                //double distanceMeter = distance(37.52135327,  126.93035147,  37.52135057,  126.93036593);
                deltaDist = distance(lat1,  lng1,  lat2,  lng2);
                if(deltaDist > 0.05) {
                    tvGpsLatitude.setText("Start Latitude : " + lat1);
                    tvGpsLongitude.setText("Start Longitude : " + lng1);
                    tvEndLatitude.setText("End Latitude : " + lat2);
                    tvEndLongitude.setText("End Longitude : " + lng2);
                    tvDistDif.setText("거리 간격 : " +  Double.parseDouble(String.format("%.3f",deltaDist)) + " m");  // Dist Difference
                    lastKnownLocation = nowLastlocation;
                    return deltaDist;
                }
//                lastKnownLocation = nowLastlocation;
            }
        }
        return 0.0;
    }

    @Override
    public void onLocationChanged(Location location) {
        nowLastlocation = location;
        Toast.makeText(this, "Locatiuon Changed", Toast.LENGTH_SHORT).show();
        double lng = location.getLongitude();
        double lat = location.getLatitude();
        Log.d("Now Location ::::::", "longtitude=" + lng + ", latitude=" + lat);
        tvNowLatitude.setText("Now Latitude : " + lat);
        tvNowLongitude.setText("Now Longitude : " + lng);
    }


    @Override
    public void onProviderEnabled(String provider) {
        //권한 체크
        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        // 위치정보 업데이트
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,0, this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        sensorManager.registerListener(this, stepDetectorSensor, SensorManager.SENSOR_DELAY_UI);

        //권한 체크
        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        // 위치정보 업데이트
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,0, this);
    }

    @Override
    protected void onPause() {
        super.onPause();
        sensorManager.unregisterListener(this);

        // 위치정보 가져오기 제거
        locationManager.removeUpdates(this);
    }

    @Override
    protected void onStart() {
        super.onStart();

        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            //권한이 없을 경우 최초 권한 요청 또는 사용자에 의한 재요청 확인
            if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION) &&
                    ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_COARSE_LOCATION)) {
                // 권한 재요청
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 100);
                return;
            } else {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 100);
                return;
            }
        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }

    @Override
    public void onProviderDisabled(String provider) {

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {

    }

    // 거리계산
    private static double distance(double lat1, double lon1, double lat2, double lon2) {

        double theta = lon1 - lon2;
        double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));

        dist = Math.acos(dist);
        dist = rad2deg(dist);
        dist = dist * 60 * 1.1515;
        dist = dist * 1.609344 * 1000; //미터 단위

        return dist;
    }


    // This function converts decimal degrees to radians
    private static double deg2rad(double deg) {
        return (deg * Math.PI / 180.0);
    }

    // This function converts radians to decimal degrees
    private static double rad2deg(double rad) {
        return (rad * 180 / Math.PI);
    }


}

- copy coding -


1···101102103104105106107···118

+ Recent posts