Я написал средство оценки плотности ядра на Java, которое принимает входные данные в виде шейп-файлов ESRI и выводит изображение GeoTIFF предполагаемой поверхности. Для тестирования этого модуля мне нужен пример шейп-файла, и по какой-то причине мне сказали извлечь его из образцов данных, включенных в R. Проблема в том, что ни один из образцов данных не является шейп-файлом ...
Итак, я пытаюсь использовать convert.to.shapefile(4)
функцию пакета shapefiles для преобразования набора данных bei, включенного в пакет spatstat в R, в шейп-файл. К сожалению, это оказалось сложнее, чем я думал. У кого-нибудь есть опыт в этом? Если бы вы были так любезны и помогли мне здесь, я был бы очень признателен.
Спасибо, Райан
Ссылки: spatstat , шейп файлы
В пакетах и есть функции конвертации Spatial
объектов, которые можно использовать для этого. Шейп-файл состоит как минимум из точек (или линий или многоугольников) и атрибутов для каждого объекта.spatstat
maptools
library(spatstat)
library(sp)
library(maptools)
data(bei)
Принуждение bei
к Spatial
объекту, здесь просто точки без атрибутов, так как на ppp
объекте нет «меток» .
spPoints <- as(bei, "SpatialPoints")
Шейп-файлу требуется по крайней мере один столбец с данными атрибутов, поэтому создайте фиктивный файл.
dummyData <- data.frame(dummy = rep(0, npoints(bei)))
Используя SpatialPoints
объект и фиктивные данные, сгенерируйте файл SpatialPointsDataFrame
.
spDF <- SpatialPointsDataFrame(spPoints, dummyData)
На этом этапе вам обязательно следует подумать о том, какая система координат используется bei
и можете ли вы представить ее с помощью WKT CRS
(хорошо известной текстовой системы координат). Вы можете назначить это Spatial
объекту в качестве другого аргумента SpatialPointsDataFrame
или после создания с помощью proj4string(spDF) <- CRS("+proj=etc...")
(но это целая проблема сама по себе, на которой мы могли бы писать страницы).
Загрузить rgdal
пакет (это наиболее общий вариант, поскольку он поддерживает множество форматов и использует библиотеку GDAL, но может быть недоступен из-за системных зависимостей.
library(rgdal)
(Используйте writePolyShape
в maptools
пакете, если rgdal
его нет в наличии).
Синтаксис - это объект, затем «имя источника данных» (здесь текущий каталог, это может быть полный путь к .shp или папке), затем слой (для шейп-файлов имя файла без расширения) и затем имя выходного драйвера.
writeOGR(obj = spDF, dsn = ".", layer = "bei", driver = "ESRI Shapefile")
Обратите внимание, что запись не удастся, если «bei.shp» уже существует, и поэтому сначала необходимо удалить его unlink("bei.shp")
.
Перечислите все файлы, которые начинаются с «bei»:
list.files(pattern = "^bei")
[1] "bei.dbf" "bei.shp" "bei.shx"
Обратите внимание, что не существует общего конвертера «as.Spatial» для ppp
объектов, поскольку необходимо принять решение о том, является ли это точечный шаблон с метками и т. Д. - может быть интересно попробовать написать такой, который сообщает, были ли фиктивные данные требуется и так далее.
См. Следующие виньетки для получения дополнительной информации и подробностей о различиях между этими представлениями данных:
библиотека (sp); библиотека виньеток ("sp") (spatstat); виньетка ("spatstat")
Эта статья взята из Интернета, укажите источник при перепечатке.
Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.
я говорю два предложения