2013-02-22 2 views
0

Google Maps API V3를 사용하여 Java 웹 응용 프로그램에서 MySql을 데이터베이스로 사용하여 사용자 정의지도를 만듭니다.Google Maps API V3 - 백엔드의 DirectionRoute 근처에 좌표가 있는지 확인하십시오.

프런트 엔드를 통해 맞춤 마커를 추가하고 마커 좌표 (lat/lng)를 백엔드에 저장하는 기능이 있습니다.

프런트 엔드에 방향 검색 기능을 추가하고 결과 (단일 경로)를 백엔드에 저장할 계획입니다.

마커가 추가 될 때마다 마커의 위치 근처에있는 모든 경로 (미리 저장 됨)를 찾고 싶습니다.

누가 경로 세부 정보를 저장하는 효율적인 방법과 마커 좌표와 비교할 수있는 방법을 제안 할 수 있습니까?

참고 :

나는 웨이 포인트와 overview_path - 길하지만 둘 다 나에게 마커의 좌표와 비교 좌표의 전체 목록을 제공하지 않습니다에 대해 배웠습니다. 당신이 데이터베이스에 당신의 방법 포인트의 좌표를 저장하는 경우 사전에

덕분에

답변

0

당신은이 쿼리는 공식을 통합 당신의 마커에 가까운 웨이 포인트를 검색 할 수 Haversine formula 를 사용 PDO

$stmt = $dbh->prepare("SELECT name, lat, lng, (3959 * acos(cos(radians(?)) * cos(radians(lat)) * cos(radians(lng) - radians(?)) + sin(radians(?)) * sin(radians(lat)))) AS distance FROM mytable HAVING distance < ? ORDER BY distance LIMIT 0 , 1"); 
    // Assign parameters 
    $stmt->bindParam(1,$center_lat);//lat coordinate of user 
    $stmt->bindParam(2,$center_lng);//lng coordinate of user 
    $stmt->bindParam(3,$center_lat);//lat coordinate of user 
    $stmt->bindParam(4,$radius);//Radius in miles 
+0

약 10K 개의 경로를 저장하고 각 경로의 길 찾기 포인트가 수백에서 수천까지있을 수 있으므로 점의 수는 lakhs가됩니다. 그대로 유지하는 것이 모든 방법의 포인트를 저장하는 것이 효율적입니까 아니면 최소한의 포인트 만 저장하는 다른 방법이 있습니까? 그리고 MySql 테이블은이 거대한 데이터 세트를 사용하여 쿼리를 수행하는 데 적합합니까? – Deepak

+0

@Deepak이 쿼리는 500,000 행의 MySQL 데이터베이스에서 실행될 때 2.08 초가 걸렸습니다. –

0
를 사용 할 수 있습니다

데이터베이스에 경로를 저장하면 geohashing을 사용하여 모든 경계 상자를 계산합니다. 경로는 통과하여 다른 테이블에 저장합니다 (geohash, route_id를 PRIMARY로 사용).

경로를 검색 할 때 사용자 위치가 가운데이고 반지름이 거리 인 원 안에있는 모든 경계 상자를 계산할 경우 geohash IN (circle_hashes)의 검색어를 사용하십시오.