Làm thế nào để xác định trọng tâm của đa giác?


34

Tôi có một vectơ đa giác và tôi muốn nhanh chóng đạt được trọng tâm của đa giác này để chèn vào một tài liệu văn bản. Tôi đang làm việc với QGIS. Tôi đã tìm kiếm thông qua các câu hỏi khác và mặc dù một số câu hỏi hơi gần nhưng họ không trả lời được câu hỏi của tôi.

Lý tưởng nhất là tọa độ centroid sẽ nằm trong bảng thuộc tính của đa giác và tôi chỉ có thể sao chép và dán tọa độ.

Tôi không muốn phải tạo một tệp vectơ điểm riêng biệt đại diện cho tâm và sau đó tìm các tọa độ này và sao chép và dán chúng.


Định dạng tài liệu văn bản của bạn là gì?
Nathan W

Nó là một tài liệu từ MS nhưng thực sự nó có thể là bất cứ điều gì.
David

Câu trả lời:


34

Một centroid là trên mỗi định nghĩa một lớp điểm và không phải là một đa giác. Do đó, bạn cần phải tạo một lớp mới, dễ dàng như chiếc bánh trong phiên bản QGIS 1.8 trở lên.

  • Tải trong đa giác của bạn
  • Chuyển đến menu -> Vector -> công cụ Hình học -> đa giác trung tâm và tạo một lớp điểm trung tâm
  • Xuất tọa độ của tâm được tạo vào bảng thuộc tính bằng cách nhấp vào -> Menu vector -> công cụ Hình học -> Xuất / Thêm cột hình học.

Sau đó, bạn có thể thực hiện nối không gian để thêm các cột centroid vào đa giác và xóa lớp điểm một lần nữa.


Cảm ơn đã trả lời tôi đánh giá cao sự giúp đỡ. Tuy nhiên, đây là rất nhiều công việc đơn giản để biết tọa độ của tâm là gì. Quá tệ, đó không phải là cách đơn giản hơn trong QGIS.
David

Nếu bạn vẫn muốn dễ dàng hơn, bạn có thể xem PostGIS và hàm ST_Centroid được đề cập dưới đây. Bằng cách này, bạn không cần phải tạo các tệp tạm thời. Ngoài ra, bạn có thể viết cho mình một tập lệnh python cho QGIS hoặc sử dụng Trình tạo mô hình SEXTANTE.
Curlew

10

Thực sự, tạo một shapefile mới là một trong những lựa chọn dễ dàng nhất của bạn. Tuy nhiên, bạn không cần phải sao chép và dán tọa độ. Làm cái này:

  • Tạo tập tin centroid của bạn bằng công cụ Polygon Centroids.
  • Mở bảng thuộc tính centroids và làm cho nó có thể chỉnh sửa (biểu tượng bút chì ở phía dưới).
  • Mở máy tính trường (biểu tượng máy tính ở phía dưới) và chọn tùy chọn Tạo trường mới và gọi nó là một cái gì đó có ý nghĩa (ví dụ: Easting).
  • Từ các chức năng Danh sách mở rộng menu Hình học và chọn $ x sau đó lặp lại với một cột mới cho $ y (gọi nó là Northing, giả sử).
  • Lưu các chỉnh sửa của bạn và bây giờ bạn có tất cả các tọa độ như một phần của bảng thuộc tính hoàn thành với ID đa giác ban đầu và các thuộc tính nếu bạn sử dụng công cụ centroids.

Ngoài ra, bạn sẽ phải nhập dữ liệu của mình vào PostGIS và sau đó lặp lại qua các đa giác, sử dụng hàm ST_Centroid và lưu trữ kết quả trong một trường mới. Các công việc liên quan là giống nhau nhưng tùy chọn thứ hai có nghĩa là bạn không có tệp điểm trung tâm riêng biệt.


Cảm ơn câu trả lời. Tôi đánh giá cao sự giúp đỡ của bạn. Có vẻ như câu trả lời của Curlew dễ dàng hơn đối với tôi. Tuy nhiên, cả hai câu trả lời này là rất nhiều công việc mà tôi muốn. Cuối cùng, bạn kết thúc với nhiều shapefile khác nhau mà bạn phải đặt tên, xóa, chỉnh sửa, v.v.
David

8

Một tâm hồn mạnh mẽ hơn cho câu trả lời của mike: long = toreal(regexp_substr(geom_to_wkt(centroid($geometry)), '(-?\\d+\\.?\\d*) -?\\d+\\.?\\d*')) lat = toreal(regexp_substr(geom_to_wkt(centroid($geometry)), '-?\\d+\\.?\\d* (-?\\d+\\.?\\d*)'))


1
Câu trả lời không thể chối cãi;)
Fernando Irarrázaval G

6

Làm thế nào về việc sử dụng này trong Máy tính trường 2.2?

Trường dài = chất nền (geomToWKT (centroid ($ hình học)), 7, 12)

Trường Lat = chất nền (geomToWKT (centroid ($ hình học)), strpose (geomToWKT (centroid ($ hình học)), '') +2, 12)

Có vẻ như điều này được giải quyết trong 2.6 với tùy chọn xmin xmin (centroid ($ hình học))


5

Tôi mới bắt gặp bài đăng này trễ gần 5 năm (!), Nhưng đây là những gì tôi làm để tính toán các đa giác ở phiên bản 2.18,14:

  1. Bắt đầu chỉnh sửa lớp đa giác
  2. Tạo một trường văn bản mới, gọi nó là centroidxy
  3. Sử dụng máy tính trường, tính toán centroidxy = x ($ hình học) || ',' || y ($ hình học)
  4. Kết quả trông giống như: 397640.915545362, 2126924.53637653
  5. Lưu các chỉnh sửa của bạn.
  6. Lớp đa giác của bạn hiện chứa một trường có giá trị x, y centroid

đơn giản và tuyệt vời
Kazuhito

3

Liên kết bảng điểm trung tâm với bảng đa giác và sau đó đặt tọa độ với tên và hình dạng đa giác. Đa giác không có một lat lat trong và của chính họ


Cảm ơn câu trả lời của bạn. Có, tôi nhận ra đa giác không có một lat lat và bản thân nó đơn giản là thứ gì đó có thể tính toán được. Thật không may, nó không dễ hơn cái này trong QGIS. Cảm ơn một lần nữa mọi người cho câu trả lời. Và nhanh quá. Cảm ơn!
David

2

Đã xem qua bài đăng này và rất khó để theo dõi, đề xuất cập nhật:

Lưu ý: Điều này sẽ tính toán vĩ độ và kinh độ trong tọa độ hình chiếu của bạn (có thể là mét). Nếu bạn muốn tọa độ theo độ thập phân (với giả sử bạn làm hoặc chúng hầu như không thể hiểu được) trước tiên hãy lưu lớp trong CRS: EPSG: 4326, WGS 84 này.

  1. Máy tính trường mở
  2. Tạo trường mới
  3. Nhập tên (Vĩ độ hoặc Kinh độ)
  4. Chọn số thập phân làm loại trường đầu ra
  5. Nhập biểu thức này cho vĩ độ: y ($ hình học) và biểu thức này cho Kinh độ: x ($ hình học)
  6. nhấn OK

-2

lon = ToReal (regrec_substr (geomToWKT (centroid ($ hình học)), '([\ s]')) lat = ToReal (regrec_substr (geomToWKT (centroid ($ hình học)), '\ s [)]'))


1
Đây không phải là câu trả lời nào cả. Vui lòng truy cập chuyến tham quan để hiểu rõ hơn cách trả lời câu hỏi ...
Nightwatch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.