2

I´m working with QGIS 1.8.0. I have a map divided into many features (thousands of small rectangles) and I have a point at the center of each of those features. I also have a map of the transmission lines of the country. Is there any method to measure (not one by one) the shortest distance from the points to the transmission lines? Does the maps have to be projected into any specific CRS?

Regards

enter image description here

5
  • 1
    if your point is at the center of your feature (centroid) then why not take the grid cells edge length divided by 2 ? Or do they have unequal sizes?
    – Curlew
    Commented Aug 21, 2013 at 18:27
  • 1
    No idea how you do it in QGIS, but hey , you can load your data into postgis and use st_closestpoint(). Commented Aug 21, 2013 at 18:51
  • 1
    This may help gis.stackexchange.com/questions/52208/…
    – neogeomat
    Commented Aug 22, 2013 at 3:06
  • Thanks all for the help. Do you know what should I give when asking for the SRID?
    – user20159
    Commented Aug 22, 2013 at 16:14
  • Could you not utilize Distance to nearest Hub or Distance Matrix? I realize that this uses the centroid point of a line but otherwise you could always convert the transmission line to points. Worth a look...
    – GeoPy
    Commented Aug 23, 2013 at 8:00

1 Answer 1

1

Continuing with simplexio's suggestion, if you don't have a PostGIS server at hand, you can do the job quickly and simply with SpatiaLite: Import both the transmission_lines layer and the center_points layer in a new spatialite DB. Then two SQL commands will give you the shortest distance from each point to the transmission line:

First add a column to the centerpoints for the distance value:

ALTER TABLE center_lines ADD COLUMN dist real;

Now calculate the distance:

UPDATE center_points SET dist=(
SELECT MIN( ST_Distance(cp.geometry, tl.geometry) )
FROM center_points AS cp, transmission_lines AS tl
WHERE cp.pk_uid = center_points.pk_uid);

Regarding projection: the ST_Distance function returns values in the units of the projection, so if you want meters, then you must have both layers in a meters based CRS. If your layers are in geographic (Long/Lat) coordinates, you will get the distance in degrees (not very usefull...), so reproject into an appropriate CRS first.

4
  • ok, thansk for your answer, I suppose that is also possible on spatialite-gui? I mean the same codes, etc... :)
    – user20159
    Commented Aug 22, 2013 at 15:26
  • Yes, of course.
    – Micha
    Commented Aug 22, 2013 at 17:51
  • Micha, I tried to do it, but it appears that the function does not exist, any tips? I attach a picture of the error. Thanks again!
    – user20159
    Commented Aug 23, 2013 at 14:45
  • I don't know why you got that error. There most certainly is a function ST_Distance(). But I did notice one important oversight in my answer. You need to wrap the Distance function in MIN() to get the minimum distance for each point. Corrected above.
    – Micha
    Commented Aug 23, 2013 at 21:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.