研究了一下数据结构:
更新之后的maptools读入bou2_4p.shp之后,形成一个SpatialPolygonsDataFrame对象 (class(x)).这个对象有"data","polygons" , "plotOrder","bbox","proj4string"五个slot组成(slotNames(x)),如果想提取每个slot的数据可以通过x@slotname, slot(x,”slotname”)获得。

每个slot中包含不同的内容
data: 是一个data.frame, 包含925行,7列数据("AREA" ,"PERIMETER" "BOU2_4M_", "BOU2_4M_ID", "ADCODE93", "ADCODE99" , "NAME"),而最重要的各个省市的名称就在NAME这一列中。
plotOrder,是一个长度925的vector

bbox是一个2x2的矩阵,包含x,y值的最大和最小值

proj4string 在该数据情况下没有值(NA)

polygons: 它的情况比较复杂,本身是一个list, 长度925, 其中每个元素又为一个polygons对象,又有几层结构:
$ :Formal class 'Polygons' [package "sp"] with 5 slots
.. ..@ Polygons :List of 1
.. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
.. .. .. .. ..@ labpt : num [1:2] 114.3 22.2
.. .. .. .. ..@ area : num 8.6e-06
.. .. .. .. ..@ hole : logi FALSE
.. .. .. .. ..@ ringDir: int 1
.. .. .. .. ..@ coords : num [1:9, 1:2] 114 114 114 114 114 ...
.. ..@ plotOrder: int 1
.. ..@ labpt : num [1:2] 114.3 22.2
.. ..@ ID : chr "924"
.. ..@ area : num 8.6e-06

具体内容还没有彻底弄明白!

现在这个数据的主要局限是没有办法在英文系统下使用,或者没有办法以各个省的拼音名称进行索引和赋值。所以我想 把NAME 部分的中文名称改为拼音(这个不难实现),之后不知道有谁知道如何把修改后的数据输出保存到一个新的shp文件中?或者把这个修改后的SpatialPolygonsDataFrame对象直接保存为data, 然后就可以在英文系统上操作了!
请多帮忙!
ps:留言时候的那个认证太难了,失败了几次才成!!
[未知用户] 读写shapefile应该可以借助一些第三方的工具,我大概搜了一下,似乎有很多OpenGIS什么的开源软件,应该可以做到吧。
[未知用户] 多谢!
这个问题已经通过maptools包中的
writePolyShape()搞定!

此外,对于画某些特定省份的问题可以如下解决:
plot(y[y$NAME%in%provname,],col="green",border="black")
12 天 后
6 天 后
请问用R能不能画出按四位数邮政编码分区的中国地图
每一地区按照资料而有不同颜色
13 天 后
将这三个文件解压到同一个目录下?可以直接把这三个文件放在桌面上的文件夹里吗?还是要放在特定程序包里面?


我用x=readShapePoly('bou2_4p.shp'),然后出来的结果是:Error in getinfo.shape(filen) : Error opening SHP file,求解答,先谢了
[未知用户] 你应该是没有把R的工作目录设为文件所在的目录,见getwd()命令。
[未知用户] 谢谢,果然有用了~ 我现在是把china-province-border-data.tar这个文件夹里的东西拷到R的bin(即getwd()所在文件)文件里了,是这样的意思吗?
[未知用户] 我之前其实说得还不准确,getwd()是获取工作目录,事实上R是可以自己设定工作目录的,相应的命令是setwd(),里面加上三个文件所在的目录就行了,比如setwd("D:\\work"),表达反斜杠的时候要写两个。
22 天 后
有没有人知道某个省的各个区,甚至更小地理单位的GIS地图那里找得到?
21 天 后
[未知用户] 我有一些关于R语言的问题,可以请教您吗?
[未知用户] 发到论坛里大家一起讨论吧,呵呵。
2 个月 后
23 天 后
请教老师:

执行了
> provname=c("北京市","天津市")
> provcol=c("red","green")
> plot(x,col=getColor(x,provname,provcol,"white"))
但是提示错误: 类别为'closure'的对象不可以取子集

为什么呢?
[未知用户] 把你的str(x)和traceback()打印出来看看。
17 天 后
对SpatialPolygonsDataFrame这个东西搞不懂。希望有更多参考资料。
2 个月 后
再激动感叹号也不能超过三个!:)呵呵。。。
getColor这个函数是不是也不行了?
我试了着色不上了……
9 天 后
[未知用户] getColor是板主自寫的 煩請詳讀點好嗎
1 个月 后
我们用GIS做,但是美中不足,就是总是画不出美丽的画。这是天赋问题么