Trong vài ngày qua, tôi đã đầu tiên sử dụng R để lập bản đồ. Tôi đã sử dụng R rộng rãi để mô hình hóa nhưng không phải loại công việc này trước đây. Tôi có một số câu hỏi và vấn đề liên quan đến shapefiles, cách họ đọc và vân vân.Vẽ một tệp hình dạng với lỗi ggplot2
Tôi đã tải xuống tệp hình dạng từ Australian Bureau of Statistics có nhiều tệp có đường viền trạng thái, mã bưu điện, thành phố, v.v. Các tệp hình dạng rất lớn, biên giới tiểu bang Úc có khoảng 1,8 triệu điểm tọa độ trong đó, tệp khác mà tôi đã thử là khu vực thống kê có hơn 8 triệu trong đó. Tôi đã không làm bất cứ điều gì với tập tin này vì nó chỉ là quá lớn cho R của tôi thiết lập.
Tôi đọc các tập tin hình dạng với readShapePoly
và chuyển đổi nó như vậy
[email protected]$id = rownames([email protected])
AUS.points = fortify(AUS, region="id")
AUS.df = join(AUS.points, [email protected], by="id")
Một khi tôi đã chuyển đổi biên giới nước hình dạng tập tin từ SpatialPolygonsDataFrame
đến một dataframe thường xuyên Tôi vẽ nó thành công nhưng nó đã mãi mãi và các chi tiết quá lớn. Tôi nghĩ sử dụng thinnedSpatialPoly
để đơn giản hóa nó, nhưng nó mang lại cho các lỗi:
Error in stopifnot(length([email protected]) == nrow(data)) :trying to get slot "polygons" from an object of a basic class ("NULL") with no slots
mà Google không thể giúp tôi với.
Chiến lược tiếp theo của tôi là đọc nó vào SAS và sử dụng proc greduce
để lấy tệp và tạo trường mật độ và bạn có thể chọn các đa giác dày đặc như thế nào.
proc mapimport out=states datafile='\Digital Boundaries\States\Shape file\STE_2011_AUST.shp';
id ste_code11; run;
proc greduce data = states out = reduced_states;
id ste_code11; run;
SAS có đồ họa tào lao và thậm chí không thể vẽ những điều đối với tôi vì vậy tôi đã xuất khẩu các tập dữ liệu và đọc nó trở lại vào R với lĩnh vực mật độ mới mà tôi hy vọng sẽ tập hợp con các dataframe bằng và sử dụng trong âm mưu của tôi .
Vấn đề của tôi bây giờ là khi tôi đi đến mưu trong R i có được điều này
ggplot(data=states.df, aes(X, Y, group=SEGMENT)) +
geom_polygon(colour='black', fill='white') + theme_bw()
Tôi đoán đó là vì các đa giác là không theo thứ tự hoặc đã bị hỏng? Tôi đã sử dụng chức năng này để thử và tham gia lại các đa giác của mình nhưng vẫn không có may mắn
RegroupElements <- function(df, longcol, idcol){
g <- rep(1, length(df[,longcol]))
if (diff(range(df[,longcol])) > 300) { # check if longitude within group differs more than 300 deg, ie if element was split
d <- df[,longcol] > mean(range(df[,longcol])) # we use the mean to help us separate the extreme values
g[!d] <- 1 # some marker for parts that stay in place (we cheat here a little, as we do not take into account concave polygons)
g[d] <- 2 # parts that are moved
}
g <- paste(df[, idcol], g, sep=".") # attach to id to create unique group variable for the dataset
df$group.regroup <- g
df
}
### Function to close regrouped polygons
# Takes dataframe, checks if 1st and last longitude value are the same, if not, inserts first as last and reassigns order variable
ClosePolygons <- function(df, longcol, ordercol){
if (df[1,longcol] != df[nrow(df),longcol]) {
tmp <- df[1,]
df <- rbind(df,tmp)
}
o <- c(1: nrow(df)) # rassign the order variable
df[,ordercol] <- o
df
}
Vì vậy, cuối cùng là câu hỏi của tôi! Mọi người xử lý các tệp hình dạng quá chi tiết lớn như thế nào? Tại sao không hoạt động không gian mỏng (tôi muốn tránh SAS nếu có thể)? Làm thế nào tôi có thể nhận được âm mưu của tôi không giống như crap?
Cuối cùng thông số kỹ thuật của tôi R:
R version 2.15.1 (2012-06-22)
Platform: x86_64-pc-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_Australia.1252 LC_CTYPE=English_Australia.1252
[3] LC_MONETARY=English_Australia.1252 LC_NUMERIC=C
[5] LC_TIME=English_Australia.1252
attached base packages:
[1] grid stats graphics grDevices utils datasets methods
[8] base
other attached packages:
[1] gridExtra_0.9 gpclib_1.5-1 ggmap_2.1 maptools_0.8-16
[5] lattice_0.20-6 rgeos_0.2-7 plyr_1.7.1 stringr_0.6
[9] ggplot2_0.9.1 sp_0.9-99 shapefiles_0.6 foreign_0.8-50
[13] fastshp_0.1-0
loaded via a namespace (and not attached):
[1] colorspace_1.1-1 dichromat_1.2-4 digest_0.5.2 labeling_0.1
[5] MASS_7.3-18 memoise_0.1 munsell_0.3 png_0.1-4
[9] proto_0.3-9.2 RColorBrewer_1.0-5 reshape2_1.2.1 RgoogleMaps_1.2.0
[13] rjson_0.2.8 scales_0.2.1 tools_2.15.1
Hãy thử 'rgeos :: gSimplify' nếu nó phù hợp với bạn. –
Sử dụng rgdal: readOGR để đọc shapefiles của bạn. Sử dụng đồ họa cơ sở sp cho bản đồ của bạn. – Spacedman
Ngoài ra, nếu các ranh giới đó quá chi tiết, hãy thử các địa chỉ đó từ www.gadm.org - chúng có thể không mang tính tác giả, nhưng chúng có thể đủ tốt cho công việc của bạn. – Spacedman