[prev in list] [next in list] [prev in thread] [next in thread] 

List:       postgis-users
Subject:    Re: [postgis-users] Grid of points inside Polygon
From:       Rémi_Cura <remi.cura () gmail ! com>
Date:       2013-11-29 10:22:08
Message-ID: CAJvUf_v7GGLadeMcf8fscDZ5SExZ0CqB2yPRJrEjD2CWc=1OjA () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


First,
do you really need no duplicates?

Then, Creating an index on a 500 million row table is going to take time
and a lot of spaces (several gigas??).
I don't think you have a choice here.
Yet I'm not sure the index would be used,  I'm not an expert.

What you can do is
_create a table with only a part of points to test
_create an index on it
_check how much time distinct takes, and if it uses index.


CREATE TABLE grid_temp AS
SELECT st_x,st_y
FROM grid
LIMIT 1000000; --only 1 million points

CREATE INDEX ON grid_temp(st_x);
CREATE INDEX ON grid_temp(st_y);

EXPLAIN ANALYZE
SELECT DISTINCT st_x, st_y
FROM grid_temp ;
--(if you see some index uses in the return, it's good news)

Then doing it on all your data.



For the record,
The ideal solution would have been  :
no have a X | Y table , but a X | Y | id_of_the_road table
This way you can create a table y grouping points by id_of_the_road
 (creating so a multipoint per road).

With this , you would have far less rows, you could create an index on geom.

Then you would get the intersecting multipoints (which would be efficient),
and dedup only pair by pair (which would be efficient).


Cheers,

Rémi-C



2013/11/29 James David Smith <james.david.smith@gmail.com>

> Hi Remi / all,
>
> I am just coming back to this project. I have made some progress. But
> would appreciate advice on how best to proceed now. What I have now is
> a table with two columns, 'st_x' and 'st_y'. They are the 20 metre by
> 20 metre grid points that are within 1km of main roads in the UK. The
> table has 499,677,666 rows!  Because of the method that I used to
> create this however, I have alot of duplication of points. So I think
> I need to do something like:
>
> CREATE TABLE grid_no_duplications AS (SELECT DISTINCT(x, y) FROM grid);
>
> However I thought that first I could put an index on it?
>
> CREATE INDEX grid_x_y ON grid (st_x, st_y);
>
> Is this a good approach?
>
> Cheers
>
> James
>
> On 15 November 2013 16:39, Rémi Cura <remi.cura@gmail.com> wrote:
> > good =)
> >
> > It is better to do the buffer computation first,
> > because this way you are sure youwon't compute the same buffer many
> times.
> >
> > Something like (not so sure without trying it)
> > UPDATE ukmajrdbuffer SET geom = ST_Buffer(geom,1000);
> >
> > You may have an error if you hav e a fixed geom data type, then you could
> > just add a new column like
> >
> > ALTER TABLE ukmajrdbuffer ADD COLUMN the_geom geometry ;
> > UPDATE ukmajrdbuffer SET the_geom = ST_Buffer(geom,1000);
> >
> >
> > Cheers,
> >
> > Rémi-C
> >
> >
> >
> > 2013/11/15 James David Smith <james.david.smith@gmail.com>
> >>
> >> Hey Remi,
> >>
> >> I've actually managed to get the file 'ukmajorroads' already and have
> >> loaded it into my database.  There are 395356 rows in the database.
> There is
> >> a field called 'geom' and I have built an index on it as below;
> >>
> >> CREATE INDEX ukrds_index ON ukrds USING GIST (geom);
> >>
> >> So should I now run the same query, but do the buffering of the roads
> 'on
> >> the fly' maybe?  For example as below?
> >>
> >>
> >> CREATE TABLE lines_for_each_road AS
> >> WITH all_lines AS (
> >> SELECT *
> >> FROM all_lines
> >> ),
> >> cutted_lines AS ( --we cut the line to keep only part of lines inside
> >> road_buffer
> >> SELECT ST_Intersection(all_lines.the_geom,st_buffer(ukmajrdbuffer.geom,
> >> 1000)) as lines_cutted, direction
> >> FROM ukmajrdbuffer, all_lines
> >> WHERE ST_Intersects(st_buffer(ukmajrdbuffer.geom, 1000),
> >> all_lines.the_geom)=TRUE
> >> ),
> >> cutted_lines_SN AS ( --this is the cutted lines which going from South
> to
> >> North
> >> SELECT *
> >> FROM cutted_lines
> >> WHERE direction = 'SN'
> >> ),
> >> cutted_lines_EW AS ( --this is the cutted lines going from East toWest
> >> SELECT *
> >> FROM cutted_lines
> >> WHERE direction = 'EW'
> >> ),
> >> points AS ( -- we take the intersection of EW  lines with SN lines ,
> that
> >> is the points on the grid.
> >> SELECT ST_Intersection(clSN.lines_cutted, clEW.lines_cutted) AS point
> >> FROM cutted_lines_SN as clSN, cutted_lines_EW AS clEW
> >> WHERE ST_Intersects(clSN.lines_cutted, clEW.lines_cutted)=TRUE --no
> point
> >> ot compute an intersection if lines don't intersect
> >> )
> >> SELECT row_number() over() AS id  , point
> >> FROM points ;
> >>
> >>
> >> On 15 November 2013 15:42, Rémi Cura <remi.cura@gmail.com> wrote:
> >>>
> >>> Still is a shame :
> >>> with proper data we should have some result with about one hour i
> guess.
> >>>
> >>> Cheers,
> >>> Rémi C
> >>>
> >>>
> >>> 2013/11/15 James David Smith <james.david.smith@gmail.com>
> >>>>
> >>>> Remi,
> >>>>
> >>>> Ok. Cool. I've set the below query running. On Monday I will also
> >>>> attempt to get the original road lines file too. Let's see if we have
> >>>> a result on Monday.
> >>>> ----------------------------------
> >>>> CREATE TABLE lines_for_each_road AS
> >>>> WITH all_lines AS (
> >>>> SELECT *
> >>>> FROM all_lines
> >>>> ),
> >>>> cutted_lines AS ( --we cut the line to keep only part of lines inside
> >>>> road_buffer
> >>>> SELECT ST_Intersection(all_lines.the_geom,ukmajrdbuffer.geom) as
> >>>> lines_cutted, direction
> >>>> FROM ukmajrdbuffer, all_lines
> >>>> WHERE ST_Intersects(ukmajrdbuffer.geom, all_lines.the_geom)=TRUE
> >>>> ),
> >>>> cutted_lines_SN AS ( --this is the cutted lines which going from South
> >>>> to North
> >>>> SELECT *
> >>>> FROM cutted_lines
> >>>> WHERE direction = 'SN'
> >>>> ),
> >>>> cutted_lines_EW AS ( --this is the cutted lines going from East toWest
> >>>> SELECT *
> >>>> FROM cutted_lines
> >>>> WHERE direction = 'EW'
> >>>> ),
> >>>> points AS ( -- we take the intersection of EW  lines with SN lines ,
> >>>> that is the points on the grid.
> >>>> SELECT ST_Intersection(clSN.lines_cutted, clEW.lines_cutted) AS point
> >>>> FROM cutted_lines_SN as clSN, cutted_lines_EW AS clEW
> >>>> WHERE ST_Intersects(clSN.lines_cutted, clEW.lines_cutted)=TRUE --no
> >>>> point ot compute an intersection if lines don't intersect
> >>>> )
> >>>> SELECT row_number() over() AS id  , point
> >>>> FROM points ;
> >>>> ------------------------------------------
> >>>> Thanks
> >>>>
> >>>> James
> >>>>
> >>>> On 15 November 2013 15:37, Rémi Cura <remi.cura@gmail.com> wrote:
> >>>> >
> >>>> > You should try to get the original road file, because i will be very
> >>>> > easy to
> >>>> > reapply some buffer and filtering to keep only major road.
> >>>> > Yet, why not let it run during the week end?
> >>>> >
> >>>> > Cheers,
> >>>> >
> >>>> > Rémi-C
> >>>> >
> >>>> >
> >>>> > 2013/11/15 James David Smith <james.david.smith@gmail.com>
> >>>> >>
> >>>> >> Hey Remi,
> >>>> >>
> >>>> >> Do you think before I try running the big query you have just sent
> >>>> >> me,
> >>>> >> that I should go back and try to get the original file of uk
> roads? I
> >>>> >> mean the very original file that has not had any buffers applied or
> >>>> >> any merging done.
> >>>> >>
> >>>> >> Or shall we just go for it and see if it has finished when I come
> >>>> >> into
> >>>> >> work on Monday?! haha.
> >>>> >>
> >>>> >> Thanks
> >>>> >>
> >>>> >> James
> >>>> >>
> >>>> >> On 15 November 2013 14:01, Rémi Cura <remi.cura@gmail.com> wrote:
> >>>> >> > Outch,
> >>>> >> > you have only 8 roads in GB? =)
> >>>> >> >
> >>>> >> > This is not going to go fast till you don't have some dozens k's
> of
> >>>> >> > roads.
> >>>> >> >
> >>>> >> > I'm guessing you are not at will to send those roads?
> >>>> >> >
> >>>> >> >
> >>>> >> > The next step will be (when you'll be sure everything is OK)
> >>>> >> >
> >>>> >> >
> >>>> >> > CREATE TABLE lines_for_each_road AS
> >>>> >> > WITH all_lines AS (
> >>>> >> > SELECT *
> >>>> >> > FROM all_lines
> >>>> >> > ),
> >>>> >> > cutted_lines AS ( --we cut the line to keep only part of lines
> >>>> >> > inside
> >>>> >> > road_buffer
> >>>> >> > SELECT ST_Intersection(all_lines.the_geom,ukmajrdbuffer.geom) as
> >>>> >> > lines_cutted, direction
> >>>> >> > FROM ukmajrdbuffer, all_lines
> >>>> >> > WHERE ST_Intersects(ukmajrdbuffer.geom, all_lines.the_geom)=TRUE
> >>>> >> > ),
> >>>> >> > cutted_lines_SN AS ( --this is the cutted lines which going from
> >>>> >> > South
> >>>> >> > to
> >>>> >> > North
> >>>> >> > SELECT *
> >>>> >> > FROM cutted_lines
> >>>> >> > WHERE direction = 'SN'
> >>>> >> > ),
> >>>> >> > cutted_lines_EW AS ( --this is the cutted lines going from East
> >>>> >> > toWest
> >>>> >> > SELECT *
> >>>> >> > FROM cutted_lines
> >>>> >> > WHERE direction = 'EW'
> >>>> >> > ),
> >>>> >> > points AS ( -- we take the intersection of EW  lines with SN
> lines
> >>>> >> > ,
> >>>> >> > that is
> >>>> >> > the points on the grid.
> >>>> >> > SELECT ST_Intersection(clSN.lines_cutted, clEW.lines_cutted) AS
> >>>> >> > point
> >>>> >> > FROM cutted_lines_SN as clSN, cutted_lines_EW AS clEW
> >>>> >> > WHERE ST_Intersects(clSN.lines_cutted, clEW.lines_cutted)=TRUE
> --no
> >>>> >> > point ot
> >>>> >> > compute an intersection if lines don't intersect
> >>>> >> > )
> >>>> >> > SELECT row_number() over() AS id  , point
> >>>> >> > FROM points ;
> >>>> >> >
> >>>> >> >
> >>>> >> >
> >>>> >> >
> >>>> >> >
> >>>> >> > Cheers,
> >>>> >> >
> >>>> >> > Rémi-C
> >>>> >> >
> >>>> >> >
> >>>> >> >
> >>>> >> > 2013/11/15 James David Smith <james.david.smith@gmail.com>
> >>>> >> >>
> >>>> >> >> Hey Remi,
> >>>> >> >>
> >>>> >> >> I'll do a few checks and get back to you. Maybe I did something
> >>>> >> >> wrong
> >>>> >> >> because I set this query going on my local PostgreSQL
> installation
> >>>> >> >> but
> >>>> >> >> also on our Linux Cluster machine which is much more powerful.
> And
> >>>> >> >> it
> >>>> >> >> finished on my local installation BEFORE the cluster. So maybe I
> >>>> >> >> did
> >>>> >> >> something wrong on the local query.
> >>>> >> >>
> >>>> >> >> The query that has finished took about 1 hour.
> >>>> >> >> The query on our cluster is still running.
> >>>> >> >>
> >>>> >> >> select count(*) from ukmajrdbuffer = 8
> >>>> >> >> This is because before I was given the data the roads buffer had
> >>>> >> >> already been dissolved unfortunately.
> >>>> >> >>
> >>>> >> >> James
> >>>> >> >>
> >>>> >> >>
> >>>> >> >>
> >>>> >> >>
> >>>> >> >> On 15 November 2013 13:43, Rémi Cura <remi.cura@gmail.com>
> wrote:
> >>>> >> >> > Good !
> >>>> >> >> >
> >>>> >> >> > Something is strange with the result,
> >>>> >> >> > you get only 190k lines intersecting road buffer,
> >>>> >> >> > it is very few , I expected at least 10times this!
> >>>> >> >> > How many time took this computing by the way?
> >>>> >> >> >
> >>>> >> >> > How many road buffer geom do you have ? (select count(*) from
> >>>> >> >> > ukmajrdbuffer
> >>>> >> >> > ).
> >>>> >> >> >
> >>>> >> >> > Cheers,
> >>>> >> >> > Rémi-C
> >>>> >> >> >
> >>>> >> >> >
> >>>> >> >> > 2013/11/15 James David Smith <james.david.smith@gmail.com>
> >>>> >> >> >>
> >>>> >> >> >> Hey.
> >>>> >> >> >>
> >>>> >> >> >> Yes, it's done. Was just getting some lunch! :-)
> >>>> >> >> >>
> >>>> >> >> >> select count(*) from lines_for_each_road
> >>>> >> >> >> Result = 187033
> >>>> >> >> >>
> >>>> >> >> >> I have also just ran 'VACUUM ANALYZE' on the tables
> >>>> >> >> >> 'lines_for_each_road' as well as the table 'all_lines'
> >>>> >> >> >>
> >>>> >> >> >> I also can confirm that I have ran the following commands:
> >>>> >> >> >>
> >>>> >> >> >> CREATE INDEX all_lines_index ON all_lines USING GIST (
> the_geom
> >>>> >> >> >> )
> >>>> >> >> >> CREATE INDEX ukmajrdbuffer_index ON ukmajrdbuffer USING GIST
> >>>> >> >> >> (geom);
> >>>> >> >> >>
> >>>> >> >> >> Should we now uncomment this line from the previous query?
> >>>> >> >> >>
> >>>> >> >> >> "  SELECT row_number() over() AS id--,*  "
> >>>> >> >> >>
> >>>> >> >> >> Thanks again Remi,
> >>>> >> >> >>
> >>>> >> >> >> James
> >>>> >> >> >>
> >>>> >> >> >>
> >>>> >> >> >>
> >>>> >> >> >> On 15 November 2013 13:14, Rémi Cura <remi.cura@gmail.com>
> >>>> >> >> >> wrote:
> >>>> >> >> >> > Also if you do have indexes,
> >>>> >> >> >> > can you run a "VACUUM ANALYZE", so that the indexes will be
> >>>> >> >> >> > used?
> >>>> >> >> >> >
> >>>> >> >> >> > Cheers,
> >>>> >> >> >> >
> >>>> >> >> >> > Rémi-C
> >>>> >> >> >> >
> >>>> >> >> >> >
> >>>> >> >> >> > 2013/11/15 Rémi Cura <remi.cura@gmail.com>
> >>>> >> >> >> >>
> >>>> >> >> >> >> It should be finished by now,
> >>>> >> >> >> >> can you check you have geom indexes on :
> >>>> >> >> >> >> "ukmajrdbuffer.geom" and  "all_lines.the_geom"
> >>>> >> >> >> >>
> >>>> >> >> >> >>
> >>>> >> >> >> >> How many geoms do you have in "ukmajrdbuffer"?
> >>>> >> >> >> >>
> >>>> >> >> >> >> Cheers,
> >>>> >> >> >> >> Rémi-C
> >>>> >> >> >> >>
> >>>> >> >> >> >>
> >>>> >> >> >> >> 2013/11/15 Rémi Cura <remi.cura@gmail.com>
> >>>> >> >> >> >>>
> >>>> >> >> >> >>> Hey Sandro,
> >>>> >> >> >> >>>
> >>>> >> >> >> >>> Thanks for this, it is at least twice faster =)
> >>>> >> >> >> >>>
> >>>> >> >> >> >>> Cheers,
> >>>> >> >> >> >>> Rémi-C
> >>>> >> >> >> >>>
> >>>> >> >> >> >>>
> >>>> >> >> >> >>>
> >>>> >> >> >> >>>
> >>>> >> >> >> >>> 2013/11/15 James David Smith <
> james.david.smith@gmail.com>
> >>>> >> >> >> >>>>
> >>>> >> >> >> >>>> Thanks both. Geometries now fixed.
> >>>> >> >> >> >>>>
> >>>> >> >> >> >>>> The query 'CREATE TABLE lines_for_each_road....' has now
> >>>> >> >> >> >>>> been
> >>>> >> >> >> >>>> set
> >>>> >> >> >> >>>> running. Will report back when it's done. I suspect it
> may
> >>>> >> >> >> >>>> take
> >>>> >> >> >> >>>> a
> >>>> >> >> >> >>>> while!
> >>>> >> >> >> >>>>
> >>>> >> >> >> >>>> James
> >>>> >> >> >> >>>>
> >>>> >> >> >> >>>> On 15 November 2013 11:03, Sandro Santilli
> >>>> >> >> >> >>>> <strk@keybit.net>
> >>>> >> >> >> >>>> wrote:
> >>>> >> >> >> >>>> > On Fri, Nov 15, 2013 at 11:50:42AM +0100, Rémi Cura
> >>>> >> >> >> >>>> > wrote:
> >>>> >> >> >> >>>> >> Yep, maybe something like
> >>>> >> >> >> >>>> >>
> >>>> >> >> >> >>>> >> UPDATE ukmajrdbuffer SET the_geom =
> >>>> >> >> >> >>>> >> ST_MakeValid(the_geom)
> >>>> >> >> >> >>>> >> WHERE ST_IsValid(the_geom) = FALSE
> >>>> >> >> >> >>>> >
> >>>> >> >> >> >>>> > ST_MakeValid internally checks for ST_IsValid, so no
> >>>> >> >> >> >>>> > need
> >>>> >> >> >> >>>> > to add the condition (which would run the test twice).
> >>>> >> >> >> >>>> >
> >>>> >> >> >> >>>> > --strk;
> >>>> >> >> >> >>>> > _______________________________________________
> >>>> >> >> >> >>>> > postgis-users mailing list
> >>>> >> >> >> >>>> > postgis-users@lists.osgeo.org
> >>>> >> >> >> >>>> >
> >>>> >> >> >> >>>> >
> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
> >>>> >> >> >> >>>> _______________________________________________
> >>>> >> >> >> >>>> postgis-users mailing list
> >>>> >> >> >> >>>> postgis-users@lists.osgeo.org
> >>>> >> >> >> >>>>
> >>>> >> >> >> >>>>
> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
> >>>> >> >> >> >>>
> >>>> >> >> >> >>>
> >>>> >> >> >> >>
> >>>> >> >> >> >
> >>>> >> >> >> >
> >>>> >> >> >> > _______________________________________________
> >>>> >> >> >> > postgis-users mailing list
> >>>> >> >> >> > postgis-users@lists.osgeo.org
> >>>> >> >> >> >
> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
> >>>> >> >> >> _______________________________________________
> >>>> >> >> >> postgis-users mailing list
> >>>> >> >> >> postgis-users@lists.osgeo.org
> >>>> >> >> >>
> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
> >>>> >> >> >
> >>>> >> >> >
> >>>> >> >> >
> >>>> >> >> > _______________________________________________
> >>>> >> >> > postgis-users mailing list
> >>>> >> >> > postgis-users@lists.osgeo.org
> >>>> >> >> > http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
> >>>> >> >> _______________________________________________
> >>>> >> >> postgis-users mailing list
> >>>> >> >> postgis-users@lists.osgeo.org
> >>>> >> >> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
> >>>> >> >
> >>>> >> >
> >>>> >> >
> >>>> >> > _______________________________________________
> >>>> >> > postgis-users mailing list
> >>>> >> > postgis-users@lists.osgeo.org
> >>>> >> > http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
> >>>> >> _______________________________________________
> >>>> >> postgis-users mailing list
> >>>> >> postgis-users@lists.osgeo.org
> >>>> >> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
> >>>> >
> >>>> >
> >>>> >
> >>>> > _______________________________________________
> >>>> > postgis-users mailing list
> >>>> > postgis-users@lists.osgeo.org
> >>>> > http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
> >>>> _______________________________________________
> >>>> postgis-users mailing list
> >>>> postgis-users@lists.osgeo.org
> >>>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
> >>>
> >>>
> >>>
> >>> _______________________________________________
> >>> postgis-users mailing list
> >>> postgis-users@lists.osgeo.org
> >>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
> >>
> >>
> >>
> >> _______________________________________________
> >> postgis-users mailing list
> >> postgis-users@lists.osgeo.org
> >> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
> >
> >
> >
> > _______________________________________________
> > postgis-users mailing list
> > postgis-users@lists.osgeo.org
> > http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
> _______________________________________________
> postgis-users mailing list
> postgis-users@lists.osgeo.org
> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>

[Attachment #5 (text/html)]

<div dir="ltr">First,  <div>do you really need no \
duplicates?<div><br></div><div>Then, Creating an index on a 500 million row table is \
going to take time and a lot of spaces (several gigas??).</div><div>I don&#39;t think \
you have a choice here.</div> <div>Yet I&#39;m not sure the index would be used,   \
I&#39;m not an expert.</div><div><br></div><div>What you can do is  \
</div><div>_create a table with only a part of points to test</div><div>_create an \
index on it</div><div> _check how much time distinct takes, and if it uses \
index.</div><div><br></div><div><br></div><div>CREATE TABLE  <span \
style="font-family:arial,sans-serif;font-size:12.800000190734863px">grid_temp AS  \
</span></div><div><span \
style="font-family:arial,sans-serif;font-size:12.800000190734863px">SELECT \
st_x,st_y</span></div> <div><span \
style="font-family:arial,sans-serif;font-size:12.800000190734863px">FROM \
grid</span></div><div><span \
style="font-family:arial,sans-serif;font-size:12.800000190734863px">LIMIT 1000000; \
--only 1 million points</span></div> <div><span \
style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></span></div><div>CREATE \
INDEX ON grid_temp(st_x);</div><div>CREATE INDEX ON \
grid_temp(st_y);</div><div><br></div><div>EXPLAIN ANALYZE  </div> <div>SELECT \
DISTINCT st_x, st_y</div><div>FROM  grid_temp ;  </div><div>--(if you see some index \
uses in the return, it&#39;s good news)</div><div><br></div><div>Then doing it on all \
your data.</div><div><br></div><div><br> <br></div><div>For the record,  \
</div></div><div>The ideal solution would have been   :  </div><div>no have a X | Y \
table , but a X | Y | id_of_the_road table</div><div>This way you can create a table \
y grouping points by id_of_the_road   (creating so a multipoint per road).</div> \
<div><br></div><div>With this , you would have far less rows, you could create an \
index on geom.</div><div><br></div><div>Then you would get the intersecting \
multipoints (which would be efficient), and dedup only pair by pair (which would be \
efficient).</div> <div><br></div><div><br></div><div>Cheers,</div><div><br>Rémi-C</div><div><br></div></div><div \
class="gmail_extra"><br><br><div class="gmail_quote">2013/11/29 James David Smith \
<span dir="ltr">&lt;<a href="mailto:james.david.smith@gmail.com" \
target="_blank">james.david.smith@gmail.com</a>&gt;</span><br> <blockquote \
class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc \
solid;padding-left:1ex">Hi Remi / all,<br> <br>
I am just coming back to this project. I have made some progress. But<br>
would appreciate advice on how best to proceed now. What I have now is<br>
a table with two columns, &#39;st_x&#39; and &#39;st_y&#39;. They are the 20 metre \
by<br> 20 metre grid points that are within 1km of main roads in the UK. The<br>
table has 499,677,666 rows!   Because of the method that I used to<br>
create this however, I have alot of duplication of points. So I think<br>
I need to do something like:<br>
<br>
CREATE TABLE grid_no_duplications AS (SELECT DISTINCT(x, y) FROM grid);<br>
<br>
However I thought that first I could put an index on it?<br>
<br>
CREATE INDEX grid_x_y ON grid (st_x, st_y);<br>
<br>
Is this a good approach?<br>
<br>
Cheers<br>
<span class="HOEnZb"><font color="#888888"><br>
James<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On 15 November 2013 16:39, Rémi Cura &lt;<a \
href="mailto:remi.cura@gmail.com">remi.cura@gmail.com</a>&gt; wrote:<br> &gt; good \
=)<br> &gt;<br>
&gt; It is better to do the buffer computation first,<br>
&gt; because this way you are sure youwon&#39;t compute the same buffer many \
times.<br> &gt;<br>
&gt; Something like (not so sure without trying it)<br>
&gt; UPDATE ukmajrdbuffer SET geom = ST_Buffer(geom,1000);<br>
&gt;<br>
&gt; You may have an error if you hav e a fixed geom data type, then you could<br>
&gt; just add a new column like<br>
&gt;<br>
&gt; ALTER TABLE ukmajrdbuffer ADD COLUMN the_geom geometry ;<br>
&gt; UPDATE ukmajrdbuffer SET the_geom = ST_Buffer(geom,1000);<br>
&gt;<br>
&gt;<br>
&gt; Cheers,<br>
&gt;<br>
&gt; Rémi-C<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; 2013/11/15 James David Smith &lt;<a \
href="mailto:james.david.smith@gmail.com">james.david.smith@gmail.com</a>&gt;<br> \
&gt;&gt;<br> &gt;&gt; Hey Remi,<br>
&gt;&gt;<br>
&gt;&gt; I&#39;ve actually managed to get the file &#39;ukmajorroads&#39; already and \
have<br> &gt;&gt; loaded it into my database.   There are 395356 rows in the \
database. There is<br> &gt;&gt; a field called &#39;geom&#39; and I have built an \
index on it as below;<br> &gt;&gt;<br>
&gt;&gt; CREATE INDEX ukrds_index ON ukrds USING GIST (geom);<br>
&gt;&gt;<br>
&gt;&gt; So should I now run the same query, but do the buffering of the roads \
&#39;on<br> &gt;&gt; the fly&#39; maybe?   For example as below?<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; CREATE TABLE lines_for_each_road AS<br>
&gt;&gt; WITH all_lines AS (<br>
&gt;&gt; SELECT *<br>
&gt;&gt; FROM all_lines<br>
&gt;&gt; ),<br>
&gt;&gt; cutted_lines AS ( --we cut the line to keep only part of lines inside<br>
&gt;&gt; road_buffer<br>
&gt;&gt; SELECT ST_Intersection(all_lines.the_geom,st_buffer(ukmajrdbuffer.geom,<br>
&gt;&gt; 1000)) as lines_cutted, direction<br>
&gt;&gt; FROM ukmajrdbuffer, all_lines<br>
&gt;&gt; WHERE ST_Intersects(st_buffer(ukmajrdbuffer.geom, 1000),<br>
&gt;&gt; all_lines.the_geom)=TRUE<br>
&gt;&gt; ),<br>
&gt;&gt; cutted_lines_SN AS ( --this is the cutted lines which going from South \
to<br> &gt;&gt; North<br>
&gt;&gt; SELECT *<br>
&gt;&gt; FROM cutted_lines<br>
&gt;&gt; WHERE direction = &#39;SN&#39;<br>
&gt;&gt; ),<br>
&gt;&gt; cutted_lines_EW AS ( --this is the cutted lines going from East toWest<br>
&gt;&gt; SELECT *<br>
&gt;&gt; FROM cutted_lines<br>
&gt;&gt; WHERE direction = &#39;EW&#39;<br>
&gt;&gt; ),<br>
&gt;&gt; points AS ( -- we take the intersection of EW   lines with SN lines , \
that<br> &gt;&gt; is the points on the grid.<br>
&gt;&gt; SELECT ST_Intersection(clSN.lines_cutted, clEW.lines_cutted) AS point<br>
&gt;&gt; FROM cutted_lines_SN as clSN, cutted_lines_EW AS clEW<br>
&gt;&gt; WHERE ST_Intersects(clSN.lines_cutted, clEW.lines_cutted)=TRUE --no \
point<br> &gt;&gt; ot compute an intersection if lines don&#39;t intersect<br>
&gt;&gt; )<br>
&gt;&gt; SELECT row_number() over() AS id   , point<br>
&gt;&gt; FROM points ;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On 15 November 2013 15:42, Rémi Cura &lt;<a \
href="mailto:remi.cura@gmail.com">remi.cura@gmail.com</a>&gt; wrote:<br> \
&gt;&gt;&gt;<br> &gt;&gt;&gt; Still is a shame :<br>
&gt;&gt;&gt; with proper data we should have some result with about one hour i \
guess.<br> &gt;&gt;&gt;<br>
&gt;&gt;&gt; Cheers,<br>
&gt;&gt;&gt; Rémi C<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; 2013/11/15 James David Smith &lt;<a \
href="mailto:james.david.smith@gmail.com">james.david.smith@gmail.com</a>&gt;<br> \
&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt; Remi,<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Ok. Cool. I&#39;ve set the below query running. On Monday I will \
also<br> &gt;&gt;&gt;&gt; attempt to get the original road lines file too. Let&#39;s \
see if we have<br> &gt;&gt;&gt;&gt; a result on Monday.<br>
&gt;&gt;&gt;&gt; ----------------------------------<br>
&gt;&gt;&gt;&gt; CREATE TABLE lines_for_each_road AS<br>
&gt;&gt;&gt;&gt; WITH all_lines AS (<br>
&gt;&gt;&gt;&gt; SELECT *<br>
&gt;&gt;&gt;&gt; FROM all_lines<br>
&gt;&gt;&gt;&gt; ),<br>
&gt;&gt;&gt;&gt; cutted_lines AS ( --we cut the line to keep only part of lines \
inside<br> &gt;&gt;&gt;&gt; road_buffer<br>
&gt;&gt;&gt;&gt; SELECT ST_Intersection(all_lines.the_geom,ukmajrdbuffer.geom) as<br>
&gt;&gt;&gt;&gt; lines_cutted, direction<br>
&gt;&gt;&gt;&gt; FROM ukmajrdbuffer, all_lines<br>
&gt;&gt;&gt;&gt; WHERE ST_Intersects(ukmajrdbuffer.geom, all_lines.the_geom)=TRUE<br>
&gt;&gt;&gt;&gt; ),<br>
&gt;&gt;&gt;&gt; cutted_lines_SN AS ( --this is the cutted lines which going from \
South<br> &gt;&gt;&gt;&gt; to North<br>
&gt;&gt;&gt;&gt; SELECT *<br>
&gt;&gt;&gt;&gt; FROM cutted_lines<br>
&gt;&gt;&gt;&gt; WHERE direction = &#39;SN&#39;<br>
&gt;&gt;&gt;&gt; ),<br>
&gt;&gt;&gt;&gt; cutted_lines_EW AS ( --this is the cutted lines going from East \
toWest<br> &gt;&gt;&gt;&gt; SELECT *<br>
&gt;&gt;&gt;&gt; FROM cutted_lines<br>
&gt;&gt;&gt;&gt; WHERE direction = &#39;EW&#39;<br>
&gt;&gt;&gt;&gt; ),<br>
&gt;&gt;&gt;&gt; points AS ( -- we take the intersection of EW   lines with SN lines \
,<br> &gt;&gt;&gt;&gt; that is the points on the grid.<br>
&gt;&gt;&gt;&gt; SELECT ST_Intersection(clSN.lines_cutted, clEW.lines_cutted) AS \
point<br> &gt;&gt;&gt;&gt; FROM cutted_lines_SN as clSN, cutted_lines_EW AS clEW<br>
&gt;&gt;&gt;&gt; WHERE ST_Intersects(clSN.lines_cutted, clEW.lines_cutted)=TRUE \
--no<br> &gt;&gt;&gt;&gt; point ot compute an intersection if lines don&#39;t \
intersect<br> &gt;&gt;&gt;&gt; )<br>
&gt;&gt;&gt;&gt; SELECT row_number() over() AS id   , point<br>
&gt;&gt;&gt;&gt; FROM points ;<br>
&gt;&gt;&gt;&gt; ------------------------------------------<br>
&gt;&gt;&gt;&gt; Thanks<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; James<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On 15 November 2013 15:37, Rémi Cura &lt;<a \
href="mailto:remi.cura@gmail.com">remi.cura@gmail.com</a>&gt; wrote:<br> \
&gt;&gt;&gt;&gt; &gt;<br> &gt;&gt;&gt;&gt; &gt; You should try to get the original \
road file, because i will be very<br> &gt;&gt;&gt;&gt; &gt; easy to<br>
&gt;&gt;&gt;&gt; &gt; reapply some buffer and filtering to keep only major road.<br>
&gt;&gt;&gt;&gt; &gt; Yet, why not let it run during the week end?<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; Cheers,<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; Rémi-C<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; 2013/11/15 James David Smith &lt;<a \
href="mailto:james.david.smith@gmail.com">james.david.smith@gmail.com</a>&gt;<br> \
&gt;&gt;&gt;&gt; &gt;&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; Hey Remi,<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; Do you think before I try running the big query you have \
just sent<br> &gt;&gt;&gt;&gt; &gt;&gt; me,<br>
&gt;&gt;&gt;&gt; &gt;&gt; that I should go back and try to get the original file of \
uk roads? I<br> &gt;&gt;&gt;&gt; &gt;&gt; mean the very original file that has not \
had any buffers applied or<br> &gt;&gt;&gt;&gt; &gt;&gt; any merging done.<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; Or shall we just go for it and see if it has finished when \
I come<br> &gt;&gt;&gt;&gt; &gt;&gt; into<br>
&gt;&gt;&gt;&gt; &gt;&gt; work on Monday?! haha.<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; Thanks<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; James<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; On 15 November 2013 14:01, Rémi Cura &lt;<a \
href="mailto:remi.cura@gmail.com">remi.cura@gmail.com</a>&gt; wrote:<br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt; Outch,<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt; you have \
only 8 roads in GB? =)<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; This is not going to go fast till you don&#39;t have \
some dozens k&#39;s of<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt; roads.<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; I&#39;m guessing you are not at will to send those \
roads?<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; The next step will be (when you&#39;ll be sure \
everything is OK)<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; CREATE TABLE lines_for_each_road AS<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; WITH all_lines AS (<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; SELECT *<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; FROM all_lines<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; ),<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; cutted_lines AS ( --we cut the line to keep only part \
of lines<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt; inside<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; road_buffer<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; SELECT \
ST_Intersection(all_lines.the_geom,ukmajrdbuffer.geom) as<br> &gt;&gt;&gt;&gt; \
&gt;&gt; &gt; lines_cutted, direction<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt; FROM \
ukmajrdbuffer, all_lines<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt; WHERE \
ST_Intersects(ukmajrdbuffer.geom, all_lines.the_geom)=TRUE<br> &gt;&gt;&gt;&gt; \
&gt;&gt; &gt; ),<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt; cutted_lines_SN AS ( --this is \
the cutted lines which going from<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt; South<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; to<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; North<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; SELECT *<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; FROM cutted_lines<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; WHERE direction = &#39;SN&#39;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; ),<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; cutted_lines_EW AS ( --this is the cutted lines going \
from East<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt; toWest<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; SELECT *<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; FROM cutted_lines<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; WHERE direction = &#39;EW&#39;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; ),<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; points AS ( -- we take the intersection of EW   lines \
with SN lines<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt; ,<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; that is<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; the points on the grid.<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; SELECT ST_Intersection(clSN.lines_cutted, \
clEW.lines_cutted) AS<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt; point<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; FROM cutted_lines_SN as clSN, cutted_lines_EW AS \
clEW<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt; WHERE ST_Intersects(clSN.lines_cutted, \
clEW.lines_cutted)=TRUE --no<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt; point ot<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; compute an intersection if lines don&#39;t \
intersect<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt; )<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; SELECT row_number() over() AS id   , point<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; FROM points ;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; Cheers,<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; Rémi-C<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; 2013/11/15 James David Smith &lt;<a \
href="mailto:james.david.smith@gmail.com">james.david.smith@gmail.com</a>&gt;<br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; Hey \
Remi,<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; I&#39;ll do a few checks and get back to you. \
Maybe I did something<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; wrong<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; because I set this query going on my local \
PostgreSQL installation<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; but<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; also on our Linux Cluster machine which is much \
more powerful. And<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; it<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; finished on my local installation BEFORE the \
cluster. So maybe I<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; did<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; something wrong on the local query.<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; The query that has finished took about 1 hour.<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; The query on our cluster is still running.<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; select count(*) from ukmajrdbuffer = 8<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; This is because before I was given the data the \
roads buffer had<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; already been dissolved \
unfortunately.<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; James<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; On 15 November 2013 13:43, Rémi Cura &lt;<a \
href="mailto:remi.cura@gmail.com">remi.cura@gmail.com</a>&gt; wrote:<br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; Good !<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; \
&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; Something is strange with the \
result,<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; you get only 190k lines \
intersecting road buffer,<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; it is very few \
, I expected at least 10times this!<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; How \
many time took this computing by the way?<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; \
&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; How many road buffer geom do you \
have ? (select count(*) from<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; \
ukmajrdbuffer<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; ).<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; Cheers,<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; Rémi-C<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; 2013/11/15 James David Smith &lt;<a \
href="mailto:james.david.smith@gmail.com">james.david.smith@gmail.com</a>&gt;<br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt; Hey.<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Yes, it&#39;s done. Was just getting some \
lunch! :-)<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; select count(*) from \
lines_for_each_road<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Result = \
187033<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; I have also just ran &#39;VACUUM \
ANALYZE&#39; on the tables<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; \
&#39;lines_for_each_road&#39; as well as the table &#39;all_lines&#39;<br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt; I also can confirm that I have ran the following commands:<br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt; CREATE INDEX all_lines_index ON all_lines USING GIST ( the_geom<br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; )<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt; CREATE INDEX ukmajrdbuffer_index ON ukmajrdbuffer USING GIST<br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; (geom);<br> &gt;&gt;&gt;&gt; &gt;&gt; \
&gt;&gt; &gt;&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Should we now \
uncomment this line from the previous query?<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &quot;   SELECT row_number() \
over() AS id--,*   &quot;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Thanks again Remi,<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; James<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; On 15 November 2013 13:14, Rémi Cura \
&lt;<a href="mailto:remi.cura@gmail.com">remi.cura@gmail.com</a>&gt;<br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; wrote:<br> &gt;&gt;&gt;&gt; &gt;&gt; \
&gt;&gt; &gt;&gt; &gt; Also if you do have indexes,<br> &gt;&gt;&gt;&gt; &gt;&gt; \
&gt;&gt; &gt;&gt; &gt; can you run a &quot;VACUUM ANALYZE&quot;, so that the indexes \
will be<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; used?<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Cheers,<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Rémi-C<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; 2013/11/15 Rémi Cura &lt;<a \
href="mailto:remi.cura@gmail.com">remi.cura@gmail.com</a>&gt;<br> &gt;&gt;&gt;&gt; \
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt; It should be finished by now,<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt; &gt;&gt; can you check you have geom indexes on :<br> &gt;&gt;&gt;&gt; \
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &quot;ukmajrdbuffer.geom&quot; and   \
&quot;all_lines.the_geom&quot;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; How many geoms do you have in \
&quot;ukmajrdbuffer&quot;?<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Cheers,<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Rémi-C<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; 2013/11/15 Rémi Cura &lt;<a \
href="mailto:remi.cura@gmail.com">remi.cura@gmail.com</a>&gt;<br> &gt;&gt;&gt;&gt; \
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt; &gt;&gt;&gt; Hey Sandro,<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; Thanks for \
this, it is at least twice faster =)<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; Cheers,<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; Rémi-C<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; 2013/11/15 James David Smith \
&lt;<a href="mailto:james.david.smith@gmail.com">james.david.smith@gmail.com</a>&gt;<br>
 &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; Thanks both. Geometries \
now fixed.<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; The query &#39;CREATE \
TABLE lines_for_each_road....&#39; has now<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt; &gt;&gt;&gt;&gt; been<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt;&gt;&gt; set<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; \
running. Will report back when it&#39;s done. I suspect it may<br> &gt;&gt;&gt;&gt; \
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; take<br> &gt;&gt;&gt;&gt; &gt;&gt; \
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; a<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt;&gt;&gt; while!<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; \
James<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; On 15 November 2013 \
11:03, Sandro Santilli<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt;&gt;&gt; &lt;<a href="mailto:strk@keybit.net">strk@keybit.net</a>&gt;<br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; wrote:<br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; &gt; On Fri, Nov 15, \
2013 at 11:50:42AM +0100, Rémi Cura<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt;&gt;&gt; &gt; wrote:<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt;&gt;&gt; &gt;&gt; Yep, maybe something like<br> &gt;&gt;&gt;&gt; &gt;&gt; \
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; UPDATE ukmajrdbuffer SET the_geom =<br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; \
ST_MakeValid(the_geom)<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt;&gt;&gt; &gt;&gt; WHERE ST_IsValid(the_geom) = FALSE<br> &gt;&gt;&gt;&gt; \
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; &gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; \
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; &gt; ST_MakeValid internally checks for \
ST_IsValid, so no<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; \
&gt; need<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; &gt; to \
add the condition (which would run the test twice).<br> &gt;&gt;&gt;&gt; &gt;&gt; \
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; &gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt; &gt;&gt;&gt;&gt; &gt; --strk;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt; &gt;&gt;&gt;&gt; &gt; _______________________________________________<br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; &gt; postgis-users \
mailing list<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; &gt; <a \
href="mailto:postgis-users@lists.osgeo.org">postgis-users@lists.osgeo.org</a><br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; &gt;<br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; &gt; <a \
href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users" \
target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users</a><br>

&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; \
_______________________________________________<br> &gt;&gt;&gt;&gt; &gt;&gt; \
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; postgis-users mailing list<br> &gt;&gt;&gt;&gt; \
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; <a \
href="mailto:postgis-users@lists.osgeo.org">postgis-users@lists.osgeo.org</a><br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt; \
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; <a \
href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users" \
target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users</a><br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;<br> &gt;&gt;&gt;&gt; \
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt; &gt;&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; \
_______________________________________________<br> &gt;&gt;&gt;&gt; &gt;&gt; \
&gt;&gt; &gt;&gt; &gt; postgis-users mailing list<br> &gt;&gt;&gt;&gt; &gt;&gt; \
&gt;&gt; &gt;&gt; &gt; <a \
href="mailto:postgis-users@lists.osgeo.org">postgis-users@lists.osgeo.org</a><br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; <a \
href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users" \
target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users</a><br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; \
_______________________________________________<br> &gt;&gt;&gt;&gt; &gt;&gt; \
&gt;&gt; &gt;&gt; postgis-users mailing list<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; \
&gt;&gt; <a href="mailto:postgis-users@lists.osgeo.org">postgis-users@lists.osgeo.org</a><br>
 &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; <a \
href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users" \
target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users</a><br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; \
&gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; \
_______________________________________________<br> &gt;&gt;&gt;&gt; &gt;&gt; \
&gt;&gt; &gt; postgis-users mailing list<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; \
<a href="mailto:postgis-users@lists.osgeo.org">postgis-users@lists.osgeo.org</a><br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; <a \
href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users" \
target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users</a><br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; \
_______________________________________________<br> &gt;&gt;&gt;&gt; &gt;&gt; \
&gt;&gt; postgis-users mailing list<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; <a \
href="mailto:postgis-users@lists.osgeo.org">postgis-users@lists.osgeo.org</a><br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; <a \
href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users" \
target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users</a><br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt;<br> &gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; _______________________________________________<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; postgis-users mailing list<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; <a \
href="mailto:postgis-users@lists.osgeo.org">postgis-users@lists.osgeo.org</a><br> \
&gt;&gt;&gt;&gt; &gt;&gt; &gt; <a \
href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users" \
target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users</a><br> \
&gt;&gt;&gt;&gt; &gt;&gt; _______________________________________________<br> \
&gt;&gt;&gt;&gt; &gt;&gt; postgis-users mailing list<br> &gt;&gt;&gt;&gt; &gt;&gt; <a \
href="mailto:postgis-users@lists.osgeo.org">postgis-users@lists.osgeo.org</a><br> \
&gt;&gt;&gt;&gt; &gt;&gt; <a \
href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users" \
target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users</a><br> \
&gt;&gt;&gt;&gt; &gt;<br> &gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; _______________________________________________<br>
&gt;&gt;&gt;&gt; &gt; postgis-users mailing list<br>
&gt;&gt;&gt;&gt; &gt; <a \
href="mailto:postgis-users@lists.osgeo.org">postgis-users@lists.osgeo.org</a><br> \
&gt;&gt;&gt;&gt; &gt; <a \
href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users" \
target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users</a><br> \
&gt;&gt;&gt;&gt; _______________________________________________<br> &gt;&gt;&gt;&gt; \
postgis-users mailing list<br> &gt;&gt;&gt;&gt; <a \
href="mailto:postgis-users@lists.osgeo.org">postgis-users@lists.osgeo.org</a><br> \
&gt;&gt;&gt;&gt; <a href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users" \
target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users</a><br> \
&gt;&gt;&gt;<br> &gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; postgis-users mailing list<br>
&gt;&gt;&gt; <a href="mailto:postgis-users@lists.osgeo.org">postgis-users@lists.osgeo.org</a><br>
 &gt;&gt;&gt; <a href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users" \
target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users</a><br> \
&gt;&gt;<br> &gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; postgis-users mailing list<br>
&gt;&gt; <a href="mailto:postgis-users@lists.osgeo.org">postgis-users@lists.osgeo.org</a><br>
 &gt;&gt; <a href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users" \
target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users</a><br> \
&gt;<br> &gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; postgis-users mailing list<br>
&gt; <a href="mailto:postgis-users@lists.osgeo.org">postgis-users@lists.osgeo.org</a><br>
 &gt; <a href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users" \
target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users</a><br> \
_______________________________________________<br> postgis-users mailing list<br>
<a href="mailto:postgis-users@lists.osgeo.org">postgis-users@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users" \
target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users</a><br> \
</div></div></blockquote></div><br></div>



_______________________________________________
postgis-users mailing list
postgis-users@lists.osgeo.org
http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic