Nó không cần phải chính xác 100%, nó có thể là trung tâm của hình chữ nhật bao quanh.Làm thế nào để có được trung tâm của một đa giác trong bản đồ google v3?
Trả lời
Thuật toán:
Chạy qua tất cả các điểm trong đa giác. Đối với tất cả các điểm tìm thấy;
x1
, mức thấp nhấtx
phối hợpy1
, mức thấp nhấty
phối hợpx2
, mức cao nhấtx
phối hợpy2
, mức cao nhấty
phối hợp
Bây giờ bạn có bounding hình chữ nhật, và có thể làm việc ra trung tâm chúng tôi ing:
center.x = x1 + ((x2 - x1)/2);
center.y = y1 + ((y2 - y1)/2);
Matthew's answer là giải pháp tốt. Tuy nhiên, khi sử dụng API Google Maps v3, bạn có thể muốn chuyển mỗi điểm của đa giác đến đối tượng LatLngBounds
thông qua phương thức extend()
và sau đó cuối cùng gọi phương thức getCenter()
trên đối tượng LatLngBounds
. Hãy xem xét ví dụ sau:
var bounds = new google.maps.LatLngBounds();
var i;
// The Bermuda Triangle
var polygonCoords = [
new google.maps.LatLng(25.774252, -80.190262),
new google.maps.LatLng(18.466465, -66.118292),
new google.maps.LatLng(32.321384, -64.757370),
new google.maps.LatLng(25.774252, -80.190262)
];
for (i = 0; i < polygonCoords.length; i++) {
bounds.extend(polygonCoords[i]);
}
// The Center of the Bermuda Triangle - (25.3939245, -72.473816)
console.log(bounds.getCenter());
+1 cho Tam giác Bermuda :-) – Mawg
Được gói gọn ở đây: http://code.google.com/p/google-maps-extensions/source/browse /google.maps.Polygon.getBounds.js – Steve
Tại sao giải pháp này lại tốt hơn? Đối với tôi có vẻ như cả hai giải pháp phải luôn luôn nhận được cùng một câu trả lời. Đây có phải là nhanh hơn? – Nicolas
bạn có thể mở rộng các lớp Polygon với phiên bản riêng của bạn về chức năng còn thiếu, chúng ta hãy gọi nó my_getBounds():
google.maps.Polygon.prototype.my_getBounds=function(){
var bounds = new google.maps.LatLngBounds()
this.getPath().forEach(function(element,index){bounds.extend(element)})
return bounds
}
và hơn sử dụng nó trong mã như thế này:
myPolygon.my_getBounds().getCenter()
... vv, nó phải là tương đương với hành vi v2
Tìm thấy bài đăng này khi thực hiện tìm kiếm trên google cho cùng một vấn đề .. Đề xuất này đã làm việc hoàn hảo cho tôi! cảm ơn .. – Dennis
wow nó hoạt động như một sự quyến rũ !! giải pháp tốt nhất tôi nghĩ, Cảm ơn @furiozo – chespinoza
Vì một số lý do, điều này không hiệu quả đối với tôi. Hàm 'my_getBounds()' không xác định khi tôi cố gắng gọi nó trên các đối tượng Đa giác. – CoreDumpError
@Matthew Scharley của câu trả lời này là thuật toán của tôi. Nó có thể là xấu. Hãy nhẹ nhàng. Tôi đã viết nó bởi vì hàm getCenter() trong api V3 chỉ hoạt động cho các hình chữ nhật và hình tròn, chứ không phải các đa giác.
function polygonCenter(poly) {
var lowx,
highx,
lowy,
highy,
lats = [],
lngs = [],
vertices = poly.getPath();
for(var i=0; i<vertices.length; i++) {
lngs.push(vertices.getAt(i).lng());
lats.push(vertices.getAt(i).lat());
}
lats.sort();
lngs.sort();
lowx = lats[0];
highx = lats[vertices.length - 1];
lowy = lngs[0];
highy = lngs[vertices.length - 1];
center_x = lowx + ((highx-lowx)/2);
center_y = lowy + ((highy - lowy)/2);
return (new google.maps.LatLng(center_x, center_y));
}
Lưu ý rằng trong trường hợp đa giác lõm, tâm của hình chữ nhật có thể nằm hoàn toàn bên ngoài đa giác. Nếu đa giác của bạn có thể được vẽ, tôi khuyên bạn nên sử dụng trung tâm của vòng tròn được ghi lớn nhất làm "trung tâm" của đa giác. Bạn có thể thấy một thuật toán đủ đơn giản here (p. 4). Nếu nhiệm vụ của bạn là đặt nhãn trên đa giác, điều này cũng sẽ cho kết quả thẩm mỹ nhất (trong trường hợp đó tôi khuyên bạn nên sử dụng phương pháp này ngay cả khi đa giác của bạn có thể không được lõm).
- 1. tìm trung tâm điểm của một đa giác trong js
- 2. Tìm điểm trung tâm của đa giác trong JavaScript
- 3. Phóng to đến trung tâm trên bản đồ trong API Google Maps V3
- 4. sự kiện sau khi sửa đổi đa giác trong bản đồ google api v3
- 5. Xử lý khi vẽ đa giác hoàn tất trong bản đồ google api v3
- 6. Trung tâm Google Maps (V3) trên trình duyệt in
- 7. Máy tính vĩ độ kinh độ điểm trung tâm của một đa giác trong PHP
- 8. Trung tâm đa giác trong điều khiển lưới
- 9. Làm cách nào để Thêm và Xoá Đa giác trên Google Maps v3?
- 10. Đặt một MapLabel ở trên cùng của Đa giác trong Google Maps V3
- 11. Tìm trung tâm của đa giác có đỉnh có trọng số
- 12. google maps API v3 - cách vẽ đa giác động/polylines?
- 13. Làm cách nào để tôi có thể tải KML trong bản đồ google mà không thay đổi trung tâm bản đồ
- 14. Google Map V3 không định tâm, chỉ hiển thị một phần bản đồ
- 15. làm thế nào để có được vĩ độ, kinh độ onclick của một bản đồ trong bản đồ google api v3 javascript?
- 16. Con trỏ tùy chỉnh trên đa giác có thể nhấp trong Google Maps V3
- 17. Làm thế nào một số LatLng có thể được sử dụng để đặt điểm đánh dấu trên bản đồ Google, nhưng không được vẽ một Đa giác?
- 18. Google Maps v3: kiểm tra xem điểm có tồn tại trong đa giác
- 19. Tìm trục trung gian của đa giác bằng C#
- 20. Google v3 MAP API: Trung tâm & Zoom trên mốc hiển thị
- 21. Cách nhanh nhất để tìm trung tâm "trực quan" của một đa giác có hình dạng bất thường là gì?
- 22. API Google Maps V3: giới hạn bản đồ giới hạn
- 23. Làm cách nào để Google Maps hiển thị toàn bộ đa giác?
- 24. Trong Google Map V3, cách đặt nhãn bên trong và bên trên đa giác?
- 25. Google Maps Api: đặt trung tâm của bản đồ thành độ lệch theo pixel?
- 26. Tìm trung tâm của nhiều vị trí trong Google Maps
- 27. Tạo một vòng tròn đa giác SqlGeography từ một trung tâm và bán kính
- 28. Xóa Đa giác khỏi bản đồ
- 29. Bản đồ google api v3 màu nền
- 30. tên trung tâm ggplot trên bản đồ
Vâng, tôi đã tìm thấy rằng trong v2, tôi đã có thể làm điều đó chỉ bằng cách gọi polygon.getBounds(). GetCenter(), nhưng tôi đoán tôi sẽ phải làm theo cách của bạn. Cảm ơn – ANd
Tôi không có ý tưởng, có thể làm việc trong v3 quá. Tôi không nhìn quá gần API Google Maps. Nhưng theo cách này thì về cơ bản là vậy. –
Có vẻ như Google đã quên phương thức 'Polygon.getBounds()'. Nó có sẵn cho 'Circle' và' Rectangle', nhưng không có sẵn cho lớp 'Polygon'. –