[Qgis-developer] [Fwd: [R-sig-Geo] Could you add my 'Jenks' method to your classInt package?]

Paolo Cavallini cavallini at faunalia.it
Wed Nov 21 03:52:13 EST 2007


Is this of some interest for qgis?
All the best.
pc

-------- Messaggio Originale  --------
Oggetto: [R-sig-Geo] Could you add my 'Jenks' method to your classInt
package?
Data: Wed, 21 Nov 2007 17:33:55 +0900 (JST)
Da: Hisaji ONO <hi_ono2001 at ybb.ne.jp>
A: Roger.Bivand at nhh.no
CC: r-sig-geo at stat.math.ethz.ch

Hello.

 I've tried to port Java code for Jenks optimization
classification method "natural break" to R, although far
from smart coding.

 My java code was ported Jenks's Basic code and I checked
these results compared to results of ArcView 3.x.

 Jenks method derived from Fischer, but seems to be a
little different in the algorithm.

 My code's results are similar to results of current
ArcGIS's, but not equal to them. Accordindg to Murray, A.
T. & Shyy, T. K.'s papaer (IJGIS, 2000, 14-7, 649-667,
http://geog-www.sbs.ohio-state.edu/faculty/murray/personal/research/crimepubs/murray-shyy2000.pdf),
there are difference between ArcGIS's and MapInfo's. How
about Autodesk's Map Guide Open Source which has employed
Jenks's method as a function.

 Could you try my following code and add this into your
classInt package if you like?


 Regards.





else if (style == "fisher") {
---- cut ---- cut ---- cut ---- cut ---- cut ----
        }
 else if (style == "Jenks") { # Jenks Optimisation Method
            d<- sort(var)
           #work<-matrix(0,k,length(d))
           mat1<-matrix(1,length(d),k)
           mat2<-matrix(0,length(d),k)
           mat2[2:length(d),1:k]<-10000000 #R's max double
value?
           v<-0

           for(l in 2:length(d)){
             s1=s2=w=0
             for(m in 1:l){
               i3 <- l - m + 1
               val <- d[i3]
               s2 <- s2 + val * val
               s1 <- s1 + val
               w<-w+1
               v <- s2 - (s1 * s1) / w
               i4 <- trunc(i3 - 1)

               if(i4 !=0){
                 for(j in 2:k){
                   if(mat2[l,j] >= (v + mat2[i4, j - 1])){
                     mat1[l,j] <- i3
                     mat2[l,j] <- v + mat2[i4, j - 1]
                   }
                 }
               }
             }
             mat1[l,1] <- 1
             mat2[l,1] <- v
           }

           kclass<-1:k
           kclass[k] <-length(d)
           k <- length(d)
           last<-length(d)
           for(j in length(kclass):1){
             id <- trunc(mat1[k,j]) - 1
             kclass[j - 1] <- id
             k <- id #lower
             last <- k -1 #upper
           }
           brks<-d[c(1, kclass)]
         }
         else stop(paste(style, "unknown"))



-- 
Paolo Cavallini, see: http://www.faunalia.it/pc
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 252 bytes
Desc: OpenPGP digital signature
Url : http://lists.osgeo.org/pipermail/qgis-developer/attachments/20071121/e88f04d9/signature.bin


More information about the Qgis-developer mailing list