2012-02-15 68 views
12

Tôi muốn có thể dễ dàng lưu trữ và hiển thị lại Tuyến đường chỉ đường của Google Maps trên Google Map. Giả sử từ điểm A đến B, đối tượng DirectionsResult từ Google có 100 điểm dọc theo tuyến đường, tôi muốn có thể lưu trữ tuyến đường này và đảm bảo lần tiếp theo tôi vẽ chỉ đường sẽ đi qua tất cả các điểm này.Lưu trữ tuyến đường Google Maps hoàn chỉnh

Cách tôi thấy những người đang cố gắng thực hiện nó là sắp xếp lại toàn bộ đối tượng DirectionsResult và lưu trữ nó trong cơ sở dữ liệu. Sau đó, khi chúng tôi muốn vẽ lại tuyến đường, hãy gửi chuỗi trở lại, JSON.Đặt nó, rồi cố gắng cấp dữ liệu cho đối tượng DirectionsRenderer sẽ hiển thị chỉ đường trên bản đồ. Cách tiếp cận này có ba vấn đề:

1) Bạn mất thông tin loại trong quá trình tuần tự hóa và vì Google thu nhỏ các đối tượng nên bạn không thể sử dụng các hàm lớp để lấy các giá trị này ra khỏi đối tượng một cách đáng tin cậy. Trước tiên, bạn cần sử dụng các hàm truy cập dữ liệu để xây dựng các đối tượng 'place holder' khi ban đầu tuần tự hóa đối tượng, sau đó xây dựng lại các đối tượng Google Maps khi phân tích cú pháp chuỗi được tuần tự hóa sau này.

2) Nó không rõ ràng về mặt pháp lý. TOS của Google Maps cho biết bạn không được phép lưu trữ dữ liệu vĩnh viễn và có vẻ như từ các bài đăng khác phương pháp này vi phạm nó.

3) Đối tượng có thể rất lớn, một tuyến đường tôi đã tuần tự hóa trên 64KB.

Tôi cũng nghĩ đến việc cố gắng lưu trữ một vài điểm từ đường dẫn và sau đó xây dựng lại nó bằng Waypoints. Loại công việc này nhưng bạn chỉ có thể có tối đa 8 điểm cho API miễn phí, vì vậy điều này không đảm bảo độ chính xác vượt quá 8 điểm đó. Hơn nữa, nó sau đó vẽ các điểm đánh dấu waypoint dọc theo tuyến đường mà tôi nghĩ rằng có thể gây nhầm lẫn cho người dùng.

Có cách nào được chấp nhận để lưu trữ các tuyến đường chính xác từ Google Maps hay API và TOS được thiết kế nhằm ngăn chặn điều này? Cảm ơn đã giúp đỡ.

+2

Đây là cách chúng tôi đã giải quyết: Tôi đã lấy trường "encoded_polyline" và gửi nó đến chương trình phụ trợ của chúng tôi. Nếu tôi cần xử lý các điểm trên chương trình phụ trợ, tôi đã sử dụng phiên bản thuật toán giải mã google polyline mà tôi tìm thấy trên đường và chuyển sang ruby ​​(hoặc bất kỳ ngôn ngữ nào bạn đang sử dụng). Đây là [phiên bản python] (http://code.google.com/p/py-gpolyencode/) Tôi đã tìm thấy. Nếu bạn cần hiển thị polyline trên giao diện người dùng, bạn gửi đa giác lên đến giao diện người dùng và sử dụng [Công cụ hình học của Google] (https://developers.google.com/maps/documentation/javascript/3.exp/reference # encoding) để giải mã nó. – jargetz

+1

Tất nhiên nhược điểm của nó là nó chỉ hiển thị tuyến đường như là một polyline, vì vậy nếu bạn muốn có waypoints, bạn sẽ phải lưu trữ những người là tốt. Và nếu bạn muốn làm cho tuyến đường có thể chỉnh sửa thì bạn sẽ không may mắn, bạn sẽ phải yêu cầu một bộ chỉ đường mới. – jargetz

+0

Nếu bạn có điểm đánh dấu với waypoints thì bạn chỉ có thể lưu trữ 'waypoints list' (hoặc' marker list' với 'start'-'end' point) vào trong' database' và sau đó retive khi yêu cầu với cùng một chuỗi và pass hướng directionrender với điểm bắt đầu và kết thúc. Nó sẽ vẽ lại tuyến đường trên bản đồ. – bharat

Trả lời

2

Tôi tin rằng điều này là không rõ ràng về mặt pháp lý. Trong thực tế nó gần như chắc chắn trái với Terms of Service. Như bạn đã chỉ ra, đó là lưu trữ vĩnh viễn cho các mục đích khác ngoài việc cải thiện hiệu suất (trái với 10.1.3 (b)); nhưng nó cũng có ý định hiển thị chỉ đường mà không nhận được chúng thông qua API (trái với 10.1.1 (a)). Thực tế là Google đã không làm cho nó dễ dàng có nghĩa là họ đã không ủy quyền cho trường hợp sử dụng này. Trong thực tế, TOS và API được thiết kế để lưu trữ như thế này khó nếu không phải là không thể.

Không thể chấp nhận để lưu trữ điểm xuất phát và điểm đến và để API hoạt động trên tuyến đường khi bạn muốn hiển thị lại lần nữa?

+0

Cảm ơn câu trả lời của bạn Andrew. Tôi đồng ý với bạn. Giải pháp bạn cung cấp là một giải pháp tốt cho hầu hết các trường hợp nhưng chúng tôi đã có yêu cầu rằng chúng tôi cần đảm bảo tuyến đường được tạo bởi Google Maps DirectionsRenderer thường giống nhau trong suốt cuộc đời của tuyến đường này. Không có cách nào để đảm bảo rằng một ngày con đường ngắn nhất được vẽ bởi DirectionsRenderer sẽ có một đường cao tốc mới (đặc biệt là kể từ khi chúng tôi đang hoạt động ở Trung Quốc và đường cao tốc mới mọc lên là một thực tế). – jargetz

+0

Chúng tôi đang xem xét một giải pháp mà chúng tôi lưu trữ [encoded_polyline] (http://code.google.com/apis/maps/documentation/utilities/polylinealgorithm.html) từ DirectionsResult, sau đó chuyển nó đến giao diện người dùng để vẽ sử dụng thuật toán giải mã của riêng Google. Nếu chúng ta cần giải mã đường dẫn trên chương trình phụ trợ, chúng tôi sử dụng phiên bản bộ giải mã mà chúng tôi đã chuyển sang ruby. Chúng tôi có một nguyên mẫu làm việc nhưng đã do dự triển khai điều này vì nó không hợp pháp (đặc biệt là trái với 10.1.1 (a) như bạn đã đề cập.) – jargetz

0

Hãy xem www.mapmyrun.com họ đang sử dụng api bản đồ google và chắc chắn họ đang lưu giữ dữ liệu. Tuy nhiên, không chắc họ sử dụng API miễn phí.

Các vấn đề liên quan