2011-07-06 22 views
7

Tôi có một bộ GPS-Position trong Cơ sở dữ liệu của tôi. Bởi vì tôi muốn vẽ chúng trên một bản đồ tôi vấp ngã trên "Thuật toán Douglas-Peucker" sẽ xóa các điểm trên một đường mà không phải là "necassary" ...Douglas-Peucker-Algorithm

Nhưng ở khắp mọi nơi tôi tìm kiếm, tôi chỉ khám phá thuật toán cho pixel X/Y - Tọa độ và không cho Latitude và Kinh độ ...

Vì vậy, tôi muốn chuyển đổi Lat/Long thành Chế độ xem "X/Y" 2 chiều? Điều đó có thể, hoặc tôi đang nghĩ "quá phức tạp"? :)

http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm

+0

Bạn có bao giờ tìm được giải pháp không? –

Trả lời

2

Nếu bạn có thể yên tâm đảm nhận GPS chưa được di chuyển hàng ngàn cây số, và bạn không quá gần phía bắc/cực nam, bạn có thể xấp xỉ X/Y tọa độ bằng km bằng cách nhân vĩ độ và kinh độ với hằng số. Vĩ độ luôn là cùng một lượng km trên mỗi độ (khoảng 10000 km là 90 độ đi từ xích đạo đến một trong các cực). Đối với kinh độ, nhân với cùng một số lần cos(latitude).

Không khó hơn nhiều nếu tính toán vị trí 3D từ kinh độ/vĩ độ: Xem this wikipedia article về tọa độ hình cầu cách thực hiện việc này. góc phương vị/độ cao là kinh độ/vĩ độ.

Điều này vẫn còn gần đúng khi bạn lấy khoảng cách đường thẳng, thay vì theo bề mặt trái đất, nhưng đối với ứng dụng của bạn, tôi không thể tưởng tượng đây là vấn đề.

Ồ, và cảm ơn bạn đã liên kết với bản đồ Douglas Peucker ... Tôi sẽ thử nó trong một miền vấn đề khác.

1

Điều đó tùy thuộc vào những gì bạn muốn có "đường thẳng". Nếu bạn muốn một đường thẳng trên bản đồ, thì bạn phải chuyển đổi tọa độ vĩ độ/dài của mình bằng cách sử dụng phép chiếu chính xác (có thể là Mercator projection, nhưng có một số full list on Wikipedia). Tuy nhiên, nếu bạn đang tìm đường thẳng nhất trên bề mặt (tức là trùng với great circle), bạn không cần áp dụng bất kỳ chuyển đổi nào cho giá trị vĩ độ/dài của mình.

0

Tôi đã hỏi this question một số thời gian trước đây và câu trả lời tôi đã cho phép tôi viết một triển khai trong java cho this project. Đó là trong EarthGeometry.java