GRASS GIS 7 Programmer's Manual  7.5.svn(2018)-r72636
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Vlib/poly.c File Reference

Vector library - polygon related fns. More...

#include <math.h>
#include <stdlib.h>
#include <grass/vector.h>
#include <grass/linkm.h>
#include <grass/glocale.h>
Include dependency graph for Vlib/poly.c:

Go to the source code of this file.

Functions

int Vect__intersect_y_line_with_poly ()
 
int Vect__intersect_x_line_with_poly ()
 
int Vect_get_point_in_area (const struct Map_info *Map, int area, double *X, double *Y)
 Get point inside area and outside all islands. More...
 
int Vect__intersect_y_line_with_poly (const struct line_pnts *Points, double y, struct line_pnts *Inter)
 
int Vect__intersect_x_line_with_poly (const struct line_pnts *Points, double x, struct line_pnts *Inter)
 
int Vect_get_point_in_poly (const struct line_pnts *Points, double *X, double *Y)
 Get point inside polygon. More...
 
int Vect_find_poly_centroid (const struct line_pnts *points, double *cent_x, double *cent_y)
 Get centroid of polygon. More...
 
int Vect_get_point_in_poly_isl (const struct line_pnts *Points, const struct line_pnts **IPoints, int n_isles, double *att_x, double *att_y)
 Get point inside polygon but outside the islands specifiled in IPoints. More...
 
int Vect_point_in_poly (double X, double Y, const struct line_pnts *Points)
 Determines if a point (X,Y) is inside a polygon. More...
 
int Vect_point_in_area_outer_ring (double X, double Y, const struct Map_info *Map, int area, struct bound_box *box)
 Determines if a point (X,Y) is inside an area outer ring. Islands are not considered. More...
 
int Vect_point_in_island (double X, double Y, const struct Map_info *Map, int isle, struct bound_box *box)
 Determines if a point (X,Y) is inside an island. More...
 

Detailed Description

Vector library - polygon related fns.

Higher level functions for reading/writing/manipulating vectors.

(C) 2001-2009 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.

Author
Original author CERL, probably Dave Gerdes or Mike Higgins.
Update to GRASS 5.7 Radim Blazek and David D. Gray.

Definition in file Vlib/poly.c.

Function Documentation

int Vect__intersect_x_line_with_poly ( )
int Vect__intersect_x_line_with_poly ( const struct line_pnts Points,
double  x,
struct line_pnts Inter 
)

Definition at line 172 of file Vlib/poly.c.

References b, line_pnts::n_points, Vect_append_point(), line_pnts::x, and line_pnts::y.

int Vect__intersect_y_line_with_poly ( )
int Vect__intersect_y_line_with_poly ( const struct line_pnts Points,
double  y,
struct line_pnts Inter 
)

Definition at line 128 of file Vlib/poly.c.

References b, line_pnts::n_points, Vect_append_point(), x, line_pnts::x, and line_pnts::y.

int Vect_find_poly_centroid ( const struct line_pnts points,
double *  cent_x,
double *  cent_y 
)

Get centroid of polygon.

Parameters
pointspolygon
[out]cent_x,cent_ycentroid coordinates
Returns
0 on success
-1 on error

Definition at line 363 of file Vlib/poly.c.

References line_pnts::n_points, line_pnts::x, and line_pnts::y.

Referenced by Vect_get_point_in_poly(), and Vect_get_point_in_poly_isl().

int Vect_get_point_in_area ( const struct Map_info Map,
int  area,
double *  X,
double *  Y 
)

Get point inside area and outside all islands.

Take a line and intersect it with the polygon and any islands. sort the list of X values from these intersections. This will be a list of segments alternating IN/OUT/IN/OUT of the polygon. Pick the largest IN segment and take the midpoint.

Parameters
Mapvector map
areaarea id
[out]X,Ypoint coordinateds
Returns
0 on success
-1 on error

Definition at line 56 of file Vlib/poly.c.

References line_pnts::alloc_points, G_debug(), NULL, Vect_get_area_isle(), Vect_get_area_num_isles(), Vect_get_area_points(), Vect_get_isle_points(), Vect_get_point_in_poly_isl(), and Vect_new_line_struct().

int Vect_get_point_in_poly ( const struct line_pnts Points,
double *  X,
double *  Y 
)

Get point inside polygon.

This does NOT consider ISLANDS!

Parameters
Pointspolygon
[out]X,Ypoint coordinates
Returns
0 on success
-1 on error

Definition at line 211 of file Vlib/poly.c.

References _, G_debug(), G_warning(), link_exit_on_error(), link_init(), link_new(), line_pnts::n_points, NULL, Vect_find_poly_centroid(), Vect_point_in_poly(), and line_pnts::x.

Referenced by V2_write_line_sfa().

int Vect_get_point_in_poly_isl ( const struct line_pnts Points,
const struct line_pnts **  IPoints,
int  n_isles,
double *  att_x,
double *  att_y 
)

Get point inside polygon but outside the islands specifiled in IPoints.

Take a line and intersect it with the polygon and any islands. sort the list of X values from these intersections. This will be a list of segments alternating IN/OUT/IN/OUT of the polygon. Pick the largest IN segment and take the midpoint.

Parameters
Pointspolygon (boundary)
IPointsisles (list of isle boundaries)
n_islesnumber of isles
[out]att_x,att_ypoint coordinates
Returns
0 on success
-1 on error

Definition at line 457 of file Vlib/poly.c.

References G_debug(), G_warning(), max, line_pnts::n_points, Vect__intersect_x_line_with_poly(), Vect__intersect_y_line_with_poly(), Vect_find_poly_centroid(), Vect_new_line_struct(), Vect_point_in_poly(), line_pnts::x, and line_pnts::y.

Referenced by Vect_get_point_in_area().

int Vect_point_in_area_outer_ring ( double  X,
double  Y,
const struct Map_info Map,
int  area,
struct bound_box box 
)

Determines if a point (X,Y) is inside an area outer ring. Islands are not considered.

Parameters
X,Ypoint coordinates
Mapvector map
areaarea id
boxarea bounding box
Returns
0 - outside
1 - inside
2 - on the boundary

Definition at line 856 of file Vlib/poly.c.

References Plus_head::Area, bound_box::E, G_debug(), P_area::lines, bound_box::N, P_area::n_lines, NULL, Map_info::plus, Vect_new_line_struct(), Vect_read_line(), and W.

Referenced by Vect_find_area(), Vect_isle_find_area(), and Vect_point_in_area().

int Vect_point_in_island ( double  X,
double  Y,
const struct Map_info Map,
int  isle,
struct bound_box box 
)

Determines if a point (X,Y) is inside an island.

Parameters
X,Ypoint coordinates
Mapvector map
isleisle id
boxisle bounding box
Returns
0 - outside
1 - inside
2 - on the boundary

Definition at line 925 of file Vlib/poly.c.

References bound_box::E, G_debug(), Plus_head::Isle, P_isle::lines, bound_box::N, P_isle::n_lines, NULL, Map_info::plus, Vect_new_line_struct(), Vect_read_line(), and W.

Referenced by Vect_find_area(), Vect_find_island(), and Vect_point_in_area().

int Vect_point_in_poly ( double  X,
double  Y,
const struct line_pnts Points 
)

Determines if a point (X,Y) is inside a polygon.

Parameters
X,Ypoint coordinates
Pointspolygon
Returns
0 - outside
1 - inside
2 - on the boundary

Definition at line 826 of file Vlib/poly.c.

References G_debug(), and line_pnts::n_points.

Referenced by Vect_get_point_in_poly(), Vect_get_point_in_poly_isl(), and Vect_select_lines_by_polygon().