[postgis-users] Creating a simple polygon encompassing a given number of points

René Fournier m5 at renefournier.com
Wed Sep 12 11:31:12 PDT 2012


Yes, casting to/from did the trick:

	UPDATE territories SET border = (
SELECT ST_ConvexHull(ST_Collect(location::geometry)) FROM addresses WHERE territory_id = 3014
)::geography WHERE id = 3014;

Now, is it possible process all territory borders with one query? For example, this works for a single territory:

UPDATE territories SET border = (
SELECT ST_ConvexHull(ST_Collect(addresses.location::geometry)) FROM addresses WHERE addresses.territory_id = territories.id
)::geography WHERE id = 3014;
UPDATE 1

But if I leave out the WHERE clause, it doesn't:

UPDATE territories SET border = (
SELECT ST_ConvexHull(ST_Collect(addresses.location::geometry)) FROM addresses WHERE addresses.territory_id = territories.id
)::geography;
ERROR:  Geometry type (LineString) does not match column type (Polygon)

Just wondering, is this kind of update query with a subselect possible?

On 2012-09-12, at 10:04 AM, Nicolas Ribot wrote:

> Hi,
> 
> I think you could cast geography to geometry to collect, then cast
> back to geography to store ?
> 
> 
> 
> On 12 September 2012 17:42, René Fournier <m5 at renefournier.com> wrote:
>> Yes, this works great.
>> 
>> UPDATE territories SET border = (SELECT
>> ST_ConvexHull(ST_Collect(ST_GeomFromText('MULTIPOINT(-111.868842 50.569455,
>> -111.898634 50.569992, -111.907919 50.583764, -111.868859 50.569452)') ) ))
>> WHERE id = 3014;
>> 
>> 
>> Now... I'm trying to figure out, how to do the same, except create the
>> border (polygon) from points in another table, e.g.:
>> 
>> UPDATE territories SET border = (SELECT ST_ConvexHull(ST_Collect( SELECT
>> location FROM addresses WHERE territory_id = 3014 ))) WHERE id = 3014;
>> 
>> ...returns "ERROR:  function st_collect(geography) does not exist HINT:  No
>> function matches the given name and argument types. You might need to add
>> explicit type casts."
>> 
>> So I'm wondering, since both border (final polygon) and location (source of
>> points) are of type geography, what's the best way to go about this? Or
>> should I have just used geometry types? Sorry for the dumb questions, I'm
>> trying to define the schemas by best practices so I don't have to fix them
>> later. Geography seemed right when I started the project.
>> 
>> 
>> 
>> On 2012-09-11, at 1:18 AM, Paolo Corti wrote:
>> 
>> On Tue, Sep 11, 2012 at 3:44 AM, René Fournier <m5 at renefournier.com> wrote:
>> 
>> Thanks Nicolas,
>> 
>> 
>> UPDATE territories SET border =
>> 
>> ST_ConvexHull(ST_Collect(ST_GeomFromText('MULTIPOINT(50.569455 -111.868842,
>> 
>> 50.569992 -111.898634, 50.583764 -111.907919, 50.569452 -111.868859)') ) )
>> 
>> WHERE id = 3014;
>> 
>> ERROR:  cannot use aggregate function in UPDATE
>> 
>> LINE 1: UPDATE territories SET border = ST_ConvexHull(ST_Collect(ST_...
>> 
>> 
>> 
>> Using a sub-select should work:
>> 
>> UPDATE territories SET border = (SELECT
>> ST_ConvexHull(ST_Collect(ST_GeomFromText('MULTIPOINT(50.569455
>> -111.868842, 50.569992 -111.898634, 50.583764 -111.907919, 50.569452
>> -111.868859)') ) ))
>> WHERE id = 3014;
>> 
>> regards
>> p
>> 
>> --
>> Paolo Corti
>> Geospatial software developer
>> web: http://www.paolocorti.net
>> twitter: @capooti
>> skype: capooti
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at postgis.refractions.net
>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>> 
>> 
>> 
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at postgis.refractions.net
>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>> 
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20120912/0aa53c1e/attachment.html>


More information about the postgis-users mailing list