[postgis-users] Finding Points with distance to a location.

Brad Ediger brad at bradediger.com
Fri Dec 29 23:18:30 PST 2006


You don't want to order by the point_geom because Postgres doesn't  
understand the geometry type natively. You should ORDER BY  
distance_spheroid(...) with the distance_spheroid clause being the  
same as in the SELECT clause.

On Dec 30, 2006, at 1:12 AM, Adam wrote:

> I've changed this to give me output by miles:
>
> SELECT
>     location_id,
>     (
>       distance_spheroid(point_geom,
>       SetSRID(MakePoint(-117.13538, 32.6857),4326),
>       'SPHEROID["WGS_1984",6378137,298.257223563]') / 1609.344
>     )
> FROM
>     locations;
>
> How would I change this to give me the first returned row as the  
> closest point and ascend to the farthest point?  I know I'd usually  
> use an "ORDERY BY" clause, but what do I "ORDER BY"?  I tried  
> "ORDER BY point_geom" but that isn't exactly in order.
>
>
> ----- Original Message -----
> From: Brad Ediger
> To: PostGIS Users Discussion
> Sent: Saturday, December 30, 2006 12:58 AM
> Subject: Re: [postgis-users] Finding Points with distance to a  
> location.
>
> My bad.
>
> SELECT location_id, Distance(point_geom, SetSRID(MakePoint 
> (-117.13538, 32.6857),4326)) FROM locations;
> PostGIS does some sanity checks to ensure you're not operating on  
> different SRIDs (which would be meaningless). You have to tell  
> PostGIS that the point you're creating has SRID 4326 (WGS84). Note  
> that SetSRID won't convert a geometry from one SRID to another; you  
> need Transform() for that. You're simply tagging that point with  
> the 4326 SRID.
>
> On Dec 30, 2006, at 12:54 AM, Adam wrote:
>
>> WHen I run: SELECT location_id, Distance(point_geom, MakePoint 
>> (-117.13538, 32.6857)) FROM locations;
>>
>> I get error:  Operation on two GEOMETRIES with different SRIDs
>>
>> What does that mean?
>> ----- Original Message -----
>> From: Brad Ediger
>> To: PostGIS Users Discussion
>> Sent: Saturday, December 30, 2006 12:49 AM
>> Subject: Re: [postgis-users] Finding Points with distance to a  
>> location.
>>
>> You want to use the Distance function in the result set:
>>
>> SELECT location_id, Distance(point_geom, MakePoint(-117.13538,  
>> 32.6857)) FROM table;
>>
>> You don't need a WHERE clause unless you want to restrict the  
>> result rows (for example, if you wanted to limit the results to  
>> locations within 50 miles of the target point).
>>
>> I would suggest reviewing the PostgreSQL documentation for some  
>> basic SQL instruction (at http://www.postgresql.org/docs/; the  
>> manual is actually very good). Then you can refer to the PostGIS  
>> reference (http://postgis.refractions.net/docs/ch06.html) for a  
>> list of functions.
>>
>> You really don't need a lot of knowledge on top of PostgreSQL to  
>> use PostGIS effectively. Most everything that seems confusing or  
>> vague about the PostGIS documentation can be clarified by reading  
>> the OpenGIS specs, at http://www.opengeospatial.org/standards/sfa  
>> and http://www.opengeospatial.org/standards/sfb.
>>
>> And you can always ask on postgis-users if you need clarification.
>>
>> Hope this helps,
>> Brad
>>
>> On Dec 30, 2006, at 12:10 AM, Adam wrote:
>>
>>> I've tried:
>>>
>>> SELECT point_geom, location_id
>>> FROM locations
>>> WHERE Distance(point_geom, 'POINT(-117.13538 32.6857)')
>>> But get error:  argument of WHERE must be type boolean, not type  
>>> double precision
>>>
>>>
>>> ----- Original Message -----
>>> From: Adam
>>> To: PostGIS Users Discussion
>>> Sent: Saturday, December 30, 2006 12:07 AM
>>> Subject: [postgis-users] Finding Points with distance to a location.
>>>
>>> I figured this out last year, but can't figure out how I figured  
>>> it out.  I've read "Mapping Hacks" and "Web Mapping Illustrated"  
>>> along with what I could find in the WIKI and documentation but  
>>> can't start to figure it out.
>>>
>>> I have my geometry column named "point_geom" and a unique column  
>>> named "location_id".
>>>
>>> I want to query the distance of all the points in my "point_geom"  
>>> column to coords:  Long = -117.13538 :: Lat = 32.6857
>>>
>>> What would the query for this look like?  Is there a  
>>> comprehensive article or book out that goes in depth into how  
>>> spatial queries work?
>>>
>>> The output would look like this:
>>>
>>> location_id | distance
>>> -------------------------------
>>> 5 | 45.38823
>>> 9 | 50.39952
>>> 1 | 82.39923
>>> .
>>> .
>>> .
>>> -------------------------------
>>>
>>>
>>> I'm guessing that you'd use distance_spheroid for the calculation.
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> 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
>> _______________________________________________
>> 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/20061230/8aec32e4/attachment.html>


More information about the postgis-users mailing list