今天再次搞四川和重庆的问题。
1、搞清楚, plot(c(1,1,1,1,1,1,1,1,2),c(1,1,1,1,1,1,1,1,2))和 plot(c(1,2),c(1,2))的制图效果一样,没有因为点的重复,而加深,这和text 不同。所以在 重庆和四川的边界点,制图上并没有因此加深。(还纠结过很久,⊙﹏⊙b汗)
- require(maptools)
- x= readShapePoly("bou2_4p.shp")#中国省边界shp文件,附件上传此文件。
- chongqing=slot(x@polygons[[208]],"Polygons")[[1]]@coords
- shichuang=slot(x@polygons[[206]],"Polygons")[[1]]@coords
- data=rbind(shichuang[-1,],chongqing[-1,]);plot(data)
- data1=data[duplicated(data)+duplicated(data,fromLast=T)>0,];plot(data1)#边界点
- #如果觉得plot不好看,可以用maps包
- require(maps)
- map(list(x=c(shichuang[,1],NA,chongqing[,1]),y=c(shichuang[,2],NA,chongqing[,2])))
复制代码
2、计算面积
尝试通过 经纬度 计算面积。需要大家的帮助。从网上查阅,有些 如何计算坐标 (X1,Y1),(X2,Y2),...(X1,Y1) 组成的闭环的多边形面的例子,下面的这个网站,需要科学上网,。
http://local.wasp.uwa.edu.au/~pbourke/geometry/polyarea/
- n_cq=length(chongqing)/2
- abs(0.5*sum(chongqing[1:(n_cq-1),1]*chongqing[2:n_cq,2]-chongqing[1:(n_cq-1),2]*chongqing[2:n_cq,1]))
复制代码[1] 7.715986
- > x@data[x@data$NAME=="重庆市",]#在第207位置,看看面积
- AREA PERIMETER BOU2_4M_ BOU2_4M_ID ADCODE93 ADCODE99 NAME
- 207 7.716 26.012 209 50 510000 500000 重庆市
复制代码
尝试了 四川, 上海 后 都得到 此公式的结果,和国家地图shp 文件中保存的“AREA"项,相同。
因此,请教大家, 这个公式的 单位是什么 经纬度的平方?是平面面积非球面?这个单位怎么转换 平方公里等。貌似维度的1度长度是变化的。上述公式如何解释?
bou2_4p.rar
(403.63 KB)
本附件包括: