Convert points to lines

From GRASS-Wiki
Revision as of 16:22, 9 January 2015 by Neteler (talk | contribs) (Script contributed by getis.diettrich)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Q: Is there a way to construct a vector line(s) map connecting selected points?

A: There are several possibilities:

Converting points map into lines map

You can use v.in.lines for that. The input can be generated with v.out.ascii.

Spearfish example:

  v.out.ascii archsites fs=, where="cat=1 or cat= 3"
  593493,4914730,1
  589860,4922000,3
 
  # so:
  v.out.ascii archsites fs=, where="cat=1 or cat= 3" | cut -d',' -f1,2 | \
      v.in.lines in=- out=myline fs=,
  v.category in=myline out=line_with_cat option=add

Converting CSV points file into lines map

Suppose you have a CSV file "mypoints.csv" containing three point-pairs to be connected (start point coordinates, end point coordinates):

 east1,north1,east2,north2
 593493,4914730,589860,4922000
 590400,4922820,593549,4925500
 600375,4925235,606635,4920773

We can convert these three point pairs into three lines:

  cat mypoints.csv | grep -v "north1" | awk -F',' '{printf "%f,%f\n%f,%f\nNaN,NaN\n",$1, $2 ,$3 ,$4}' > mypoints_formatted.csv
  v.in.lines in=mypoints_formatted.csv out=mylines fs=,
  v.category in=mylines out=lines_with_cat option=add

Script to convert CSV points file into ASCII file for v.in.lines import

#!/bin/bash                                    
# letzte Änderung 09.01.2015 
# gpx Leitungsdaten für v.in.lines konvertieren         

FILE=test.csv

head -1 $FILE > te3.tmp
N=`cut -c 11-20 te3.tmp`
E=`cut -c 22-31 te3.tmp`
rm *.tmp

awk -v E=$E -v N=$N '  
BEGIN {
FS=";"
z=0
}
		{if(z != 1){
		z=z+1
		printf("%10.7f\%s\%10.7f\%s\n" \
		,E,"|",N,"|")
		}						
		else{
		E=$5
		N=$4
		printf("%10.7f\%s\%10.7f\%s\nNaN|NaN|\n" \
		,$5,"|",$4,"|")
		z=0
		}
	}
END{ 	
}' $FILE > formatted_csv.txt

## Now run import:
# v.in.lines in=formatted_csv.txt  out=test

Triangulate the points into a lines map

Use v.delaunay for that.

See also