2016-11-24 45 views
1

我正尝试使用readOGR函数从包装rgdal将英格兰的CCG边界(Available here, 200Kb)的KML映射导入到R中。我的最终目标是通过根据一些关联值着色CCG来创建热图。在一个数据框中,我有一个包含CCG名称旁边的值的列表。我需要将该数据框中的CCG名称与导入的地图对象中的CCG名称相匹配,并根据该值分配颜色。但是,我看不到地图对象中导入的任何CCG名称,尽管它们存在于KML文件中。这就是我在做的:readOGR(rgdal)无法从XML获取多边形名称

library(sp) 
library(rgdal) 
library(maps) 
library(maptools) 

假设KML文件在工作目录中。 清单层:

ogrListLayers("Clinical_Commissioning_Groups_April_2016_Ultra_Generalised_Clipped_Boundaries_in_England.KML") 

OGRGeoJSON层:

ccg_boundaries <- ReadOGR("Clinical_Commissioning_Groups_April_2016_Ultra_Generalised_Clipped_Boundaries_in_England.KML","OGRGeoJSON") 

řStudio显示有两个部分(右字?)中的对象。

polygons,它包含每个多边形的数据,例如,对于第一种:

> [email protected][1] 
[[1]] 
An object of class "Polygons" 
Slot "Polygons": 
[[1]] 
An object of class "Polygon" 
Slot "labpt": 
[1] -2.104671 54.040320 
Slot "area": 
[1] 0.168067 
... 

而且data,两个变量(NameDescription),我会希望包含CCG的名字,但它是空:

> [email protected] 
    Name Description 
0     
1     
2     
3     
4     
5   

但是,CCG名那里有KML文件,如果用Word编辑器打开,可以看到,例如第一个字母顺序是“NHS Airedale,Wharfedale和Craven”。

<PolyStyle><fill>0</fill></PolyStyle></Style> 
    <ExtendedData><SchemaData schemaUrl="#OGRGeoJSON"> 
     <SimpleData name="objectid">1</SimpleData> 
     <SimpleData name="ccg16cd">E38000001</SimpleData> 
     <SimpleData name="ccg16nm">NHS Airedale, Wharfedale and Craven CCG</SimpleData> 

是否有可以选择readOGR或其他选项来提取它们并包含在对象中?

回答

1

好的,如果有人遇到同样的问题,这里是我找到的解决方案。

该网站提供两种格式的地图:KML and SHP。我选择了KML,因为这是在我遵循的一个工作示例中使用的。但是这个特定的KML文件似乎有问题,或者它是如何生成的。我用Shapefile(SHP)来尝试这个过程,而且它像一个魅力一样工作。

形状文件可以通过相同的函数被读入的R,但不需要指定该层:

ccg_boundaries <- ReadOGR("Clinical_Commissioning_Groups_April_2016_Ultra_Generalised_Clipped_Boundaries_in_England.SHP") 

CCG名称是现在在ccg16nm变量:

> head([email protected]) 
    objectid ccg16cd         ccg16nm st_areasha st_lengths 
0  1 E38000001 NHS Airedale, Wharfedale and Craven CCG 1224636590 193149.74 
1  2 E38000002       NHS Ashford CCG 582174805 122841.19 
2  3 E38000003     NHS Aylesbury Vale CCG 984352696 229544.11 
3  4 E38000004   NHS Barking and Dagenham CCG 36315011 31196.87 
4  5 E38000005       NHS Barnet CCG 86654018 41833.69 
5  6 E38000006      NHS Barnsley CCG 327520495 106476.52