728x90

구글에서 제공하는 함수를 이용하여 거리를 계산하는 걸 시도했으나 실패를 했다.

API_KEY를 새로 생성해서도 해보고 기존 API를 이용해서도 해보았으나, 역시 잘 안된다.




위와 같이 설정하면 얼추 동작이 되는 거 같기도 하다.



private void getMapDistanceData(String latitude, String longitude) {
    // 1. RequestQueue 생성 및 초기화
    RequestQueue requestQueue = Volley.newRequestQueue(mContext);
    String url = "https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&mode=transit&origins=37.541,126.986&destinations=35.1595454,126.8526012&region=KR&key=API_KEY";

    // 2. Request Obejct인 StringRequest 생성
    StringRequest request = new StringRequest(Request.Method.POST, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Log.d("result", "[" + response + "]");
                    showJSONList(response);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("error", "[" + error.getMessage() + "]");
                }
            }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> params = new HashMap<>();
            params.put("keyword", Value.encrypt(Value.URLkey()));
            params.put("reg_date", Value.encrypt(Value.Today()));
            return params;
        }
    };

    // 3) 생성한 StringRequest를 RequestQueue에 추가
    requestQueue.add(request);
}
 


두 좌표(위도, 경도)간의 거리결과를 얻는 것이 목적이라 위 코드는 포기하고 PHP 코드를 검색해서 만들어서 사용했더니 만족스런 결과가 나온다.

function getDistance($lat1, $lng1, $lat2, $lng2) { // 위, 경도 거리 계산
    $earth_radius = 6371;
    $dLat = deg2rad($lat2 - $lat1);
    $dLon = deg2rad($lng2 - $lng1);
    $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon/2) * sin($dLon/2);
    $c = 2 * asin(sqrt($a));
    $d = $earth_radius * $c;
    return $d * 1000; // m 거리 반환
    //return $d; // km 거리 반환
}

function StDistance($StID, $lat1, $lng1){
    if(strlen($lat1) < 1 || strlen($lng1) < 1) {
        return "X";
    }
    $sql = "select latitude,longitude from Station where StID=?";
    $params = array($StID);
    $stmt = $this->db->prepare($sql);
    $stmt->execute($params);
    if($row = $stmt->fetch()){
        return $this->getDistance($lat1, $lng1, $row[0], $row[1]);
    } else {
        return "X";
    }
}


DB에 저장된 위도, 경도값과 현재 위치에서 반환한 위도, 경도 값의 차이를 기준으로 거리 계산을 하도록 하면 원하는 결과를 얻을 수 있다.


728x90
블로그 이미지

Link2Me

,