Hallo

>From Esri perspective I don't think you should consider it basic 
>functionalitysince it requires ArcInfo license. 

But I agree that the functionality included in this Near function isquite 
basic. But there is a lot of different functionality mixed up inthe function.

If you are storing your data in PostGIS you can do it there. If youdon't... it 
might be a great idea to do :-)

To get the search radius you use ST_Dwithin. Then you can order thecatched 
features with ST_Distance and from your resulting nearestfeatures you can get 
all the resulting data that is included in thisNear function by using different 
of functions

Here comes an example where I have tried to do it as similar as the 
nearfunction as possible.
You can run it here:
http://www.postgisonline.org/map.php
The query searches for the houses closest to the three phone_masts. Toeasier 
see what it is about you can choose "All_simple_maps" underbackground maps.
The resulting map will just show a line between the phone mast and theclosest 
house and then you can find the attribute data if you press"Attribute table 
Map1"

This near_x and near_y I don't really understand. On the pictures itlooks like 
they are dealing with delta x and delta y but in the textthey are just 
discussing the x and y value of the found closest point.Both variants is easy 
to do but here I calculate the delta x and deltay.

The query looks more messy than nessecary because I have squized in allthat is 
included in near function. In reality you just specify the partsyou need of 
course. 

Here it comes, just copy it into the big textarea and press "Map 1" andchoose 
background map as desribed above


SELECT  
mastid,
houseid as fid,
ST_Distance(ageom, bgeom) as near_dist,
ST_X(ST_Endpoint(shortline))-ST_X(ST_Startpoint(shortline)) as near_x,
ST_Y(ST_Endpoint(shortline))-ST_Y(ST_Startpoint(shortline)) as near_y,
 ST_Azimuth(ST_Startpoint(shortline),ST_Endpoint(shortline))/(2*pi())*360as 
near_angle,
shortline as the_geom /*just for showing the line on the map*/
from 
(
    SELECT distinct on (mastid) mastid, houseid,  a.the_geom as 
ageom,b.the_geom as bgeom, ST_Shortestline(a.the_geom, b.the_geom) asshortline 
    FROM phone_masts a, houses b 
    WHERE ST_DWithin(a.the_geom, b.the_geom, 50000) 
    ORDER BY a.mastid, ST_Distance(a.the_geom, b.the_geom)
) subq;

I wrote it with a subquery to save some rewriting.

then to use it in QGIS you just put 
create table a_new_fancy_table_name as
in front of the query and run it all together and to get a unique id you 
afterwards run

alter table your_new_fancy_table_name add column gid serial unique;

then you will get a new column automatically filled. You also get a constraint 
that tells that the value in the field has to be unique.


Cheers
Nicklas


2010-05-26 whollycow  wrote:

Is anyone aware of a function equivalent to "Near" in ArcGIS?(see 
webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=Near_(Analysis) for 
reference)I have been searching all day and haven't come across anything quite 
like it.  It seems like such basic functionality I would be surprised if 
someone hasn't already coded a solution.
>View this message in context: QGIS "Near"
>Sent from the qgis-user mailing list archive at Nabble.com.
>
_______________________________________________
Qgis-user mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/qgis-user

Reply via email to