Làm thế nào để tính tọa độ tối đa và tối thiểu cho nhiều đa giác?


8

Tôi muốn tính toán tọa độ vĩ độ tối đa, trung bình và tối thiểu cho một tập hợp đa giác lớn, sử dụng QGIS hoặc R. Vì vậy, điểm cao nhất và thấp nhất đạt được của mỗi đa giác trên một phạm vi vĩ độ. Các hợp đồng trung tâm rất dễ thực hiện, nhưng chuyển đổi đa giác thành các điểm và sử dụng ma trận khoảng cách trong QGIS làm hỏng máy tính của tôi. Có cách nào hiệu quả hơn để làm điều này?

Nó đã được hỏi trong nhiều vỏ bọc khác nhau ở đây, nhưng 1. Không rõ ràng 2. lỗi thời Tôi nghĩ phiên bản khôn ngoan hoặc 3. sự cố trên PC của tôi khi tôi có khoảng 2000 đa giác.

Câu trả lời:


7

Bạn có thể làm như thế này:

library(raster)
# example data
g <- getData('GADM', country='BRA', level=1)

ext <- t(sapply(1:length(g), function(i) as.vector(extent(g[i,]))))
colnames(ext) <- c('xmin', 'xmax', 'ymin', 'ymax')

head(ext)
#          xmin      xmax       ymin      ymax
#[1,] -73.98971 -66.58875 -11.145161 -7.121320
#[2,] -38.23634 -35.15182 -10.501529 -8.814987
#[3,] -54.87619 -49.86681  -1.236008  4.442360
#[4,] -73.79568 -56.09750  -9.814520  2.246201
#[5,] -46.61705 -37.34903 -18.349859 -8.533636
#[6,] -41.42347 -37.25208  -7.858196 -2.784583

Và tiếp tục như thế này:

d <- data.frame(state=g$NAME_1, ext)
head(d)

#     state      xmin      xmax       ymin      ymax
#1     Acre -73.98971 -66.58875 -11.145161 -7.121320
#2  Alagoas -38.23634 -35.15182 -10.501529 -8.814987
#3    Amapá -54.87619 -49.86681  -1.236008  4.442360
#4 Amazonas -73.79568 -56.09750  -9.814520  2.246201
#5    Bahia -46.61705 -37.34903 -18.349859 -8.533636
#6    Ceará -41.42347 -37.25208  -7.858196 -2.784583

Đẹp! ---------------------
mdsumner

Vâng, đó chỉ là thanh lịch. Tất cả các câu trả lời dường như thực hiện mánh khóe, nhưng điều này thắng imo vì sự hiệu quả và đơn giản. Cảm ơn bạn!
Khách2345234562

5

Trong QGIS, bạn có thể sử dụng công cụ Đa giác từ Lớp mở rộng ... từ thanh công cụ ( Vector> Công cụ nghiên cứu> Đa giác từ Lớp mở rộng ... ).

Điều này về cơ bản xuất ra một lớp hộp giới hạn cho mỗi tính năng (nếu bạn chọn tùy chọn) với các trường chứa tọa độ của max, giữa và min của X và Y cùng với một vài thống kê khác:

Đa giác từ lớp mở rộng

Ví dụ đa giác

Bảng thuộc tính kết quả


1
Tôi nghĩ rằng đó là mẹo - cảm ơn bạn! Tuy nhiên, và đây có thể là một câu hỏi chung của QGIS - nó không bảo tồn ID đối tượng. Là thứ tự của các đầu ra giống như đa giác đầu vào? Có cách nào để đảm bảo rằng, tức là khớp từng ô giới hạn chính xác với dữ liệu khác trong shapefile gốc.
Khách2345234562

@ Guest2345234562 - Chào mừng bạn thân! Có, tôi tin rằng thứ tự của đầu ra khớp với đầu vào. Tôi đã kiểm tra nhanh bằng cách tham gia không gian các lớp (ví dụ: sử dụng các thuộc tính Tham gia theo công cụ vị trí ) và chúng dường như khớp với nhau một cách độc đáo.
Giuse

Có ai biết đây là đâu trong QGIS 3 không? Cảm ơn
Ian Allan

5

Trong R

  1. đọc chúng với x <- gdal::readOGR(datasource, layername)từ bất kỳ định dạng nào

  2. sử dụng as(x, "class")sự ép buộc để chuyển đổi từ đa giác sang ranh giới dòng của chúng thành các điểm thành phần của chúng (và một cách cẩn thận, ghi lại các đối tượng và ID vòng)

  3. Sử dụng các hàm tóm tắt theo cách tiêu chuẩn cho X / Y được nhóm theo ID đa giác

Thí dụ:

library(rgdal)
dsn <- system.file("vectors/ps_cant_31.MIF", package = "rgdal")[1]
ogrInfo(dsn=dsn, layer="ps_cant_31")
ps_cant_31 <- readOGR(dsn=dsn, layer="ps_cant_31")

## cast to lines and then to points (creates columns  Lines.NR, Lines.ID,     Line.NR to identify pieces)

p <-  as(as(ps_cant_31, "SpatialLinesDataFrame"), "SpatialPointsDataFrame")
coords <- coordinates(p)
## see that Lines.NR groups your original polygons (nrow(ps_cant_31))
#spplot(p["Lines.NR"])

## summarize the Y-coordinate into groups defined by original polygon object
tapply(coords[,2], p$Lines.NR, median)
tapply(coords[,2], p$Lines.NR, max)
tapply(coords[,2], p$Lines.NR, min)

Bạn đề cập đến "phạm vi vĩ độ" nhưng không chỉ định nếu tọa độ của bạn nằm trong hệ tọa độ dự kiến, nếu chúng là bạn cần đảm bảo bạn không dự đoán và phân loại theo vĩ độ (không chỉ Y) nếu đó là trường hợp.

Tôi đặc biệt khuyên bạn nên kiểm tra dplyrtóm tắt cuối cùng, các công cụ tích hợp của R rất mạnh mẽ nhưng mệt mỏi trong nhận thức muộn màng. Thật không may với spbạn cần phải chuyển đổi thủ công giữa các mảng tọa độ và data.framehình thành khá thường xuyên để có được các loại câu trả lời này, nhưng tất cả đều có thể thực hiện được.

Cuối cùng, nếu đây thực sự là những gì bạn đang có sau đó thì sẽ không mất chút thời gian nào, miễn là tài nguyên bộ nhớ ảo của bạn phù hợp với tập dữ liệu bạn có, để đọc tất cả cùng một lúc và thực hiện công việc trong một bước như thế này


3

Trong QGIS, bạn có thể sử dụng biểu thức để thêm các trường bằng Máy tính trường

Các biểu thức sau sẽ cung cấp cho bạn tọa độ tối thiểu và tối đa cho đa giác

xmin($geometry)
xmax($geometry)
ymin($geometry)
ymax($geometry)

Đối với tọa độ trung tâm, bạn có thể sử dụng

xmin(centroid($geometry))
ymin(centroid($geometry))
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.