[GRASS-user] Display postgis query
Moritz Lennert
mlennert at club.worldonline.be
Tue May 10 11:52:50 EDT 2011
On 10/05/11 02:32, Daniel Victoria wrote:
> Hi all,
>
> I have a polygon map of municipalities and a separate table with
> census data, like soy production per year (10 years of data) and other
> data, for each municipality. What I'd like to do is to be able to
> display a vector of a given query, for instance: all municipalities
> that had soy production in 2005 above a certain level. Or display a
> map where the polygon colors are a function of soy production in a
> given year (cartograms).
>
> Now, the problem is that, since I have 10 years of data and several
> variables (soy, corn, GDP, population), I have the municipal map in
> one table and the census data in a view with 2 million records and
> both can be linked by municipal code.
>
> I know that d.vect will let me put a where clause but, can I do a
> query looking at another table (view). Or is it easier to create a
> temp vector with the data I want (v.select or db.select maybe) and
> then display the temp vect?
You can use subselect clauses in the where, and in these subselect
clauses you can call other tables. Here's an example with the North
Carolina demo set in a mapset with a PostgreSQL backend:
g.copy vect=comm_colleges,mycolleges
g.copy vect=hospitals,myhospitals
#create a table
v.distance -a from=mycolleges to=myhospitals upload=cat,dist
table=dist_colleges_hospitals col=to_cat,dist
#example subselect in d.vect using the dist_colleges_hospitals table
d.vect myhospitals where="cat in (select to_cat from
dist_colleges_hospitals where from_cat=1 and dist<100000)"
#the same thing with a (in this case redundant) join clause
d.vect myhospitals where="cat in (select myhospitals.cat from
myhospitals JOIN dist_colleges_hospitals ON myhospitals.cat=to_cat where
from_cat=1 and dist<100000)"
But the above is for GRASS maps with attribute tables in PostgreSQL. In
the title of you message you speak of a PostGIS table, i.e. with the
geometries in PostgreSQL, not in GRASS. I imagine you access this table
via v.external ? Don't know what impact this might have, but just give
it a try.
A long while ago there was a discussion about implementing an even more
arbitrary SQL access to data, and I implemented a proof-of-concept
version of d.vect.chart allowing this [1], but we never took this any
further.
Moritz
[1] http://lists.osgeo.org/pipermail/grass-dev/2006-October/026625.html
More information about the grass-user
mailing list