我正在尝试完成与此问题相同的任务:Cartogram + choropleth map in R,但是我希望从一个SpatialPolygonsDataFrame开始,并希望最终得到相同类型的对象。
我可以将对象保存为shapefile,使用scapetoad,重新打开并转换回来,但我宁愿在R中全部完成,以便程序是完全可重复的,并且我可以自动编写几十种变化。
我已经在github上分叉了Rcartogram代码,并添加了我的努力here。
本质上,这个演示会在地图上创建一个SpatialGrid,查找网格每个点的人口密度,并将其转换为cartogram()
所需的密度矩阵格式。到目前为止一切都很好。
但是,如何根据cartogram()
的输出插值原始地图点?
这里有两个问题。第一个是将地图和网格转换为相同的单位以允许插值。第二个是访问每个多边形的每个点,插值它们,并保持它们的正确顺序。
网格以网格单位表示,地图以投影单位表示(在示例longlat中)。要么将网格投影到longlat,要么将地图投影到网格单位。我的想法是制作一个虚拟CRS,并与package(rgdal)
中的spTransform()
函数一起使用,因为这可以最小化处理对象中的每个点的麻烦。
访问每个点很困难,因为它们位于SpPDF对象的几层之下:object>polygons>Polygons>lines>coords。有没有想法如何访问这些并保持整个地图结构的完整性?
Rcartogram
时,偶然发现了这个问题。到目前为止,我的建议是使用ScapeToad;我正在尝试决定是否可以将其简单性移植到R中。 - MichaelChirico