Re: [postgis-users] ST_Split with Multilinestring

2016-06-15 Thread Birgit Laggner, vTI

Hi Sandro,

yes, I read so, too. But, our database has PostGIS version: 
"POSTGIS="2.2.1 r14555" GEOS="3.5.0-CAPI-1.9.0 r4084" PROJ="Rel. 4.9.1, 
04 March 2015" GDAL="GDAL 1.11.2, released 2015/02/10" LIBXML="2.9.2" 
LIBJSON="0.11.99" TOPOLOGY RASTER" and I still get that error. Any idea why?


Regards,

Birgit

Am 15.06.2016 um 19:02 schrieb Sandro Santilli:

On Tue, Jun 14, 2016 at 02:52:52PM +0200, Birgit Laggner wrote:


ERROR: Splitting a Polygon by a MultiLineString is unsupported

Support for this functionality was added in PostGIS-2.2.0

--strk;




___
postgis-users mailing list
postgis-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/postgis-users

Re: [postgis-users] ST_Split with Multilinestring

2016-06-15 Thread Sandro Santilli
On Tue, Jun 14, 2016 at 02:52:52PM +0200, Birgit Laggner wrote:

> ERROR: Splitting a Polygon by a MultiLineString is unsupported

Support for this functionality was added in PostGIS-2.2.0

--strk;
___
postgis-users mailing list
postgis-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/postgis-users

[postgis-users] Raster tile size impact results

2016-06-15 Thread Pierre Bails
Hi all,

I'm looking for get all pixel's value in a raster insert thanks to
raster2pgsql intersect by a polygon.
Nevertheless, there are some things that I don't understand: depends on
tile size, I don't have the same result... The error between 2 raster is
also correlate to the pixel size (I assume it's due to the pixel number).

Can you explain me how the tile size can influence the final result ?

*Here is the query :*
SELECT DISTINCT SUM((px).val)
FROM(
  SELECT *
  FROM  mns INNER JOIN
 st_setsrid(st_geomfromgeojson('{"type":"Polygon","coordinates":[[[x,y],
[x,y],[x,y] ]]}'), 4326) as geom on ST_Intersects(mns.rast, geom)
) AS clip, ST_PixelAsCentroids (ST_Clip(clip.rast, clip.geom),1) AS px;

*DSM px size 70cm: *
raster2pgsql -a -t 250x250 -s 4326 -F pathToDSM.tiff dsmTable (result: 46
347 846)
raster2pgsql -a -t 50x50 -s 4326 -F pathToDSM.tiff dsmTable: 46 382 873
Difference: 35027

*DSM px size 20cm : *
raster2pgsql -a -t 250x250 -s 4326 -F pathToDSM.tiff dsmTable :  567 505
888
raster2pgsql -a -t 50x50 -s 4326 -F pathToDSM.tiff dsmTable: 596 897 610
Difference: 29 391 722

If we considere 250x250's result as reference, there is a difference of
0.07% in the first case, and 5% in the second. If the polygon
area increases, the error rate increases.

Thank you,

Pierre
___
postgis-users mailing list
postgis-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/postgis-users

Re: [postgis-users] ST_Split with Multilinestring

2016-06-15 Thread Birgit Laggner
Yes, this function will probably work - that's similar to what I meant 
with "looping the ST_Split with some function, DO block or pgScript 
after selecting all intersecting linestrings per polygon" in my original 
mail. If my current approach fails, too, I will revert to some sort of 
looping approach like the one you suggested. Thanks again for taking the 
time to analyze my problem!


Regards,

Birgit


Achtung: Das Thünen-Institut hat die Domain gewechselt.
 Bitte ändern Sie meine Mailadresse in Ihrem Adressbuch!

Notice: Thünen Institute has changed its domain.
Please change my email address in your address book!


Dipl.-Geoökol. Birgit Laggner

Thünen-Institut für Ländliche Räume / Thünen Institute of Rural Studies
Bundesallee 50
38116 Braunschweig (Germany)

Tel: +49 531 596-5240
Mail: birgit.lagg...@thuenen.de
Web: www.thuenen.de

Am 15.06.2016 um 11:27 schrieb Marcin Mionskowski:
I think I finaly understand what you have and what you want to achieve 
- take a look at polygon and multiline definitions :)


If I'm right, this function should do the work:

create table polygon
(
id serial,
geom geometry,
done smallint default 0
);
create table multiline
(
id serial,
geom geometry,
done smallint default 0
);
create table line
(
id serial,
geom geometry,
done smallint default 0
);

insert into polygon (geom)
select ST_Buffer(ST_GeomFromText('POINT(10 10)'), 10);

insert into multiline (geom)
select ST_Union(
(select ST_MakeLine(ST_MakePoint(0, 1),ST_MakePoint(20, 21))),
(select ST_MakeLine(ST_MakePoint(1, 0),ST_MakePoint(20, 19)))
);

create or replace function test() returns void as
$BODY$

declare ln geometry;
i int;

BEGIN
truncate table line;

insert into line (geom)
select (ST_Dump(geom)).geom
from multiline;

loop
select geom,id
into ln,i
from line
where done=0
limit 1;

with
del as (
delete from polygon p
where ST_Intersects(p.geom,ln)
returning p.geom
)
insert into polygon (geom)
select (st_dump(st_split(del.geom,ln))).geom
from del;

update line
set done=1
where id=i;

exit when i is null;
end loop;
end;
$BODY$
LANGUAGE plpgsql;

select test();



On Wed, 15 Jun 2016 11:10:33 +0200, Birgit Laggner 
 wrote:



Dear list,

@Marcone: Unfortunately, the st_multi didn't change anything. The error
message is still the same.

Next, I will try some function from a user example from 2008
(https://trac.osgeo.org/postgis/wiki/UsersWikiSplitPolygonWithLineString). 


Maybe this will be a workaround.

But I am still wondering why I get the error message at all. I did find
a PostGIS ticket addressing the same functionality
(https://trac.osgeo.org/postgis/ticket/3097) and there is mentioned that
the problem is fixed with PostGIS 2.2.0. My PostGIS version is
"POSTGIS="2.2.1 r14555" GEOS="3.5.0-CAPI-1.9.0 r4084" PROJ="Rel. 4.9.1,
04 March 2015" GDAL="GDAL 1.11.2, released 2015/02/10" LIBXML="2.9.2"
LIBJSON="0.11.99" TOPOLOGY RASTER". So, I would suppose I shouldn't have
this problem.

Any other ideas?

Thanks and regards,

Birgit

Am 15.06.2016 um 10:01 schrieb Birgit Laggner:

Hi Marcin,

thanks for your reply. I don't think, that will provide the results I
am looking for. I am deliberately aggregating all intersecting lines
with ST_Union because otherwise the query would result in several
collections per polygon, each collection containig the st_split result
for one of the intersecting lines (blades). But I want the polygon cut
with all blades.

Currently I am trying Marcone's suggestion (although I cannot imagine
why this should solve anything - but you never know until you try,
right?).

So, thank you both, Marcin and Marcone!

Regards,

Birgit

Am 15.06.2016 um 09:24 schrieb Marcin Mionskowski:

On Tue, 14 Jun 2016 15:37:40 +0200, Marcone 
wrote:



2016-06-14 9:52 GMT-03:00 Birgit Laggner :

I would like to use the ST_Split function to split polygons from one
   table with all intersecting lines from another table.
Unfortunately,
   I get the following error:

 ERROR: Splitting a Polygon by a MultiLineString is unsupported

   SQL Status:XX000

 This is my query:

 select betr_id, (cut).path[1], (cut).geom from (select betr_id,
   st_dump(st_split) as cut from (select a.betr_id, ST_Split(a.geom,
   st_union(b.geom)) from p_sam.nihb_2013_convex_hull_betr a left 
join
   p_sam.ni_dlm13_aaa_gew_sie_ver_l b on st_intersects(a.geom, 
b.geom)

   group by a.betr_id, a.geom) sel1) sel2;

 The Manual contains the following info regarding this problem:

 "The function supports splitting a line by (multi)point,
(multi)line
   or (multi)polygon boundary, a (multi)polygon 

Re: [postgis-users] ST_Split with Multilinestring

2016-06-15 Thread Marcin Mionskowski

I think I finaly understand what you have and what you want to achieve - take a 
look at polygon and multiline definitions :)

If I'm right, this function should do the work:

create table polygon
(
id serial,
geom geometry,
done smallint default 0
);
create table multiline
(
id serial,
geom geometry,
done smallint default 0
);
create table line
(
id serial,
geom geometry,
done smallint default 0
);

insert into polygon (geom)
select ST_Buffer(ST_GeomFromText('POINT(10 10)'), 10);

insert into multiline (geom)
select ST_Union(
(select ST_MakeLine(ST_MakePoint(0, 1),ST_MakePoint(20, 21))),
(select ST_MakeLine(ST_MakePoint(1, 0),ST_MakePoint(20, 19)))
);

create or replace function test() returns void as
$BODY$

declare ln geometry;
i int;

BEGIN
truncate table line;

insert into line (geom)
select (ST_Dump(geom)).geom
from multiline;

loop
select geom,id
into ln,i
from line
where done=0
limit 1;

with
del as (
delete from polygon p
where ST_Intersects(p.geom,ln)
returning p.geom
)
insert into polygon (geom)
select (st_dump(st_split(del.geom,ln))).geom
from del;

update line
set done=1
where id=i;

exit when i is null;
end loop;
end;
$BODY$
LANGUAGE plpgsql;

select test();



On Wed, 15 Jun 2016 11:10:33 +0200, Birgit Laggner  
wrote:


Dear list,

@Marcone: Unfortunately, the st_multi didn't change anything. The error
message is still the same.

Next, I will try some function from a user example from 2008
(https://trac.osgeo.org/postgis/wiki/UsersWikiSplitPolygonWithLineString).
Maybe this will be a workaround.

But I am still wondering why I get the error message at all. I did find
a PostGIS ticket addressing the same functionality
(https://trac.osgeo.org/postgis/ticket/3097) and there is mentioned that
the problem is fixed with PostGIS 2.2.0. My PostGIS version is
"POSTGIS="2.2.1 r14555" GEOS="3.5.0-CAPI-1.9.0 r4084" PROJ="Rel. 4.9.1,
04 March 2015" GDAL="GDAL 1.11.2, released 2015/02/10" LIBXML="2.9.2"
LIBJSON="0.11.99" TOPOLOGY RASTER". So, I would suppose I shouldn't have
this problem.

Any other ideas?

Thanks and regards,

Birgit

Am 15.06.2016 um 10:01 schrieb Birgit Laggner:

Hi Marcin,

thanks for your reply. I don't think, that will provide the results I
am looking for. I am deliberately aggregating all intersecting lines
with ST_Union because otherwise the query would result in several
collections per polygon, each collection containig the st_split result
for one of the intersecting lines (blades). But I want the polygon cut
with all blades.

Currently I am trying Marcone's suggestion (although I cannot imagine
why this should solve anything - but you never know until you try,
right?).

So, thank you both, Marcin and Marcone!

Regards,

Birgit

Am 15.06.2016 um 09:24 schrieb Marcin Mionskowski:

On Tue, 14 Jun 2016 15:37:40 +0200, Marcone 
wrote:



2016-06-14 9:52 GMT-03:00 Birgit Laggner :

I would like to use the ST_Split function to split polygons from one
   table with all intersecting lines from another table.
Unfortunately,
   I get the following error:

 ERROR: Splitting a Polygon by a MultiLineString is unsupported

   SQL Status:XX000

 This is my query:

 select betr_id, (cut).path[1], (cut).geom from (select betr_id,
   st_dump(st_split) as cut from (select a.betr_id, ST_Split(a.geom,
   st_union(b.geom)) from p_sam.nihb_2013_convex_hull_betr a left join
   p_sam.ni_dlm13_aaa_gew_sie_ver_l b on st_intersects(a.geom, b.geom)
   group by a.betr_id, a.geom) sel1) sel2;

 The Manual contains the following info regarding this problem:

 "The function supports splitting a line by (multi)point,
(multi)line
   or (multi)polygon boundary, a (multi)polygon by line."

 This might mean that I would be able to split a line by
   multilinestrings, but a polygon only by single linestrings - is
that
   correct? Does anyone has a suggestion how I could work around this
   problem (aside from looping the ST_Split with some function, DO
   block or pgScript after selecting all intersecting linestrings per
   polygon)?

 Thanks a lot for any helpful suggestions!


I'm not sure if I understand your problem, but try use
ST_Split(st_multi(a.geom),
   st_union(b.geom)). I'm not test this, but I think that will solve
your problem.

Best regards.




Have you tried to ST_Dump multilinestrings first?
Using CTE this could look like:

with
a as ( --polygon
select ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) a
),
b as ( --multilinestring
select ST_Union(
  

Re: [postgis-users] ST_Split with Multilinestring

2016-06-15 Thread Birgit Laggner

Dear list,

@Marcone: Unfortunately, the st_multi didn't change anything. The error 
message is still the same.


Next, I will try some function from a user example from 2008 
(https://trac.osgeo.org/postgis/wiki/UsersWikiSplitPolygonWithLineString). 
Maybe this will be a workaround.


But I am still wondering why I get the error message at all. I did find 
a PostGIS ticket addressing the same functionality 
(https://trac.osgeo.org/postgis/ticket/3097) and there is mentioned that 
the problem is fixed with PostGIS 2.2.0. My PostGIS version is 
"POSTGIS="2.2.1 r14555" GEOS="3.5.0-CAPI-1.9.0 r4084" PROJ="Rel. 4.9.1, 
04 March 2015" GDAL="GDAL 1.11.2, released 2015/02/10" LIBXML="2.9.2" 
LIBJSON="0.11.99" TOPOLOGY RASTER". So, I would suppose I shouldn't have 
this problem.


Any other ideas?

Thanks and regards,

Birgit

Am 15.06.2016 um 10:01 schrieb Birgit Laggner:

Hi Marcin,

thanks for your reply. I don't think, that will provide the results I 
am looking for. I am deliberately aggregating all intersecting lines 
with ST_Union because otherwise the query would result in several 
collections per polygon, each collection containig the st_split result 
for one of the intersecting lines (blades). But I want the polygon cut 
with all blades.


Currently I am trying Marcone's suggestion (although I cannot imagine 
why this should solve anything - but you never know until you try, 
right?).


So, thank you both, Marcin and Marcone!

Regards,

Birgit

Am 15.06.2016 um 09:24 schrieb Marcin Mionskowski:
On Tue, 14 Jun 2016 15:37:40 +0200, Marcone  
wrote:




2016-06-14 9:52 GMT-03:00 Birgit Laggner :

I would like to use the ST_Split function to split polygons from one
   table with all intersecting lines from another table. 
Unfortunately,

   I get the following error:

 ERROR: Splitting a Polygon by a MultiLineString is unsupported

   SQL Status:XX000

 This is my query:

 select betr_id, (cut).path[1], (cut).geom from (select betr_id,
   st_dump(st_split) as cut from (select a.betr_id, ST_Split(a.geom,
   st_union(b.geom)) from p_sam.nihb_2013_convex_hull_betr a left join
   p_sam.ni_dlm13_aaa_gew_sie_ver_l b on st_intersects(a.geom, b.geom)
   group by a.betr_id, a.geom) sel1) sel2;

 The Manual contains the following info regarding this problem:

 "The function supports splitting a line by (multi)point, 
(multi)line

   or (multi)polygon boundary, a (multi)polygon by line."

 This might mean that I would be able to split a line by
   multilinestrings, but a polygon only by single linestrings - is 
that

   correct? Does anyone has a suggestion how I could work around this
   problem (aside from looping the ST_Split with some function, DO
   block or pgScript after selecting all intersecting linestrings per
   polygon)?

 Thanks a lot for any helpful suggestions!


I'm not sure if I understand your problem, but try use 
ST_Split(st_multi(a.geom),
   st_union(b.geom)). I'm not test this, but I think that will solve 
your problem.


Best regards.




Have you tried to ST_Dump multilinestrings first?
Using CTE this could look like:

with
a as ( --polygon
select ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) a
),
b as ( --multilinestring
select ST_Union(
(select ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 
190))),
(select ST_MakeLine(ST_MakePoint(191, 191),ST_MakePoint(200, 
200)))

) b
),
c as ( --multilinestring dump -> 2 separate linestrings
select (ST_Dump(b)).geom c
from b
)

SELECT ST_AsText(ST_Split(a, c))
from a,c
where ST_Intersects(a,c)

Intersection check is done here on line parts.

Regards
___
postgis-users mailing list
postgis-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/postgis-users


___
postgis-users mailing list
postgis-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/postgis-users


___
postgis-users mailing list
postgis-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/postgis-users

Re: [postgis-users] ST_Split with Multilinestring

2016-06-15 Thread Birgit Laggner

Hi Marcin,

thanks for your reply. I don't think, that will provide the results I am 
looking for. I am deliberately aggregating all intersecting lines with 
ST_Union because otherwise the query would result in several collections 
per polygon, each collection containig the st_split result for one of 
the intersecting lines (blades). But I want the polygon cut with all blades.


Currently I am trying Marcone's suggestion (although I cannot imagine 
why this should solve anything - but you never know until you try, right?).


So, thank you both, Marcin and Marcone!

Regards,

Birgit

Am 15.06.2016 um 09:24 schrieb Marcin Mionskowski:
On Tue, 14 Jun 2016 15:37:40 +0200, Marcone  
wrote:




2016-06-14 9:52 GMT-03:00 Birgit Laggner :

I would like to use the ST_Split function to split polygons from one
   table with all intersecting lines from another table. Unfortunately,
   I get the following error:

 ERROR: Splitting a Polygon by a MultiLineString is unsupported

   SQL Status:XX000

 This is my query:

 select betr_id, (cut).path[1], (cut).geom from (select betr_id,
   st_dump(st_split) as cut from (select a.betr_id, ST_Split(a.geom,
   st_union(b.geom)) from p_sam.nihb_2013_convex_hull_betr a left join
   p_sam.ni_dlm13_aaa_gew_sie_ver_l b on st_intersects(a.geom, b.geom)
   group by a.betr_id, a.geom) sel1) sel2;

 The Manual contains the following info regarding this problem:

 "The function supports splitting a line by (multi)point, 
(multi)line

   or (multi)polygon boundary, a (multi)polygon by line."

 This might mean that I would be able to split a line by
   multilinestrings, but a polygon only by single linestrings - is that
   correct? Does anyone has a suggestion how I could work around this
   problem (aside from looping the ST_Split with some function, DO
   block or pgScript after selecting all intersecting linestrings per
   polygon)?

 Thanks a lot for any helpful suggestions!


I'm not sure if I understand your problem, but try use 
ST_Split(st_multi(a.geom),
   st_union(b.geom)). I'm not test this, but I think that will solve 
your problem.


Best regards.




Have you tried to ST_Dump multilinestrings first?
Using CTE this could look like:

with
a as ( --polygon
select ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) a
),
b as ( --multilinestring
select ST_Union(
(select ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 
190))),
(select ST_MakeLine(ST_MakePoint(191, 191),ST_MakePoint(200, 
200)))

) b
),
c as ( --multilinestring dump -> 2 separate linestrings
select (ST_Dump(b)).geom c
from b
)

SELECT ST_AsText(ST_Split(a, c))
from a,c
where ST_Intersects(a,c)

Intersection check is done here on line parts.

Regards
___
postgis-users mailing list
postgis-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/postgis-users


___
postgis-users mailing list
postgis-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/postgis-users

Re: [postgis-users] ST_Split with Multilinestring

2016-06-15 Thread Marcin Mionskowski

On Tue, 14 Jun 2016 15:37:40 +0200, Marcone  wrote:



2016-06-14 9:52 GMT-03:00 Birgit Laggner :

I would like to use the ST_Split function to split polygons from one
   table with all intersecting lines from another table. Unfortunately,
   I get the following error:

   
   ERROR: Splitting a Polygon by a MultiLineString is unsupported


   SQL Status:XX000

   
   This is my query:


   
   select betr_id, (cut).path[1], (cut).geom from (select betr_id,

   st_dump(st_split) as cut from (select a.betr_id, ST_Split(a.geom,
   st_union(b.geom)) from p_sam.nihb_2013_convex_hull_betr a left join
   p_sam.ni_dlm13_aaa_gew_sie_ver_l b on st_intersects(a.geom, b.geom)
   group by a.betr_id, a.geom) sel1) sel2;

   
   The Manual contains the following info regarding this problem:


   
   "The function supports splitting a line by (multi)point, (multi)line

   or (multi)polygon boundary, a (multi)polygon by line."

   
   This might mean that I would be able to split a line by

   multilinestrings, but a polygon only by single linestrings - is that
   correct? Does anyone has a suggestion how I could work around this
   problem (aside from looping the ST_Split with some function, DO
   block or pgScript after selecting all intersecting linestrings per
   polygon)?

   
   Thanks a lot for any helpful suggestions!


I'm not sure if I understand your problem, but try use 
ST_Split(st_multi(a.geom),
   st_union(b.geom)). I'm not test this, but I think that will solve your 
problem.

Best regards.




Have you tried to ST_Dump multilinestrings first?
Using CTE this could look like:

with
a as ( --polygon
select ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) a
),
b as ( --multilinestring
select ST_Union(
(select ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 
190))),
(select ST_MakeLine(ST_MakePoint(191, 191),ST_MakePoint(200, 
200)))
) b
),
c as ( --multilinestring dump -> 2 separate linestrings
select (ST_Dump(b)).geom c
from b
)

SELECT ST_AsText(ST_Split(a, c))
from a,c
where ST_Intersects(a,c)

Intersection check is done here on line parts.

Regards
___
postgis-users mailing list
postgis-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/postgis-users

[postgis-users] useful info

2016-06-15 Thread Janovics Tamas
Hey,
As I understood from your last message you were looking for some information , 
I think this is it 
Typos courtesy of my iPhone, Janovics Tamas

___
postgis-users mailing list
postgis-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/postgis-users