2012-01-11 24 views
6

Ben shapefiles gelen nokta ve çokgenler arasındaki Kavşak (Mekansal Üyelik) nasıl öğrenmeye çalışıyorum. Benim fikrim en yakın noktaları ve çokgenlerin içinde tamamen eşleşen noktaları elde etmektir. Argis olarak YAKIN adlı maçı seçeneği için bir işlev var ve onlar tarafından tanımlamış: ". Eşleştirilir bir hedef özelliği en yakın olan katılmak özellikleri özelliği iki veya daha fazla katılmak özellikleri aynı mesafede hedeften olması mümkündür Bu durum meydana geldiğinde, birleştirme özelliklerinden biri rastgele eşleştirme özelliği olarak seçilir. "En yakın ilişkili çokgen için bilgileri R?

Noktaları çokgenlerle kesiştirme işlevim var, Lyndon Estes tarafından r-sig-geo listesine katkıda bulunuldu ve kod, tüm çokgenler tüm alanı doldurduğunda çok iyi çalışıyor. İkinci durum Mekansal birleşim mesafesi olarak bilinir ve ArcGIS, ArcGIS'in yaptığı gibi match_option CLOSEST olduğunda INTERSECT olarak bilinir. Böylece, alan tüm çokgenler tarafından doldurulmadığında nokta ile poligon arasındaki minimum mesafeyi değiştirebilirsiniz.

İşte veriler ve birinci INTERSECT işlevi var:

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) 

Lyndon ile bazı fikirler paylaşma, bana anlattı bu:


ben olacaktır yapmanın en kolay şeyi düşünmek Her bir noktanın çevresine bir tampon yerleştirin (yansıtılmış koordinatlarda 50 m'yi belirtebilirsiniz), bunları çokgenlere dönüştürün ve sonra göreviniz iki farklı çokgen nesnesinin bir kesişimine dönüşür.

Ben R Bu tür işlemlere yapmadıysanız, ama şu fonksiyonları ile cevap bulabiliriz şüpheli: Sorunu gösteren verilerin bir alt kümesini kadar koyarak öneririz

library(sp) 
?over 

library(rgeos) 
?gBuffer 
?gIntersects 

ve o zaman poligonda çokgenler arası kesişme/bindirmeler hakkında daha iyi bir fikri olan başka biri yöntemi önerebilir. En yakın poligona girebilmeleri için şekil dosyasındaki noktalar yarıçapında

yapılmalıdır.

Bu işlevlerin bunu başarmaya yardımcı olabileceğini biliyorum.

library(sp) 
?over 

library(rgeos) 
?gBuffer 
?gIntersects 

Üzerinde çalışıyorum, yani herhangi bir yorum veya yardımcı çok apreciated olurdu!

+2

http://gis.stackexchange.com/questions/18726/spatial-distance-join-between-polygon-and-points-using-r de Çapraz yayınlanmıştır. Bu geçerli bir seçim gibi gözüküyor, ancak Pantaleon, * her * sitede başladığınız iş parçacıklarındaki * sitelerin cevaplarını özetlemenizi beklediğimiz anlamına geliyor. – whuber

+0

Tamam, teşekkürler. Bu konuda oldukça yeniim! –

cevap

1

Ben sp ve rgeos kullanarak poligon bindirmelere poligonu yapıyor mümkün olduğunu var. Sp'yi yükledikten sonra rgeo'ları yüklemeniz gerekir.

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

Belki de gis.stackexchange üzerindeki soruya bir link ekleyebilirsin? Sanırım bu cevabı aldın ... –