У меня есть файл формы ESRI, содержащий библиотеку около 150 смежных географических областей (полигонов), которые вместе составляют географический регион.У меня также есть CSV-файл, содержащий 60000 событий, каждое из которых имеет уникальный набор координат точек x, y.Каждое из событий в файле csv происходило в пределах одного (и только одного) из 150 полигонов в файле формы, но я не знаю, какой из полигонов связан с каждой записью.Поэтому мне нужно написать алгоритм, который будет определять идентичность многоугольника, внутри которого произошло каждое из 60000 событий.Вывод из алгоритма, который мне нужно написать, позволит мне впоследствии вычислять статистику, такую как вероятность определенных типов событий, происходящих в определенных многоугольниках (географических областях).
(Также, конечно, формаЭто не просто один файл, это каталог, содержащий 8 файлов с расширениями, включая .dbf, .prj, .qix, .sbn, .sbx, .shp, .xml и .shx.)
У меня нет лицензии ArcGIS.Я нашел API файловой базы геоданных на http://resources.arcgis.com/content/geodatabases/10.0/file-gdb-api, но я не уверен, что это правильный набор инструментов, и у меня также возникают проблемы с поиском примера кода.
Может кто-нибудьпокажите мне какой-нибудь код для определения того, какой полигон (из файла формы) каждая из большого количества точек (из внешнего источника данных, такого как файл CSV) попадает в пределы?
Кроме того,Мне нужно указать, что мне нужно иметь возможность добавлять конкретный код для идентификации соответствующего многоугольника в запись CSV для каждого события.Поэтому мне недостаточно просто нанести точки на карту, чтобы визуализировать, какие полигоны содержат события.Мне не нужно визуализировать эти данные вообще.Вместо этого мне нужно иметь возможность пометить идентификатор многоугольника для каждой записи события в файле csv, чтобы я мог выполнять последующий численный анализ, который не является визуальным по своей природе.
Ссылки на статьи, учебные пособия идругие ресурсы по этой теме также приветствуются.Я полагаю, что это проблема, которую люди решают каждый день, поэтому должна существовать установленная кодовая база, если человек знает, как ее искать.Я пишу на Java каждый день, поэтому решения на Java предпочтительнее.Тем не менее, я могу портировать что-то с другого языка, если у вас есть хороший пример кода, написанный на другом языке.
* РЕДАКТИРОВАТЬ: *
Я попытался следующий код R на основе предложения Spacedman, и я получил следующее сообщение об ошибке:
> 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), скрипт просто выводил индекс каждого почтового индекса, а не сам почтовый индекс.