绘制某一省份的地图,查找某一省份的ADCODE99代码
library("maptools")
china_map=readShapePoly("bou2_4m/bou2_4p.shp")
plot(china_map)
plot(china_map,col=gray(924:0/924))
此时,china_map
中保存的是各个省 / 直辖市的多边形面图,数据类型是SpatialPolygonsDataFrame
。
这个SpatialPolygonsDataFrame
类型并不是真正的data.frame
类型,而是一个 sp 包定义的类,只不过重载了 []
和 $
运算符,使得一些行为上与data.frame
相类似。
names(china_map)
可以发现mydat
中有 925 条记录,每条记录中含有面积(AREA)、周长(PERIMETER)、各种编号、中文名(NAME)等字段。其中中文名(NAME)字段是以 GBK 编码的
table(iconv(mydat$NAME, from = "GBK"))
我的环境是 UTF-8,所以需要iconv
函数转化一下才能正常显示。
结果显示多数省的地图都是由一个多边形构成,少数临海省 / 直辖市由于有很多附属岛屿,多边形数目比较多。
利用与data.frame
相似的 []
和 $
运算符操作,我们可以迅速提取出一个省市的数据,比如上海及附属崇明岛:
Shanghai = china_map[china_map$ADCODE99 == 310000,]
plot(Shanghai)
#其中 ADCODE99 是国家基础地理信息中心定义的区域代码,共有 6 位数字,由省、地市、县各两位代码组成。
在长沙地图上描出个下去流行病的个数多少(颜色代表流行病个数)
首先把长沙所辖地区找到,这个可以根据 ADCODE99 编码的前 4 位定位长沙,去查表就可以了。但是这个地名是 99 年的标准,新版正在制定过程中,随时会变。我们权且以此为例。如果找不到表,可以通过代码在命令行下手工查找:
setwd("E:/中国GIS地图/国家基础地理数据")
library("maptools")
mydat = readShapePoly("bou4_4m//BOUNT_poly.shp")
tmp = iconv(mydat$NAME99, from = "GBK")
grep("长沙", tmp, value = TRUE)
grep("长沙", tmp)
mydat$ADCODE99[grep("长沙", tmp)]
这样我们就知道了长沙 ADCODE99 编码的前 4 位是 4301,其中 43 代表湖南省,01 就是长沙市。
Shanghai = china_map[china_map$ADCODE99 == 310000,]
plot(Shanghai)