2009-12-02 23 views
8

Tài liệu API cho OpenLayers.Feature.Vector nói rằng bản thân Vector không có phương pháp nào cả.Làm thế nào để di chuyển OpenLayers Vector theo lập trình?

Tôi biết cách cho phép người dùng di chuyển Vector bằng cách thêm điều khiển OpenLayers.Control.DragFeature vào bản đồ. Vì vậy, nếu người dùng có thể di chuyển Vector thì có ba cách để di chuyển nó theo chương trình. Nhưng tôi không thể tìm ra cách để làm điều đó.

Trả lời

11

Bạn di chuyển đối tượng OpenLayers.Feature.Vector bằng cách gọi các phương thức trên đối tượng geometry của nó, không phải chính vectơ. Những phương pháp này bao gồm di chuyển, xoay, thay đổi kích thước và chuyển đổi.

Lưu ý rằng bạn sẽ không tìm thấy bất kỳ phương thức nào được xác định trên đối tượng cơ sở OpenLayers.Geometry nhưng chỉ trên đối tượng con thích hợp (lưu ý rằng có nhiều mức độ thừa kế trong hình học OpenLayers). OpenLayers.Geometry.Collection là một ví dụ điển hình.

Bạn có thể tìm thấy ví dụ tuyệt vời về các vectơ OpenLayers di chuyển theo chương trình here.

+1

Được rồi, bây giờ tôi có thể sử dụng OpenLayers.Geometry.Point.move() 'phương pháp 'để di chuyển các tính năng của một số lượng. Nhưng tôi cần phải di chuyển đối tượng địa lý vào một vị trí cụ thể. Có một cách đơn giản để làm điều đó hay tôi phải tính toán số tiền tôi phải di chuyển nó bằng. –

+0

Phương thức di chuyển hoạt động bằng cách bù đắp các thuộc tính x và y trên hình học. Nếu bạn đang sử dụng một điểm (như được chỉ dẫn ở trên) thì bạn có thể làm điều này: chức năng movePoint (điểm, x, y) { điểm.x = x; point.y = y; point.clearBounds(); } Bạn có thể xem nguồn để di chuyển một điểm tại đây: http://trac.openlayers.org/browser/trunk/openlayers/lib/OpenLayers/Geometry/Point.js Làm việc với nhiều hình dạng phức tạp hơn sẽ đòi hỏi nhiều công việc hơn. Kiểm tra triển khai di chuyển cho Bộ sưu tập tại đây: http://trac.openlayers.org/browser/trunk/openlayers/lib/OpenLayers/Geometry/Collection.js – atogle

+0

Xin cảm ơn, hàm di chuyển movePoint() hoạt động tốt. –

6

này đã làm việc cho tôi:

geometry.move(Y_NextPosition - Y_CurrentPosition, X_NextPosition - X_CurrentPosition) 
+0

Có vẻ như bạn chỉ có thể đặt các giá trị 'x' và' y' của một điểm trực tiếp để tránh tính toán không cần thiết đó. –

+0

Đối tượng hình học của bạn là feature.geometry hoặc sth else? Tôi đã thử điều này nhưng không hoạt động, tại sao ?: var feature = vectorLayer.getFeatureById (id); feature.geometry.move (lon, lat); @danielB –

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