<div dir="ltr">Yep, maybe something like <div><br><div>UPDATE <span style="font-family:arial,sans-serif;font-size:12.800000190734863px">ukmajrdbuffer SET the_geom = ST_MakeValid(the_geom) </span></div><div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">WHERE ST_IsValid(the_geom) = FALSE</span></div>
</div><div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">Cheers,</span></div>
<div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">Rémi-C</span></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/11/15 James David Smith <span dir="ltr"><<a href="mailto:james.david.smith@gmail.com" target="_blank">james.david.smith@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Remi,<br>
<br>
Thanks for your continued guidance with this big data problem.  I<br>
wasn't in the office yesterday so am looking at it again now. I've<br>
just ran the below below query running, and will let you know how many<br>
rows there are once it's finished.<br>
<br>
CREATE TABLE lines_for_each_road AS<br>
WITH all_lines AS (<br>
SELECT *<br>
FROM all_lines<br>
)<br>
<div class="im">SELECT row_number() over() AS id--,*<br>
FROM ukmajrdbuffer, all_lines<br>
</div>WHERE ST_Intersects(ukmajrdbuffer.geom, all_lines.the_geom)=TRUE;<br>
<br>
In the meantime however, I have noticed something else that is a<br>
worry. I did this:<br>
<br>
SELECT st_isvalid(geom) FROM ukmajrdbuffer;<br>
<br>
NOTICE:  Ring Self-intersection at or near point 367541.09074241668<br>
311890.25257437676<br>
NOTICE:  Ring Self-intersection at or near point 209901.50000000186<br>
706890.50000000373<br>
NOTICE:  Ring Self-intersection at or near point 444961.46434461698<br>
161217.66612910852<br>
NOTICE:  Ring Self-intersection at or near point 559818.64931676909<br>
103089.14606037363<br>
NOTICE:  Ring Self-intersection at or near point 420114.82424666081<br>
298567.38722311892<br>
 st_isvalid<br>
------------<br>
 f<br>
 f<br>
 t<br>
 f<br>
 f<br>
 f<br>
 t<br>
 t<br>
(8 rows)<br>
<br>
I guess that I should try to fix these geometries first before we<br>
attempt to continue any further right?<br>
<br>
Thanks<br>
<span class="HOEnZb"><font color="#888888"><br>
James<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<br>
<br>
<br>
<br>
On 13 November 2013 18:04, Rémi Cura <<a href="mailto:remi.cura@gmail.com">remi.cura@gmail.com</a>> wrote:<br>
> All lines should be in one table, you can add a column to differentiate<br>
> between line going SN and EW,<br>
> this is what the query I wrote does.<br>
><br>
> Not changing your code much, it gives for the line table :<br>
><br>
> CREATE TABLE all_lines tablespace jamestabs AS<br>
> ( SELECT st_setsrid(st_makeline(st_makepoint(x, 7780), st_makepoint(x,<br>
> 1226580)),27700) as the_geom, 'SN' AS direction<br>
><br>
> FROM generate_series(53320::int, 667380::int, 20) as x)<br>
> UNION<br>
> ( SELECT st_setsrid(st_makeline(st_makepoint(53320, y),<br>
> st_makepoint(667380, y)),27700) as the_geom, 'EW' AS direction<br>
><br>
> FROM generate_series(7780::int, 1226580::int, 20) as y)<br>
><br>
> then building index on it.<br>
><br>
><br>
> "-- Merge the road buffer polygons into one big polygon<br>
> -- Should maybe consider leaving them as they are, but am merging for now.<br>
> SELECT st_union(geom) as geom INTO union_roads FROM ukmajrdbuffer;"<br>
> You must not do it !<br>
> As I told you "blabla index blabla".<br>
><br>
> instead, create an index on table ukmajrdbuffer, and use it without<br>
> unioning.<br>
><br>
> Then you query is not going to work at all ... (or *very very* slowly)<br>
> "FROM east_to_west, north_to_south, buff_union_roads" : it potentially<br>
> generates 1000*50*1000*50 * number_of_road rows to filter, very bad idea,<br>
> you'll get the same problem as with points...<br>
><br>
> (please see some example on internet to understand WITH, it is simple ,<br>
> useful, and makes query much more clear)<br>
><br>
> First you could try :<br>
><br>
> CREATE TABLE lines_for_each_road tablespace jamestabs AS<br>
> WITH all_lines AS ( --this subquerry gets all the lines<br>
><br>
> SELECT *<br>
> FROM all_lines<br>
><br>
> ),<br>
> SELECT row_number() over() AS id--,*<br>
> FROM ukmajrdbuffer, all_lines<br>
> WHERE ST_Intersects(ukmajrdbuffer.the_geom, all_lines.the_geom)=TRUE;<br>
><br>
> This will give you (if you uncomment the "--,*", ), for every road, all the<br>
> lines intersecting the road<br>
> example :<br>
> road_1 | line_2_EW<br>
> road_1 | line_3_EW<br>
> road_1 | line_78_SN<br>
> road_1 | line_7_EW<br>
> road_2 ...<br>
><br>
> How long is it (don't uncomment plz), and how many rows do you get (select<br>
> count(*) from lines_for_each_road )?<br>
><br>
> If it is not too long, we will go on and "cut" the lines so that for every<br>
> road, we keep the part of the lines that are inside the road_buffer.<br>
> (I have to leave now, tomorrow)<br>
><br>
> Cheers,<br>
> Rémi-C<br>
><br>
><br>
><br>
><br>
><br>
> 2013/11/13 James David Smith <<a href="mailto:james.david.smith@gmail.com">james.david.smith@gmail.com</a>><br>
>><br>
>> Hey Remi,<br>
>><br>
>> I don't quite get what the query you gave does to be honest. But<br>
>> working with some of the ideas and notions you gave me I have put the<br>
>> below together. The final bit of the code is the key query. The tables<br>
>> of NS and EW lines were done very quickly. Nice. But now doing the<br>
>> 'intersects within polygon' is taking some time so I'll see how it<br>
>> gets on when I get in to work tomorrow morning:<br>
>><br>
>> DROP TABLE IF EXISTS north_to_south;<br>
>> DROP TABLE IF EXISTS east_to_west;<br>
>><br>
>> -- Make a table of north to south lines<br>
>> CREATE TABLE north_to_south tablespace jamestabs AS<br>
>> ( SELECT st_setsrid(st_makeline(st_makepoint(x, 7780), st_makepoint(x,<br>
>> 1226580)),27700) as the_geom<br>
>> FROM generate_series(53320::int, 667380::int, 20) as x);<br>
>><br>
>> -- Add an index<br>
>> CREATE INDEX north_to_south_geom_index ON north_to_south USING GIST (<br>
>> the_geom );<br>
>><br>
>> -- Make a table of east to west lines<br>
>> CREATE TABLE east_to_west tablespace jamestabs AS<br>
>> ( SELECT st_setsrid(st_makeline(st_makepoint(53320, y),<br>
>> st_makepoint(667380, y)),27700) as the_geom<br>
>> FROM generate_series(7780::int, 1226580::int, 20) as y);<br>
>><br>
>> -- Add an index<br>
>> CREATE INDEX east_to_west_geom_index ON east_to_west USING GIST ( the_geom<br>
>> );<br>
>><br>
>> -- Import the Road Buffer file using the pg_loader interface<br>
>><br>
>> -- Update the geometry field as the loader didn't seem to do this.<br>
>> SELECT UpdateGeometrySRID('ukmajrdbuffer','geom',27700);<br>
>><br>
>> -- Merge the road buffer polygons into one big polygon<br>
>> -- Should maybe consider leaving them as they are, but am merging for now.<br>
>> SELECT st_union(geom) as geom INTO union_roads FROM ukmajrdbuffer;<br>
>><br>
>> -- The unioned roads file isn't valid geom. So I simplify it a little<br>
>> to make it valid.<br>
>> -- We simplify with a 70 metres factor. Geom is now valid.<br>
>> SELECT ST_SimplifyPreserveTopology(geom, 70) AS geom INTO<br>
>> buff_union_roads FROM union_roads;<br>
>><br>
>> -- Now calculate the points where the lines intersect and also where<br>
>> they are within the polygon.<br>
>> CREATE TABLE gridpoints tablespace jamestabs<br>
>> AS (SELECT ST_Intersection(east_to_west.the_geom, north_to_south.the_geom)<br>
>> FROM east_to_west, north_to_south, buff_union_roads<br>
>> WHERE st_within(buff_union_roads.geom,<br>
>> ST_Intersection(east_to_west.the_geom, north_to_south.the_geom)) =<br>
>> TRUE);<br>
>><br>
>> Thanks<br>
>><br>
>> James<br>
>><br>
>><br>
>><br>
>><br>
>> On 13 November 2013 13:33, Rémi Cura <<a href="mailto:remi.cura@gmail.com">remi.cura@gmail.com</a>> wrote:<br>
>> > Using the lines you exactly do the same as with points.<br>
>> > The lines will be spaced exactly by 20 meters, end and start being<br>
>> > exactly<br>
>> > on the 20 meters grid, line being either perfectly veritcla or perfectly<br>
>> > horizontal.<br>
>> > So intersections are guaranteed to be on the 20 meter grid, because this<br>
>> > is<br>
>> > the definition of a 20 meter grid =) .<br>
>> ><br>
>> ><br>
>> > Here is a not optimal way to do it :<br>
>> > For instance if UK is enclosed in a bouding box (xmin,ymin,xmax,ymax),<br>
>> > where<br>
>> > xmin-max and ymin-max are rounded to the nearest 20 meters multiple (ie<br>
>> > x or<br>
>> > y % 20 = 0)<br>
>> > (Please note that this is not clever because we generate too much SN<br>
>> > lines,<br>
>> > GB being only 500 km wide at most, so we would need to filter, but you<br>
>> > don't<br>
>> > care, following would take less than a minute anyway, and you need to do<br>
>> > it<br>
>> > only once).<br>
>> ><br>
>> > WITH minmax AS (<br>
>> > SELECT xmin,ymin,xmax,ymax, bbox_of_england<br>
>> > ),<br>
>> > WITH series AS (<br>
>> > SELECT s<br>
>> > FROM generate_series(0,1000*(1000/20)::bigint,20) AS s --casting to<br>
>> > bigint<br>
>> > to be safe against going over int limit<br>
>> > ),<br>
>> > WITH lines AS (<br>
>> > SELECT ST_MakeLine (ST_MakePoint(xmin+s,ymin),ST_MakePoint(xmin+s,ymax))<br>
>> > AS<br>
>> > lineSN,<br>
>> >  ST_MakeLine(ST_MakePoint(xmin, ymin+s), ST_MakePoint(xmax,ymin+s) AS<br>
>> > lineEW<br>
>> > FROM series, minmax<br>
>> > ),<br>
>> > unioned_lines AS (<br>
>> ><br>
>> > SELECT lineSN AS line, 'SN' as direction<br>
>> > FROM lines,minmax<br>
>> > WHERE ST_Interesects(lineSN,bbox_of_england)= TRUE<br>
>> ><br>
>> > UNION<br>
>> ><br>
>> > SELECT lineEW AS line, 'EW' AS direction<br>
>> > FFROM lines,minmax<br>
>> > WHERE ST_Interesects(lineEW,bbox_of_england)= TRUE<br>
>> ><br>
>> > )<br>
>> > SELECT row_number() over() AS uid, line, direction<br>
>> > FROM unioned_line<br>
>> ><br>
>> > then creating table and index on geom and on direction (and possibly on<br>
>> > uid,<br>
>> > but better create a primary key then if you use it)<br>
>> ><br>
>> > Of course I didn't test this query, but you should be able to use it<br>
>> > easily.<br>
>> ><br>
>> > Cheers,<br>
>> > Rémi-C<br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> > 2013/11/13 James David Smith <<a href="mailto:james.david.smith@gmail.com">james.david.smith@gmail.com</a>><br>
>> >><br>
>> >> Hi Remi,<br>
>> >><br>
>> >> Apologies.  One more thing which I am not sure about. We need the<br>
>> >> final grid of points that we make to be multiples of 20. For example:<br>
>> >><br>
>> >> 53320, 7780 = Yes<br>
>> >> 53323, 7780 = No<br>
>> >> 53320, 7794 = No<br>
>> >> 53321, 7754 = No<br>
>> >><br>
>> >> That is why in the original function that we wrote, we put the numbers<br>
>> >> in as below.<br>
>> >><br>
>> >> SELECT ST_Collect(st_setsrid(ST_POINT(x,y),$3)) FROM<br>
>> >> generate_series(53320::int, 667380::int,$2) as x<br>
>> >> ,generate_series(7780::int, 1226580::int,$2) as y<br>
>> >> where st_intersects($1,st_setsrid(ST_POINT(x,y),$3))'<br>
>> >><br>
>> >> We did this because the points in the grid have to 'align' with the<br>
>> >> values of mutliple 20.<br>
>> >><br>
>> >> If we do the N-S and E-W lines solution that you suggest, I don't<br>
>> >> think that this will work will it?<br>
>> >><br>
>> >> Thanks<br>
>> >><br>
>> >> James<br>
>> >><br>
>> >><br>
>> >> On 13 November 2013 11:49, James David Smith<br>
>> >> <<a href="mailto:james.david.smith@gmail.com">james.david.smith@gmail.com</a>> wrote:<br>
>> >> > Hi Remi,<br>
>> >> ><br>
>> >> > Thanks so much for this detailed response. Your idea about creating<br>
>> >> > the lines and the only storing where they intersect and are within<br>
>> >> > the<br>
>> >> > polygons is a great idea. I'm going to give that a go now.<br>
>> >> ><br>
>> >> > Thanks again,<br>
>> >> ><br>
>> >> > James<br>
>> >> ><br>
>> >> > On 13 November 2013 11:41, Rémi Cura <<a href="mailto:remi.cura@gmail.com">remi.cura@gmail.com</a>> wrote:<br>
>> >> >> This would be an improvement but still non efficient.<br>
>> >> >><br>
>> >> >> you have 2 possibilities, supposing that what you want is points 20<br>
>> >> >> meter<br>
>> >> >> spaced in all road_buf  :<br>
>> >> >><br>
>> >> >> either you compute for each road_buffer the points inside, one road<br>
>> >> >> at<br>
>> >> >> a<br>
>> >> >> time ( figuratively ).<br>
>> >> >><br>
>> >> >> This means you write a function which generates points 20-meter<br>
>> >> >> spaced<br>
>> >> >> in<br>
>> >> >> the bounding box of the road you are working on, and keep those in<br>
>> >> >> the<br>
>> >> >> real<br>
>> >> >> road buffer, and group result points as a multipoints (for cosmetic<br>
>> >> >> purpose)<br>
>> >> >> .<br>
>> >> >><br>
>> >> >> You would then use it like this :<br>
>> >> >><br>
>> >> >> SELECT road_id, points_insidea_road(the_geom) AS<br>
>> >> >> my_points_inside_the_road<br>
>> >> >> FROM road_polygons_table<br>
>> >> >><br>
>> >> >> You would have as output a line per road with a multipoint<br>
>> >> >> containing<br>
>> >> >> all<br>
>> >> >> the point 20 meter spaced inside the road.<br>
>> >> >><br>
>> >> >> Or (what you wrote) you generate all points and keep those<br>
>> >> >> intersecting<br>
>> >> >> one<br>
>> >> >> or many road.<br>
>> >> >><br>
>> >> >> The first one is mandatory, because it avoids to manipulate<br>
>> >> >> (incredibly) big<br>
>> >> >> table of all points spaced by 20 meters for UK (around 500 * 10^6<br>
>> >> >> points ! )<br>
>> >> >> Even with indexes it's not a good idea to use such number of rows.<br>
>> >> >><br>
>> >> >> That's the first point (write a function working for one road, then<br>
>> >> >> use<br>
>> >> >> it<br>
>> >> >> for all road).<br>
>> >> >><br>
>> >> >> The second point is the way you compute is very inefficient. If your<br>
>> >> >> road is<br>
>> >> >> going from south-West to NorthEast, you will generate a very big<br>
>> >> >> number<br>
>> >> >> of<br>
>> >> >> points, and very few will be in the road_buffer. This is problematic<br>
>> >> >> as<br>
>> >> >> for<br>
>> >> >> a road of only 20 kms, you may generate as many as 100k points and<br>
>> >> >> keep<br>
>> >> >> only<br>
>> >> >> few of them. If you want to process hundreds of ks or roads it will<br>
>> >> >> become<br>
>> >> >> very problematic. Also you would have to generate points each time.<br>
>> >> >><br>
>> >> >> So here is what  I suggest you : change your strategy :<br>
>> >> >>  instead of generating all point in bounding box and then keeping<br>
>> >> >> only<br>
>> >> >> those<br>
>> >> >> in road_buffer,<br>
>> >> >> generate a line every 20 meters going North south and an line every<br>
>> >> >> 20<br>
>> >> >> meters going East-West , then use the function ST_Intersection to<br>
>> >> >> keep<br>
>> >> >> only<br>
>> >> >> part of this lines being inside the road_polygon, then you have the<br>
>> >> >> points<br>
>> >> >> inside road_polygons as the intersections of these EW lines with the<br>
>> >> >> SN<br>
>> >> >> lines.<br>
>> >> >><br>
>> >> >> It will be very efficient because you can create a table with all<br>
>> >> >> the<br>
>> >> >> lines<br>
>> >> >> going East-West and South-North for great britain (about 25k + 50k<br>
>> >> >> lines),<br>
>> >> >> and build index on it (index on geom and on the column saying if it<br>
>> >> >> is<br>
>> >> >> SN or<br>
>> >> >> EW).<br>
>> >> >><br>
>> >> >> The trick is the number of lines is around 500km * 50 line/km +<br>
>> >> >> 1000km<br>
>> >> >> * 50<br>
>> >> >> line/km , where the number of points is  500km * 50 line/km * 1000km<br>
>> >> >> *<br>
>> >> >> 50<br>
>> >> >> line/km<br>
>> >> >><br>
>> >> >> Hope it helps,<br>
>> >> >><br>
>> >> >> Cheers,<br>
>> >> >> Rémi-C<br>
>> >> >><br>
>> >> >><br>
>> >> >><br>
>> >> >><br>
>> >> >><br>
>> >> >> 2013/11/13 James David Smith <<a href="mailto:james.david.smith@gmail.com">james.david.smith@gmail.com</a>><br>
>> >> >>><br>
>> >> >>> Hey Remi,<br>
>> >> >>><br>
>> >> >>> Thanks for your reply. So in your mind you think we should have a<br>
>> >> >>> database of say 300 polygons, and then we run a command like this<br>
>> >> >>> right?<br>
>> >> >>><br>
>> >> >>> SELECT<br>
>> >> >>> ST_Collect(st_setsrid(ST_POINT(x,y),27700))<br>
>> >> >>> FROM<br>
>> >> >>> generate_series(53320::int, 667380::int,20) as x,<br>
>> >> >>> generate_series(7780::int, 1226580::int,20) as y,<br>
>> >> >>> road_polygons_table<br>
>> >> >>> WHERE<br>
>> >> >>> st_intersects(road_polygons_table.the_geom,<br>
>> >> >>> st_setsrid(ST_POINT(x,y),27700))<br>
>> >> >>><br>
>> >> >>> What do you think?<br>
>> >> >>><br>
>> >> >>> Thanks<br>
>> >> >>><br>
>> >> >>> James<br>
>> >> >>><br>
>> >> >>><br>
>> >> >>><br>
>> >> >>><br>
>> >> >>> On 11 November 2013 14:51, Rémi Cura <<a href="mailto:remi.cura@gmail.com">remi.cura@gmail.com</a>> wrote:<br>
>> >> >>> > Hey,<br>
>> >> >>> > the whole point on using a sgbds like postgis is using index.<br>
>> >> >>> ><br>
>> >> >>> > If you have one line you don't use indexes...<br>
>> >> >>> ><br>
>> >> >>> > So in short, don't make one polygon with a buffer of all the<br>
>> >> >>> > road,<br>
>> >> >>> > but a<br>
>> >> >>> > table with a line for the buffer for every road, then do you<br>
>> >> >>> > computation<br>
>> >> >>> > to<br>
>> >> >>> > create grid of points inside of polygons, then union the result<br>
>> >> >>> > of<br>
>> >> >>> > points!<br>
>> >> >>> ><br>
>> >> >>> > And it s always a bad idea to run a function on big data when you<br>
>> >> >>> > have<br>
>> >> >>> > not<br>
>> >> >>> > tested it fully (including scaling behavior) on small data.<br>
>> >> >>> ><br>
>> >> >>> ><br>
>> >> >>> > Cheers<br>
>> >> >>> > Rémi-C<br>
>> >> >>> ><br>
>> >> >>> ><br>
>> >> >>> > 2013/11/11 James David Smith <<a href="mailto:james.david.smith@gmail.com">james.david.smith@gmail.com</a>><br>
>> >> >>> >><br>
>> >> >>> >> Hi all,<br>
>> >> >>> >><br>
>> >> >>> >> Would appreciate some advice on the best way to accomplish this<br>
>> >> >>> >> please.<br>
>> >> >>> >><br>
>> >> >>> >> Our situation is that we have a single polygon which has been<br>
>> >> >>> >> created<br>
>> >> >>> >> by buffering all of the major roads in the UK. Projection is<br>
>> >> >>> >> OSGB36<br>
>> >> >>> >> (27700). Obviously it's quite a big polygon.<br>
>> >> >>> >><br>
>> >> >>> >> -->  SELECT st_area(geom) FROM roadbufferunion;<br>
>> >> >>> >>      st_area<br>
>> >> >>> >> ------------------<br>
>> >> >>> >>  77228753220.8271<br>
>> >> >>> >><br>
>> >> >>> >> What we now want to do is create a regular grid of 20 metre x 20<br>
>> >> >>> >> metre<br>
>> >> >>> >> points instead the polygon area. So we wrote this function<br>
>> >> >>> >> (based<br>
>> >> >>> >> on<br>
>> >> >>> >> some googling, apologies for not being able to recall the exact<br>
>> >> >>> >> person<br>
>> >> >>> >> who originally wrote it):<br>
>> >> >>> >><br>
>> >> >>> >> CREATE OR REPLACE FUNCTION makegrid(geometry, integer, integer)<br>
>> >> >>> >> RETURNS geometry AS<br>
>> >> >>> >> 'SELECT ST_Collect(st_setsrid(ST_POINT(x,y),$3)) FROM<br>
>> >> >>> >>   generate_series(53320::int, 667380::int,$2) as x<br>
>> >> >>> >>   ,generate_series(7780::int, 1226580::int,$2) as y<br>
>> >> >>> >> where st_intersects($1,st_setsrid(ST_POINT(x,y),$3))'<br>
>> >> >>> >> LANGUAGE sql<br>
>> >> >>> >><br>
>> >> >>> >> and we then run this by doing the following:<br>
>> >> >>> >><br>
>> >> >>> >> SELECT st_x((ST_Dump(makegrid(geom, 20, 27700))).geom) as x,<br>
>> >> >>> >> st_y((ST_Dump(makegrid(geom, 20, 27700))).geom) as y INTO<br>
>> >> >>> >> grid_points<br>
>> >> >>> >> from roadbufferunion;<br>
>> >> >>> >><br>
>> >> >>> >> However after over 2 days of the query running on a pretty<br>
>> >> >>> >> powerful<br>
>> >> >>> >> linux cluster, we still have no result.  I'm not sure if it is<br>
>> >> >>> >> actually running or not to be honest.<br>
>> >> >>> >><br>
>> >> >>> >> Does the query look right?<br>
>> >> >>> >> Any ideas how we can make it run quicker?<br>
>> >> >>> >><br>
>> >> >>> >> Thanks<br>
>> >> >>> >><br>
>> >> >>> >> James<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>
>> >> >>> ><br>
>> >> >>> ><br>
>> >> >>> ><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>
>> >> >>> _______________________________________________<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>
>> >> >><br>
>> >> >><br>
>> >> >><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>
>> >> _______________________________________________<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>
>> ><br>
>> ><br>
>> ><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>
>> _______________________________________________<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>
><br>
><br>
><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>
_______________________________________________<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>