Французский национальный институт (Insee) предоставляет географические данные в формате MapInfo (два файла .mid и .mif и один файл dbf). Как я могу прочитать эти файлы в R?Как читать файлы Mapinfo в R
Адрес example.
Французский национальный институт (Insee) предоставляет географические данные в формате MapInfo (два файла .mid и .mif и один файл dbf). Как я могу прочитать эти файлы в R?Как читать файлы Mapinfo в R
Адрес example.
Существует OGR-драйвер для MapInfo файлов (пакет rgdal
):
R> library("rgdal")
R> ogrDrivers()[28, ]
name write
28 MapInfo File TRUE
Но есть проблема с файлами/геометрией, readOGR
выдает сообщение об ошибке:
R> ogrListLayers("R02_rfl09_UTM20N1000.mid")
[1] "R02_rfl09_UTM20N1000"
R> readOGR("R02_rfl09_UTM20N1000.mid", layer="R02_rfl09_UTM20N1000")
OGR data source with driver: MapInfo File
Source: "R02_rfl09_UTM20N1000.mid", layer: "R02_rfl09_UTM20N1000"
with 967 features and 4 fields
Feature type: wkbPolygon with 2 dimensions
Error in stopifnot(is.list(srl)) : ring not closed
Однако , Я смог прочитать файлы с GRASS GIS, которые могут быть написаны с использованием R (пакет spgrass6
):
v.in.ogr dsn=R02_rfl09_UTM20N1000.mid output=R02_rfl09_UTM20N1000 snap=1e-08
Сложно сказать, потому что ваш pdf-файл определяет только структуру .mid.
Это зависит от того, что вы хотите делать с датой, но, глядя на нее, файл .mid имеет SW-координаты каждой области и проверяет файл .mif, каждая область составляет 1000 м2, поэтому вы можете просто calcuate области (для этой выборки данных), а не загружать их в.
Так вот один из способов загрузки его, но это будет зависеть от того, что вы хотите делать с данными
сначала скопировать. csv в ваш рабочий каталог, затем
coords<-read.csv(file="R02_rfl09_UTM20N1000.mid", header=FALSE)
colnames(coords)<-c("SW.E","SW.N","ind","indXYNE1")
# add the co-ords for the area
coords$SE.N=coords$SW.N
coords$SE.E=coords$SW.E+1000
coords$NW.N=coords$SW.N+1000
coords$NW.E=coords$SW.E
coords$NE.N=coords$SW.N+1000
coords$NE.E=coords$SW.E+1000
head(coords)
Это даст Вы:
SW.E SW.N ind indXYNE1 SE.N SE.E NW.N NW.E NE.N NE.E
1 690000 1636000 241 6 1636000 691000 1637000 690000 1637000 691000
2 690000 1637000 414 3 1637000 691000 1638000 690000 1638000 691000
3 690000 1638000 240 6 1638000 691000 1639000 690000 1639000 691000
4 690000 1640000 8 0 1640000 691000 1641000 690000 1641000 691000
5 691000 1634000 142 0 1634000 692000 1635000 691000 1635000 692000
6 691000 1635000 216 5 1635000 692000 1636000 691000 1636000 692000
....
который четыре граничных точек каждой области, плюс IND и indXYNE1, которые я предполагаю, что вы ищете? Затем вы можете преобразовать данные с помощью точки SW (или нового производного ключа) в качестве ссылки для каждой области.
Надеюсь, что это поможет! Зависит немного от того, что вы хотите делать с данными.
Да, это так. Вот немного сущности, чтобы показать суть этого - включая все детские шаги, в хорошем чистом коде: https://gist.github.com/Robinlovelace/29d387f6b48fd9bf9d2d – RobinLovelace
У меня такая же ошибка, как и вы: 'Ошибка в stopifnot (is.list (srl)) 'и я не могу использовать данные, которые я загрузил с помощью' readOGR'. Спасибо за ваше решение. – PAC