I would use something that is designed to do this analysis - R would be an
obvious choice but there are others - using Python you can connect to Postgis
to grab the data and then rpy to run R commands from python - we have used this
configuration successfully using Django and it works fast enough for the web
generating an image - this could of course be optimised to cache outputs if
performance is an issue.
A synopsis of spatial functions in R is shown below:
http://cran.r-project.org/web/views/Spatial.html
Some sample code to run IDW below (just a hack but you get the idea).
import rpy2.robjects as robjects
import sys
#Create R stuff and load libraries
R = robjects.r
#R.library('sp')
R.library('gstat')
R.library('raster')
R.library('RPostgreSQL')
R("drv <- dbDriver('PostgreSQL')")
R("con <- dbConnect(drv, dbname='geoprocessing', user='postgres')")
R("rs <- dbSendQuery(con, 'SELECT x, y, value FROM randompts')")
R("na <- fetch(rs, n=-1)")
R("e <- na.omit(na)")
R("coordinates(e) <- ~x+y")
R("x.range <- as.integer(range(e@coords[,1]))")
R("y.range <- as.integer(range(e@coords[,2]))")
R("grd <- expand.grid(x=seq(from=x.range[1], to=x.range[2], bx=25),
y=seq(from=y.range[1], to=y.range[2], by=25))")
R("coordinates(grd) <- ~x+y")
R("gridded(grd) <- TRUE")
R("idw.out <- idw(value~1, e, grd, idp=2.5)")
spplottext = "spplot(idw.out, \"var1.pred\", col.regions=topo.colors(20),
pretty=TRUE)"
print(spplottext)
res = R(spplottext)
print(res)
sys.exit(0)
I am sure there are other solutions along the same lines.
Phil
>________________________________
> From: Puneet Kishor <[email protected]>
>To: PostGIS Users Discussion <[email protected]>
>Sent: Tuesday, 6 December 2011, 1:54
>Subject: Re: [postgis-users] spatial distribution maps (heat maps?)
>
>Steve,
>
>Thanks for your reply.
>
>
>On Dec 5, 2011, at 6:52 PM, Stephen Woodbridge wrote:
>
>> On 12/5/2011 6:45 PM, Puneet Kishor wrote:
>>> I am looking to create some heatmap-ish or DEM-ish spatial
>>> distribution visualizations. Any suggestions on how to go about doing
>>> so given a lon-lat containing geom column in PostGIS?
>>
>> ..
>>
>> Create an empty raster. Then select your points and for each points and for
>> each one "add" the sample dot centered on your location to to the raster. By
>> "add", I mean you need to add the value of the pixels in the dot to the
>> pixels in the raster. So raster=1 + dot=3 => raster=4 and limit it at
>> maximum saturation. This should work for multiple channels also. This should
>> give you a heat map.
>>
>
>
>Reading the above made me realize that I should have rephrased my question --
>I don't want to create images on the server side. I realize now that what I
>really want to do is to do spatial clustering on the server side and then send
>the data to the browser. I wrote my own very naive clustering routine in Perl,
>and also tried Algorithm::KMeans [1]. This kind of analysis allows me to
>create a summary of my data that I can then plot on the client (see image at
>[2]).
>
>Of course, my algorithm is way too naive, and waaaaay too slow, although I
>*can* compute the summary and cache it using Storable.
>
>So, here is my rephrased question -- I am looking to do spatial clustering on
>my Pg data. The added complication is that I do not have access to WKTRaster.
>
>
>[1]
>http://search.cpan.org/~avikak/Algorithm-KMeans-1.30/lib/Algorithm/KMeans.pm
>[2] http://dl.dropbox.com/u/3526821/occurrences.png
>_______________________________________________
>postgis-users mailing list
>[email protected]
>http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>
>_______________________________________________
postgis-users mailing list
[email protected]
http://postgis.refractions.net/mailman/listinfo/postgis-users