Convert points to lines
Jump to navigation
Jump to search
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.