Hello.

 Sorry I'm not "Dr."

 Here is my Non-Contiguous Area-based "Shrinking"
Cartogram script for maptools.

 This script doesn't support multi-parts polygon shape. 

 Please try this.

###############
require(maptools)

#
# Non Contiguous Area-based Cartogram
#
createNonContiguousAreaBasedCartogram<-function(mapObj,targetAttribute,areaAttribute){
  densities<- sqrt(targetAttribute/areaAttribute) #
calclulate given attribute value

  maxDensity<-max(densities) # get Maximum of densities
  
  k <- 1/maxDensity

  L <- k * densities

  centroidXY<-get.Pcent(mapObj) # get polygons' centroids
  
  mapObj2 <- mapObj[[1]]
  
  for(i in 1:length(mapObj2)){
    if(mapObj2[[i]]$nParts == 1){
      coords <- mapObj2[[i]]$verts
      newX<-L[i] * (coords[,1] -  centroidXY[i,1]) +
centroidXY[i,1] # new X coordinate
      newY<-L[i] * (coords[,2] -  centroidXY[i,2]) +
centroidXY[i,2] # new Y coordinate
      polygon(newX,newY,col="red") #draw polygon
    }
  }
}



columbus<-read.shape(system.file("shapes/columbus.shp",package="maptools"))
#load polygon shape file


plot(columbus)

createNonContiguousAreaBasedCartogram(columbus,columbus$att.data$CRIME,columbus$att.data$AREA)


> In the days when I had more time to work on this
> stuff I looked into
> programming continuous cartograms for maptools.

 There are  lots of arcscripts for contiguous codes in
following ESRI's arcscripts site.



http://arcscripts.esri.com/scripts.asp?eLang=&eProd=&perPage=10&eQuery=contiguous&Submit2=Search


 GeoDa(which will be opnssource) can display Doring's
circular cartogram which use Cellular Automata for good
performance.(https://geoda.uiuc.edu/pdf/geoda095i.pdf).


 Some Japanese GIS researcher has tried to employ some
optimisation method for Doring's and Contiguous one.


 Regards.

_______________________________________________
R-sig-Geo mailing list
R-sig-Geo@stat.math.ethz.ch
https://stat.ethz.ch/mailman/listinfo/r-sig-geo

Reply via email to