2012-01-11 45 views
6

Tôi đang tìm hiểu cách thực hiện Giao lộ (Spatial Join) giữa điểm và đa giác từ shapefiles. Ý tưởng của tôi là để có được những điểm gần nhất và những điểm phù hợp hoàn toàn bên trong các đa giác. Trong ARGIS có một hàm cho tùy chọn đối sánh có tên là CLOSEST và chúng được định nghĩa bởi: "Tính năng trong các đối tượng nối gần với đối tượng đích nhất định. Có thể hai hoặc nhiều đối tượng địa lý tham gia cùng khoảng cách với mục tiêu Khi tình huống này xảy ra, một trong các tính năng kết hợp được chọn ngẫu nhiên làm đối tượng địa lý phù hợp. "Cách nhận thông tin cho đa giác được liên kết gần nhất với các điểm bằng cách sử dụng R?

Tôi có một chức năng để giao điểm thành đa giác, nó được vui lòng đóng góp bởi Lyndon Estes tại danh sách địa lý r-sig và mã hoạt động rất tốt khi tất cả các đa giác đã lấp đầy tất cả các khu vực. Trường hợp thứ hai được gọi là khoảng cách tham gia không gian và trong ArcGIS được gọi là INTERSECT khi match_option là CLOSEST, như ArcGIS thực hiện. Vì vậy, bạn có thể sửa đổi khoảng cách tối thiểu giữa điểm và đa giác khi khu vực không được lấp đầy bởi tất cả các đa giác.

Dưới đây là các dữ liệu và chức năng của INTERSECT đầu tiên:

library(rgeos) 
library(sp) 
library(maptools) 
library(rgdal) 
library(sp) 
xy.map <- readShapeSpatial("http://www.udec.cl/~jbustosm/points.shp") 
manzana.map <- readShapeSpatial("http://www.udec.cl/~jbustosm/manzanas_from.shp") 

IntersectPtWithPoly <- function(x, y) { 
# Extracts values from a SpatialPolygonDataFrame with SpatialPointsDataFrame, and appends table (similar to 
# ArcGIS intersect) 
# Args: 
# x: SpatialPoints*Frame 
# y: SpatialPolygonsDataFrame 
# Returns: 
# SpatialPointsDataFrame with appended table of polygon attributes 

    # Set up overlay with new column of join IDs in x 
    z <- overlay(y, x) 

    # Bind captured data to points dataframe 
    x2 <- cbind(x, z) 

    # Make it back into a SpatialPointsDataFrame 
    # Account for different coordinate variable names 
    if(("coords.x1" %in% colnames(x2)) & ("coords.x2" %in% colnames(x2))) { 
    coordinates(x2) <- ~coords.x1 + coords.x2 
    } else if(("x" %in% colnames(x2)) & ("x" %in% colnames(x2))) { 
    coordinates(x2) <- ~x + y 
    } 

    # Reassign its projection if it has one 
    if(is.na(CRSargs([email protected])) == "FALSE") { 
    [email protected] <- [email protected] 
    } 
    return(x2) 
} 


test<-IntersectPtWithPoly (xy.map,manzana.map) 

Chia sẻ một số ý tưởng với Lyndon, ông nói với tôi điều này:


Tôi nghĩ điều đơn giản nhất để làm là nên đặt một vùng đệm xung quanh mỗi điểm (bạn có thể chỉ định 50 m nếu nó nằm trong tọa độ dự kiến), chuyển đổi chúng thành đa giác, và sau đó nhiệm vụ của bạn trở thành giao điểm của hai đối tượng đa giác khác nhau.

Tôi đã không làm kiểu này hoạt động trong R, nhưng tôi nghi ngờ bạn có thể tìm thấy câu trả lời của bạn với các chức năng sau:

library(sp) 
?over 

library(rgeos) 
?gBuffer 
?gIntersects 

Tôi đề nghị đưa lên một tập hợp con của dữ liệu của bạn minh họa vấn đề, và sau đó có thể một người khác có ý tưởng tốt hơn về đa giác với đa giác giao nhau/lớp phủ có thể đề xuất phương pháp.

nên được thực hiện trong bán kính điểm nằm trong shapefile để làm cho chúng đi vào đa giác gần nhất.

Tôi biết rằng các chức năng này có thể giúp đạt được điều đó.

library(sp) 
?over 

library(rgeos) 
?gBuffer 
?gIntersects 

tôi đang làm việc trên nó, vì vậy bất kỳ bình luận hoặc giúp đỡ, sẽ rất apreciated!

+2

Cross-posted tại http://gis.stackexchange.com/questions/18726/spatial-distance-join-between-polygon-and-points-using-r. Điều này có vẻ giống như một sự lựa chọn hợp lệ nhưng nó có nghĩa là, Pantaleon, chúng tôi hy vọng bạn cố gắng tóm tắt các câu trả lời từ * cả hai * trang trong các chủ đề bạn đã bắt đầu tại * mỗi trang *. – whuber

+0

Ok, cảm ơn. Tôi khá mới ở đây !!! –

Trả lời

1

Tôi nhận được rằng có thể làm đa giác với các lớp đa giác bằng cách sử dụng sprgeos. Bạn sẽ cần tải rgeos sau khi tải sp.

library(rgeos) 
over(polygon1, polygon2) 
+2

Có thể bạn có thể thêm liên kết tới câu hỏi trên gis.stackexchange? Tôi cho rằng bạn có câu trả lời này ... –

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