2012-02-15 3 views
12

Google지도에서 Google지도 길 찾기를 쉽게 저장하고 다시 표시하고 싶습니다. A 지점에서 B 지점까지 Google의 DirectionsResult 객체에 경로 100 점이 있다고 가정 해 봅시다.이 경로를 저장할 수 있고 다음에 페인트 할 때이 점들을 모두 따라갈 수 있도록하고 싶습니다.전체 Google지도 경로 저장

사람들이 시도하는 방법은 전체 DirectionsResult 객체를 직렬화하여 데이터베이스에 저장하는 것입니다. 그런 다음 경로를 다시 그리기 위해 문자열을 다시 JSON.Parse로 보내고 DirectionsRenderer 객체로 전달하여지도의 경로를 렌더링합니다. 이 접근법에는 세 가지 문제가 있습니다.

1) 직렬화 과정에서 유형 정보가 손실되고 Google에서 객체를 최소화하므로 클래스 함수를 사용하여 이러한 값을 객체에서 안정적으로 가져올 수 없습니다. 먼저 데이터 접근 자 함수를 사용하여 객체를 처음 직렬화 할 때 '자리 ​​표시 자'객체를 작성한 다음 나중에 직렬화 된 문자열을 구문 분석 할 때 Google Maps 객체를 다시 작성해야합니다.

2) 법적으로 모호합니다. Google지도 서비스 약관에 따르면 데이터를 영구 저장하지 않아도되며 다른 방법으로는이 방법이이를 위반하는 것으로 보입니다.

3) 오브젝트가 거대 할 수 있습니다. 하나의 라우트가 64KB를 넘었습니다.

경로에서 몇 포인트를 저장하고 Waypoints를 사용하여 다시 빌드하려고 시도했습니다. 이러한 종류의 작품이지만 무료 API에 대해 최대 8 점까지만 가질 수 있기 때문에 8 점 이상으로 많은 정확성을 보장하지는 않습니다. 또한, 사용자가 혼란스럽게 할 수있는 경로를 따라 웨이 포인트 마커를 칠합니다.

Google지도에서 정확한 경로를 저장할 수있는 방법이 있습니까? 아니면이를 방지하기 위해 의도적으로 고안된 API와 서비스 약관이 있습니까? 도와 주셔서 감사합니다.

+2

우리가 해결 한 방법은 다음과 같습니다. "encoded_polyline"필드를 가져 와서 백엔드로 보냈습니다. 백엔드에서 포인트를 처리해야한다면 라인에서 찾은 루비 또는 다른 언어로 포팅하는 Google 폴리 라인 디코딩 알고리즘을 사용했습니다. 다음은 [python 버전] (http://code.google.com/p/py-gpolyencode/)입니다. 프런트 엔드에 폴리 라인을 표시해야하는 경우 폴리 라인을 프런트 엔드까지 보내고 [Google 지오메트리 도구] (https://developers.google.com/maps/documentation/javascript/3.exp)를 사용하십시오./reference # encoding)를 사용하여 디코딩합니다. – jargetz

+1

물론이 단점은 경로를 폴리 라인으로 표시한다는 것입니다. 따라서 웨이 포인트를 갖고 싶으면 그 경로도 저장해야합니다. 경로를 편집 가능하게 만들고 싶으면 운이 없으면 새로운 길 찾기를 요청해야합니다. – jargetz

+0

웨이 포인트가있는 마커가있는 경우'waypoints list' (또는'start'-'end' 포인트로'마커리스트') 순열을'database'에 현명하게 저장 한 다음, 같은 순서로 require 할 때마다 retive하고 pass 할 수 있습니다 시작 지점과 끝 지점으로 directionrender로 이동합니다. 지도에서 다시 경로를 그립니다. – bharat

답변

2

나는 이것이 법적으로 모호하다고 생각합니다. 실제로 그것은 거의 확실하게 Terms of Service에 위배됩니다. 지적했듯이 성능 향상 이외의 목적을위한 영구 저장 장치입니다 (10.1.3 (b)와 반대). API를 통해 방향을 표시하지 않고 방향을 표시하기위한 것입니다 (10.1.1 (a)와 반대). Google이 쉽게 사용하지 않았다는 사실은이 사용 사례를 승인하지 않았 음을 의미합니다. 실제로 TOS와 API는 불가능하지는 않더라도 이런 저장을 어렵게 만들도록 설계되었습니다.

시작 지점과 끝 지점을 저장하고 API를 다시 표시하려면 경로에서 작동하도록 허용하지 않습니까?

+0

Andrew에게 답변 해 주셔서 감사합니다. 나는 너에게 동의한다. 제안한 솔루션은 대부분의 경우에 좋은 솔루션이지만 Google Directions DirectionsRenderer에서 만든 경로가이 경로의 수명 기간 동안 일반적으로 동일해야한다는 요구가있었습니다. 어느 날 DirectionsRenderer가 그렸던 최단 경로가 새로운 고속도로를 이용할 것이라고 보장 할 수있는 방법이 없었습니다 (특히 우리가 중국에서 운영하고 있고 새로운 고속도로가 현실적이기 때문에). – jargetz

+0

DirectionsResult에서 [encoded_polyline] (http://code.google.com/apis/maps/documentation/utilities/polylinealgorithm.html)을 저장 한 다음 프런트 엔드로 전달하여 그림을 그릴 수있는 솔루션을 고려하고 있습니다. Google의 자체 알고리즘을 사용합니다. 백엔드에서 경로를 디코딩해야한다면 루비에 포팅 한 디코더 버전을 사용합니다. 우리는 작동하는 프로토 타입을 가지고 있지만 법적으로 의심 스럽기 때문에 배포하기를 주저하고 있습니다 (특히 언급 한 10.1.1 (a)와는 반대로). – jargetz

0

Google지도 API를 사용하는 www.mapmyrun.com을 살펴보고 확실히 데이터를 유지하고 있습니다. 그러나 무료 API를 사용하는 것은 거의 없습니다.