多邊形匹配GIS點I具有含約150個連續的地理區域(多邊形),它們一起構成一個地理區域的庫ESRI形狀文件。我也有一個csv文件,其中包含60,000個事件,每個事件都有一組唯一的x,y點座標。在形狀文件中的150個多邊形的一個(也是唯一一個)中的每一個CSV文件的事件發生,但我不知道該多邊形的一個與每個記錄相關聯。因此,我需要編寫一個算法,以找出其中每個事件發生的多邊形的身份。我需要編寫的算法輸出將使我能夠隨後計算統計數據,例如特定多邊形(地理區域)內發生特定類型事件的可能性。 (當然,形狀文件不僅僅是一個文件,它是一個包含8個文件的目錄,其文件擴展名包括.dbf,.prj,.qix,.sbn,.sbx,.shp,.xml和.SHX。)與ESRI形狀文件
我沒有一個ArcGIS許可。我已經找到了文件地理數據庫API在http://resources.arcgis.com/content/geodatabases/10.0/file-gdb-api,但我不知道它是正確的工具集,而我也無法找到示例代碼。
任何人都可以看到一些用於查找哪個多邊形(來自形狀文件)的大量點(來自諸如csv文件之類的外部數據源)的代碼落入內部嗎?
此外,我需要指定我需要能夠爲每個事件的csv記錄添加相關多邊形的標識的特定代碼。因此,僅僅繪製地圖上的點來顯示哪些多邊形包含事件是不夠的。我根本不需要可視化這些數據。相反,我需要的是能夠標記多邊形ID每個事件記錄在CSV文件中,這樣我可以做後續的數值分析,是不是在視覺性。
文章鏈接,教程,並在此主題的其他資源也很受青睞。我認爲這是一個人們每天都在解決的問題,因此如果一個人知道如何去尋找它,那麼必須有一個確定的代碼庫。我每天都用Java編寫代碼,因此Java解決方案是首選。但是,如果您有使用不同語言編寫的良好代碼示例,則可以從另一種語言移植某些內容。
* 編輯:*
我試圖根據Spacedman的建議下列R-代碼,我得到了以下錯誤消息:
> myCSV <- read.csv(file="myCSVFile.csv",head=TRUE,sep=",")
> pts = SpatialPoints(myCSV)
> ZipCodes = readShapeSpatial("path/myshapefile.shp")
> overlay(myCSV,ZipCodes)
Error in function (classes, fdef, mtable) : unable to find an inherited method for function "overlay", for signature "data.frame", "SpatialPolygonsDataFrame"
>
見下面我的其他意見。
第二個編輯:
,我結束了使用R代碼爲:
myCSV <- read.csv(file="myData.csv",head=TRUE,sep=",")
pts = SpatialPoints(myCSV)
ZipCodes = readShapeSpatial("myPath/ZipCodes.shp")
write.csv(ZipCodes$ZIPCODE[overlay(pts,ZipCodes)], "ZipMatches.csv", quote=FALSE, row.names=FALSE)
注:我不得不使用:
summary(ZipCodes)
找到包含郵政編碼編碼的字段的名稱。在我運行摘要(ZipCodes)之前,腳本只是放出每個郵政編碼的索引,而不是郵政編碼本身。
我不認爲這是太辛苦與R.編寫爲R可接受的解決辦法? – 2012-01-08 10:12:33
@RomanLuštrik,R可以工作。我希望看到示例代碼。 +1試圖幫助我。 – CodeMed 2012-01-08 20:13:36
您在ZipCodes上覆蓋myCSV,而不是'pts'SpatialPoints對象!錯誤消息是說「我不知道如何將數據幀覆蓋到SpatialPolygons數據框上」。覆蓋(pts,ZipCodes)應該可以工作。 – Spacedman 2012-01-09 22:44:27