구글에서 제공하는 함수를 이용하여 거리를 계산하는 걸 시도했으나 실패를 했다.
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®ion=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에 저장된 위도, 경도값과 현재 위치에서 반환한 위도, 경도 값의 차이를 기준으로 거리 계산을 하도록 하면 원하는 결과를 얻을 수 있다.