Jushan Liu
[未知用户] 我读进去SHP数据后,运行
myMap2poly=function(mapdata)
{
lapply(x@polygons,function(x) x@Polygons[[1]]@coords);
}
mapPolygon=myMap2poly(x)
出现错误提示Error in is.vector(X) : object 'x' not found
是什么问题?
Jushan Liu
[未知用户] 不好意思,以前问过这个问题,不用回答了
邱怡轩
[未知用户] 我犯糊涂了,应该把那个函数中的x改成mapdata,正确的函数应该是
myMap2poly=function(mapdata)
{
lapply(mapdata@polygons,function(x) x@Polygons[[1]]@coords);
}
Long Qin
用SAS试一下:
data china2;
length IDNAME $18;
input ID IDNAME $;
cards;
1 安徽省
22 北京市
33 重庆市
7 福建省
15 甘肃省
30 广东省
16 广西壮族自治区
18 贵州省
31 海南省
10 河北省
8 黑龙江省
9 河南省
34 香港特别行政区
12 湖北省
11 湖南省
4 江苏省
3 江西省
5 吉林省
19 辽宁省
35 澳门特别行政区
20 内蒙古自治区
21 宁夏回族自治区
6 青海省
26 陕西省
25 山东省
23 上海市
24 山西省
32 四川省
36 台湾省
28 天津市
13 新疆维吾尔自治区
14 西藏自治区
29 云南省
2 浙江省
;
run;
%annomac;
%MAPLABEL (maps.china,china2,labelout,idname,id,font=simhei,color=crimson,size=2,hsys=3);
proc gmap map=maps.china data=china2 all;
id id;
choro idname / nolegend levels=1 anno=labelout;
run;quit;
Jushan Liu
[未知用户] 多谢,我当时可能头脑不清楚,哈哈
my9690
不好意思,由于maptools程序包更改的太多,而且上文用到的GIS数据也有更新,所以,现在看您的博文有很多地方对应不上。
您能按现在的GIS数据和maptools程序包重新更新一下内容吗?
正在写论文,很急需这部分内容,查找了很多书,书上没有这部分。看您的文章有很大的提示,很感谢您。麻烦您按照现在的内容更新一下代码好吗,谢谢。
my9690
您好,非常不好意思麻烦您。
由于maptools和Gis文件的更新都比较大,您可以重新更新一下博文吗?
很着急学这部分内容,谢谢您了。
邱怡轩
[未知用户] 呃,关键的地方我已经用红色的文字重新修正了,不知道还有哪些地方需要更新?最好是能列出一个清单,我重新更新一下。
zwdbordeaux
研究了一下数据结构:
更新之后的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:留言时候的那个认证太难了,失败了几次才成!!
Ihavenothing
[未知用户] 读写shapefile应该可以借助一些第三方的工具,我大概搜了一下,似乎有很多OpenGIS什么的开源软件,应该可以做到吧。
zwdbordeaux
[未知用户] 多谢!
这个问题已经通过maptools包中的
writePolyShape()搞定!
此外,对于画某些特定省份的问题可以如下解决:
plot(y[y$NAME%in%provname,],col="green",border="black")
yuxiya
[未知用户] 学习一下
Waste
请问用R能不能画出按四位数邮政编码分区的中国地图
每一地区按照资料而有不同颜色
jueduijingying
将这三个文件解压到同一个目录下?可以直接把这三个文件放在桌面上的文件夹里吗?还是要放在特定程序包里面?
我用x=readShapePoly('bou2_4p.shp'),然后出来的结果是:Error in getinfo.shape(filen) : Error opening SHP file,求解答,先谢了
Ihavenothing
[未知用户] 你应该是没有把R的工作目录设为文件所在的目录,见getwd()命令。
jueduijingying
[未知用户] 谢谢,果然有用了~ 我现在是把china-province-border-data.tar这个文件夹里的东西拷到R的bin(即getwd()所在文件)文件里了,是这样的意思吗?
Ihavenothing
[未知用户] 我之前其实说得还不准确,getwd()是获取工作目录,事实上R是可以自己设定工作目录的,相应的命令是setwd(),里面加上三个文件所在的目录就行了,比如setwd("D:\\work"),表达反斜杠的时候要写两个。
sociology
有没有人知道某个省的各个区,甚至更小地理单位的GIS地图那里找得到?
Mathsoros
[未知用户] 我有一些关于R语言的问题,可以请教您吗?
Ihavenothing
[未知用户] 发到论坛里大家一起讨论吧,呵呵。