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!
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
Tamam, teşekkürler. Bu konuda oldukça yeniim! –