GRASS Programmer's Manual
6.5.svn(2014)-r66266
|
Vector library - geometry manipulation. More...
#include <stdlib.h>
#include <math.h>
#include <grass/gis.h>
#include <grass/Vect.h>
#include <grass/glocale.h>
Go to the source code of this file.
Functions | |
struct line_pnts * | Vect__new_line_struct (void) |
Creates and initializes a struct line_pnts. More... | |
struct line_pnts * | Vect_new_line_struct () |
Creates and initializes a struct line_pnts. More... | |
int | Vect_destroy_line_struct (struct line_pnts *p) |
Frees all memory associated with a struct line_pnts, including the struct itself. More... | |
int | Vect_copy_xyz_to_pnts (struct line_pnts *Points, double *x, double *y, double *z, int n) |
Copy points from array to line structure. More... | |
int | Vect_reset_line (struct line_pnts *Points) |
Reset line. More... | |
int | Vect_append_point (struct line_pnts *Points, double x, double y, double z) |
Appends one point to the end of a line. More... | |
int | Vect_line_insert_point (struct line_pnts *Points, int index, double x, double y, double z) |
Insert new point at index position and move all old points at that position and above up. More... | |
int | Vect_line_delete_point (struct line_pnts *Points, int index) |
Delete point at given index and move all points above down. More... | |
int | Vect_line_prune (struct line_pnts *Points) |
Remove duplicate points, i.e. zero length segments. More... | |
int | Vect_line_prune_thresh (struct line_pnts *Points, double threshold) |
Remove points in threshold. More... | |
int | Vect_append_points (struct line_pnts *Points, struct line_pnts *APoints, int direction) |
Appends points to the end of a line. More... | |
int | Vect_copy_pnts_to_xyz (struct line_pnts *Points, double *x, double *y, double *z, int *n) |
Copy points from line structure to array. More... | |
int | Vect_point_on_line (struct line_pnts *Points, double distance, double *x, double *y, double *z, double *angle, double *slope) |
Find point on line in the specified distance. More... | |
int | Vect_line_segment (struct line_pnts *InPoints, double start, double end, struct line_pnts *OutPoints) |
Create line segment. More... | |
double | Vect_line_length (struct line_pnts *Points) |
Calculate line length, 3D-length in case of 3D vector line. More... | |
double | Vect_line_geodesic_length (struct line_pnts *Points) |
Calculate line length. More... | |
int | Vect_line_distance (struct line_pnts *points, double ux, double uy, double uz, int with_z, double *px, double *py, double *pz, double *dist, double *spdist, double *lpdist) |
calculate line distance. More... | |
double | Vect_points_distance (double x1, double y1, double z1, double x2, double y2, double z2, int with_z) |
Calculate distance of 2 points. More... | |
int | Vect_line_box (struct line_pnts *Points, BOUND_BOX *Box) |
Get bounding box of line. More... | |
void | Vect_line_reverse (struct line_pnts *Points) |
Reverse the order of vertices. More... | |
int | Vect_get_line_cat (struct Map_info *Map, int line, int field) |
Fetches FIRST category number for given vector line and field. More... | |
Vector library - geometry manipulation.
(C) 2001-2008 by the GRASS Development Team
This program is free software under the GNU General Public License (>=v2). Read the file COPYING that comes with GRASS for details.
Definition in file line.c.
struct line_pnts * Vect__new_line_struct | ( | void | ) |
Creates and initializes a struct line_pnts.
Use Vect_new_line_struct() instead.
This structure is used for reading and writing vector lines and polygons. The library routines handle all memory allocation. If 3 lines in memory are needed at the same time, then simply 3 line_pnts structures have to be used.
void |
Definition at line 67 of file line.c.
References malloc(), and NULL.
Referenced by Vect_new_line_struct().
int Vect_append_point | ( | struct line_pnts * | Points, |
double | x, | ||
double | y, | ||
double | z | ||
) |
Appends one point to the end of a line.
Returns new number of points or -1 on out of memory Note, this will append to whatever is in line struct. If you are re-using a line struct, be sure to clear out old data first by calling Vect_reset_line().
Points | line |
x,y,z | point coordinates to be added |
Definition at line 168 of file line.c.
References dig_alloc_points(), n, and y.
Referenced by wxdigit.IVDigit::EditLine(), G_site_put(), IL_check_at_points_2d(), wxdigit.IVDigit::InitCats(), wxdigit.IVDigit::MoveSelectedVertex(), NetA_add_point_on_node(), wxdisplay.DisplayDriver::SelectLinesByBox(), wxdigit.IVDigit::SelectLinesByQuery(), wxdigit.IVDigit::SplitLine(), V2_read_line_ogr(), Vect__intersect_line_with_poly(), Vect_break_lines_list(), Vect_break_polygons(), Vect_clean_small_angles_at_nodes(), Vect_line_buffer(), Vect_line_intersection(), Vect_line_segment(), Vect_net_nearest_nodes(), Vect_net_shortest_path_coor2(), Vect_point_buffer2(), Vect_snap_line(), Vect_snap_lines_list(), Vedit_bulk_labeling(), Vedit_merge_lines(), and Vedit_split_lines().
Appends points to the end of a line.
Note, this will append to whatever is in line struct. If you are re-using a line struct, be sure to clear out old data first by calling Vect_reset_line().
Points | line |
APoints | points to be included |
direction | direction (GV_FORWARD, GV_BACKWARD) |
Definition at line 312 of file line.c.
References dig_alloc_points(), and n.
Referenced by V1_read_next_line_ogr(), Vect_build_line_area(), Vect_get_area_points(), Vect_get_isle_points(), Vect_line_buffer(), Vect_merge_lines(), Vect_net_shortest_path_coor2(), and Vect_snap_line().
Copy points from array to line structure.
Points | line structure |
x,y,z | coordinates |
number | of points to be copied |
Definition at line 115 of file line.c.
References dig_alloc_points(), n, and NULL.
Referenced by Vect_line_check_intersection().
int Vect_destroy_line_struct | ( | struct line_pnts * | p | ) |
Frees all memory associated with a struct line_pnts, including the struct itself.
p | pointer to line_pnts structure |
Definition at line 90 of file line.c.
References G_free().
Referenced by wxdisplay.DisplayDriver::__del__(), wxdigit.IVDigit::__del__(), wxdisplay.DisplayDriver::GetDuplicates(), wxdigit.IVDigit::InitCats(), NetA_add_point_on_node(), wxdigit.IVDigit::OpenBackgroundMap(), wxdisplay.DisplayDriver::SelectLinesByBox(), V1_close_ogr(), Vect_area_buffer2(), Vect_break_lines_list(), Vect_copy_map_lines(), Vect_get_area_area(), Vect_line_buffer2(), Vect_line_intersection(), Vect_merge_lines(), Vect_snap_line(), Vect_snap_lines_list(), Vedit_add_vertex(), Vedit_bulk_labeling(), Vedit_chtype_lines(), Vedit_copy_lines(), Vedit_flip_lines(), Vedit_merge_lines(), Vedit_modify_cats(), Vedit_move_lines(), Vedit_move_vertex(), Vedit_remove_vertex(), Vedit_select_by_query(), Vedit_snap_lines(), Vedit_snap_point(), and Vedit_split_lines().
Fetches FIRST category number for given vector line and field.
Map | vector map |
line | line id |
field | layer number |
Definition at line 815 of file line.c.
References cat, G_debug(), NULL, Vect_cat_get(), Vect_new_cats_struct(), and Vect_read_line().
int Vect_line_box | ( | struct line_pnts * | Points, |
BOUND_BOX * | Box | ||
) |
Get bounding box of line.
Points | line | |
[out] | Box | bounding box |
Definition at line 771 of file line.c.
References dig_line_box().
Referenced by V1_read_next_line_nat(), V1_read_next_line_ogr(), and Vect_remove_duplicates().
Delete point at given index and move all points above down.
Points | line |
index | (from 0 to Points->n_points-1) |
Definition at line 227 of file line.c.
References G_fatal_error(), and n.
Referenced by Vect_clean_small_angles_at_nodes(), and Vedit_remove_vertex().
int Vect_line_distance | ( | struct line_pnts * | points, |
double | ux, | ||
double | uy, | ||
double | uz, | ||
int | with_z, | ||
double * | px, | ||
double * | py, | ||
double * | pz, | ||
double * | dist, | ||
double * | spdist, | ||
double * | lpdist | ||
) |
calculate line distance.
Sets (if not null):
points | line | |
ux,uy,uz | point coordinates | |
with_z | flag if to use z coordinate (3D calculation) | |
[out] | px,py,pz | point on line |
[out] | dist | distance to line, |
[out] | spdist | distance of point from segment beginning |
[out] | lpdist | distance of point from line |
Definition at line 631 of file line.c.
References dig_distance2_point_to_line(), and NULL.
Referenced by Vect_find_line_list(), Vect_line_check_intersection(), Vect_net_nearest_nodes(), Vect_net_shortest_path_coor2(), Vedit_add_vertex(), and Vedit_split_lines().
double Vect_line_geodesic_length | ( | struct line_pnts * | Points | ) |
Calculate line length.
If projection is LL, the length is measured along the geodesic.
Points | line |
Definition at line 583 of file line.c.
References G_begin_distance_calculations(), and G_geodesic_distance().
Referenced by Vect_net_build_graph().
Insert new point at index position and move all old points at that position and above up.
Points | line |
index | (from 0 to Points->n_points-1) |
x,y,z | point coordinates |
Definition at line 194 of file line.c.
References dig_alloc_points(), G_fatal_error(), n, and y.
Referenced by Vedit_add_vertex().
double Vect_line_length | ( | struct line_pnts * | Points | ) |
Calculate line length, 3D-length in case of 3D vector line.
For Lat-Long use Vect_line_geodesic_length() instead.
Points | line |
Definition at line 555 of file line.c.
Referenced by wxdigit.IVDigit::GetLineLength(), Vect_area_perimeter(), Vect_line_segment(), Vect_net_build_graph(), Vect_net_nearest_nodes(), Vect_net_shortest_path_coor2(), Vect_point_on_line(), Vect_remove_small_areas(), Vedit_bulk_labeling(), and Vedit_split_lines().
int Vect_line_prune | ( | struct line_pnts * | Points | ) |
Remove duplicate points, i.e. zero length segments.
Points | line |
Definition at line 255 of file line.c.
Referenced by Vect_area_buffer2(), Vect_break_lines_list(), Vect_break_polygons(), Vect_clean_small_angles_at_nodes(), Vect_line_buffer(), Vect_line_buffer2(), Vect_line_segment(), Vect_snap_line(), Vect_snap_lines_list(), and Vedit_add_vertex().
int Vect_line_prune_thresh | ( | struct line_pnts * | Points, |
double | threshold | ||
) |
Remove points in threshold.
Points | line |
threshold | threshold value |
Definition at line 285 of file line.c.
References dig_prune().
void Vect_line_reverse | ( | struct line_pnts * | Points | ) |
int Vect_line_segment | ( | struct line_pnts * | InPoints, |
double | start, | ||
double | end, | ||
struct line_pnts * | OutPoints | ||
) |
Create line segment.
Creates segment of InPoints from start to end measured along the line and write it to OutPoints.
If the distance is greater than line length or negative, error is returned.
InPoints | input line |
start | segment number |
end | segment number |
OutPoints | output line |
Definition at line 497 of file line.c.
References G_debug(), G_warning(), NULL, Vect_append_point(), Vect_line_length(), Vect_line_prune(), Vect_point_on_line(), and Vect_reset_line().
struct line_pnts* Vect_new_line_struct | ( | ) |
Creates and initializes a struct line_pnts.
This structure is used for reading and writing vector lines and polygons. The library routines handle all memory allocation. If 3 lines in memory are needed at the same time, then simply 3 line_pnts structures have to be used.
To free allocated memory call Vect_destroy_line_struct().
void |
Definition at line 57 of file line.c.
References G_fatal_error(), NULL, and Vect__new_line_struct().
Referenced by G_site_get(), G_site_put(), wxdisplay.DisplayDriver::GetDuplicates(), Gp_load_sites(), Gv_load_vect(), IL_vector_input_data_2d(), wxdigit.IVDigit::InitCats(), NetA_add_point_on_node(), NetA_get_node_costs(), wxdigit.IVDigit::OpenBackgroundMap(), wxdisplay.DisplayDriver::SelectLinesByBox(), V1_rewrite_line_nat(), V2_restore_line_nat(), Vect_area_buffer2(), Vect_break_lines_list(), Vect_break_polygons(), Vect_build_line_area(), Vect_build_nat(), Vect_clean_small_angles_at_nodes(), Vect_copy_map_lines(), Vect_find_island(), Vect_find_line_list(), Vect_get_area_area(), Vect_get_area_points(), Vect_get_isle_points(), Vect_get_point_in_area(), Vect_get_point_in_poly_isl(), Vect_isle_find_area(), Vect_line_buffer(), Vect_line_buffer2(), Vect_line_check_intersection(), Vect_line_intersection(), Vect_merge_lines(), Vect_net_build_graph(), Vect_net_nearest_nodes(), Vect_net_shortest_path_coor2(), Vect_overlay_and(), Vect_point_buffer2(), Vect_point_in_area_outer_ring(), Vect_point_in_island(), Vect_remove_duplicates(), Vect_remove_small_areas(), Vect_select_lines_by_polygon(), Vect_snap_line(), Vect_snap_lines_list(), Vect_tin_get_z(), Vedit_add_vertex(), Vedit_bulk_labeling(), Vedit_chtype_lines(), Vedit_copy_lines(), Vedit_flip_lines(), Vedit_merge_lines(), Vedit_modify_cats(), Vedit_move_lines(), Vedit_move_vertex(), Vedit_remove_vertex(), Vedit_select_by_query(), Vedit_snap_lines(), Vedit_snap_point(), and Vedit_split_lines().
int Vect_point_on_line | ( | struct line_pnts * | Points, |
double | distance, | ||
double * | x, | ||
double * | y, | ||
double * | z, | ||
double * | angle, | ||
double * | slope | ||
) |
Find point on line in the specified distance.
From the begining, measured along line.
If the distance is greater than line length or negative, error is returned.
Points | line |
distance | distance value |
x,y,z | pointers to point coordinates or NULL |
angle | pointer to angle of line in that point (radians, counter clockwise from x axis) or NULL |
slope | pointer to slope angle in radians (positive up) |
Definition at line 393 of file line.c.
References G_debug(), NULL, and Vect_line_length().
Referenced by Vect_line_segment().
double Vect_points_distance | ( | double | x1, |
double | y1, | ||
double | z1, | ||
double | x2, | ||
double | y2, | ||
double | z2, | ||
int | with_z | ||
) |
Calculate distance of 2 points.
Simply uses Pythagoras.
x1,y1,z1 | first point |
x2,y2,z2 | second point |
with_z | use z coordinate |
Definition at line 745 of file line.c.
Referenced by wxdisplay.DisplayDriver::GetSelectedVertex(), wxdigit.IVDigit::InitCats(), Vect_clean_small_angles_at_nodes(), Vect_find_node(), Vedit_add_vertex(), Vedit_get_min_distance(), Vedit_move_vertex(), Vedit_remove_vertex(), Vedit_snap_line(), and Vedit_snap_point().
int Vect_reset_line | ( | struct line_pnts * | Points | ) |
Reset line.
Make sure line structure is clean to be re-used, i.e. it has no points associated with it Points must have previously been created with Vect_new_line_struct().
Points | line to be reset |
Definition at line 148 of file line.c.
Referenced by wxdigit.IVDigit::EditLine(), G_site_put(), IL_check_at_points_2d(), wxdigit.IVDigit::InitCats(), wxdigit.IVDigit::MoveSelectedVertex(), NetA_add_point_on_node(), wxdigit.IVDigit::SelectLinesByQuery(), wxdigit.IVDigit::SplitLine(), V1_read_next_line_ogr(), V2_read_line_ogr(), Vect_break_lines_list(), Vect_break_polygons(), Vect_build_line_area(), Vect_clean_small_angles_at_nodes(), Vect_line_buffer(), Vect_line_segment(), Vect_merge_lines(), Vect_net_nearest_nodes(), Vect_net_shortest_path_coor2(), Vect_snap_line(), Vect_snap_lines_list(), Vedit_merge_lines(), and Vedit_split_lines().