如何在R中读取Mapinfo文件

8

法国国家统计局(Insee)提供MapInfo格式的地理数据(两个文件.mid和.mif和一个dbf文件)。我该如何在R中读取这些文件?

这里有一个示例

2个回答

10

有一个适用于MapInfo文件的OGR驱动程序(包名为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

GRASS 截图


我遇到了和你一样的错误:Error in stopifnot(is.list(srl)),并且无法使用readOGR加载的数据。感谢你的解决方案。 - PAC

5

这有点困难,因为您的pdf文件仅定义了.mid结构。

这取决于您想要使用数据做什么,但是看起来,.mid文件具有每个区域的SW坐标,并检查.mif文件,每个区域为1000平方米,因此您可以仅计算面积(针对此数据样本)而不必加载它们。

因此,这是一种加载方式,但它将取决于您想要使用数据的方式。

首先将.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
....

这段话涉及到IT技术,大致意思是每个区域都有四个边界点,还有ind和indXYNE1,我猜这就是你要找的东西?然后你可以使用SW点(或新的派生键)作为每个区域的参考来转换数据。

希望这能帮到你!具体取决于你想用这些数据做什么。


好的,就是这样。这里有一个小要点来展示它的要点 - 包括所有的步骤,在漂亮干净的代码中:https://gist.github.com/Robinlovelace/29d387f6b48fd9bf9d2d - RobinLovelace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接