vector.h 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630
  1. #ifndef GRASS_VECTORDEFS_H
  2. #define GRASS_VECTORDEFS_H
  3. /*
  4. * "Public" functions, for use in modules
  5. */
  6. /* Points (line) */
  7. struct line_pnts *Vect_new_line_struct(void);
  8. int Vect_append_point(struct line_pnts *, double, double, double);
  9. int Vect_append_points(struct line_pnts *, const struct line_pnts *, int);
  10. int Vect_line_insert_point(struct line_pnts *, int, double, double, double);
  11. int Vect_line_delete_point(struct line_pnts *, int);
  12. int Vect_line_get_point(const struct line_pnts *, int ,
  13. double *, double *, double *);
  14. int Vect_get_num_line_points(const struct line_pnts *);
  15. int Vect_line_prune(struct line_pnts *);
  16. int Vect_line_prune_thresh(struct line_pnts *, double);
  17. void Vect_line_reverse(struct line_pnts *);
  18. int Vect_copy_xyz_to_pnts(struct line_pnts *, const double *, const double *, const double *,
  19. int);
  20. int Vect_copy_pnts_to_xyz(const struct line_pnts *, double *, double *, double *,
  21. int *);
  22. void Vect_reset_line(struct line_pnts *);
  23. void Vect_destroy_line_struct(struct line_pnts *);
  24. int Vect_point_on_line(const struct line_pnts *, double, double *, double *,
  25. double *, double *, double *);
  26. int Vect_line_segment(const struct line_pnts *, double, double, struct line_pnts *);
  27. double Vect_line_length(const struct line_pnts *);
  28. double Vect_line_geodesic_length(const struct line_pnts *);
  29. int Vect_line_distance(const struct line_pnts *, double, double, double, int,
  30. double *, double *, double *, double *, double *,
  31. double *);
  32. int Vect_line_geodesic_distance(const struct line_pnts *, double, double, double, int,
  33. double *, double *, double *, double *, double *,
  34. double *);
  35. void Vect_line_box(const struct line_pnts *, struct bound_box *);
  36. void Vect_line_parallel(struct line_pnts *, double, double, int,
  37. struct line_pnts *);
  38. void Vect_line_parallel2(struct line_pnts *, double, double,
  39. double, int, int, double,
  40. struct line_pnts *);
  41. void Vect_line_buffer(const struct line_pnts *, double, double, struct line_pnts *);
  42. void Vect_line_buffer2(const struct line_pnts *, double, double,
  43. double, int, int, double,
  44. struct line_pnts **,
  45. struct line_pnts ***, int *);
  46. void Vect_area_buffer2(const struct Map_info *, int, double, double,
  47. double, int, int, double,
  48. struct line_pnts **,
  49. struct line_pnts ***, int *);
  50. void Vect_point_buffer2(double, double, double, double,
  51. double, int, double,
  52. struct line_pnts **);
  53. /* Categories */
  54. struct line_cats *Vect_new_cats_struct(void);
  55. int Vect_cat_set(struct line_cats *, int, int);
  56. int Vect_cat_get(const struct line_cats *, int, int *);
  57. int Vect_cat_del(struct line_cats *, int);
  58. int Vect_field_cat_del(struct line_cats *, int, int);
  59. int Vect_field_cat_get(const struct line_cats *, int, struct ilist *);
  60. int Vect_cat_in_array(int, const int *, int);
  61. int Vect_reset_cats(struct line_cats *);
  62. void Vect_destroy_cats_struct(struct line_cats *);
  63. int Vect_get_area_cats(const struct Map_info *, int, struct line_cats *);
  64. int Vect_get_area_cat(const struct Map_info *, int, int);
  65. int Vect_get_line_cat(const struct Map_info *, int, int);
  66. struct cat_list *Vect_cats_set_constraint(struct Map_info *, int, char *, char *);
  67. int Vect_cats_in_constraint(struct line_cats *, int, struct cat_list *);
  68. /* List of categories */
  69. struct cat_list *Vect_new_cat_list(void);
  70. int Vect_str_to_cat_list(const char *, struct cat_list *);
  71. int Vect_array_to_cat_list(const int *, int, struct cat_list *);
  72. int Vect_cat_list_to_array(const struct cat_list *, int **, int *);
  73. int Vect_cat_in_cat_list(int, const struct cat_list *);
  74. void Vect_destroy_cat_list(struct cat_list *);
  75. /* Vector array */
  76. struct varray *Vect_new_varray(int);
  77. int Vect_set_varray_from_cat_string(const struct Map_info *, int, const char *, int,
  78. int, struct varray *);
  79. int Vect_set_varray_from_cat_list(const struct Map_info *, int, struct cat_list *,
  80. int, int, struct varray *);
  81. int Vect_set_varray_from_db(const struct Map_info *, int, const char *, int, int,
  82. struct varray *);
  83. /* DB connection - field info */
  84. struct dblinks *Vect_new_dblinks_struct(void);
  85. void Vect_reset_dblinks(struct dblinks *);
  86. int Vect_add_dblink(struct dblinks *, int, const char *,
  87. const char *, const char *, const char *, const char *);
  88. int Vect_check_dblink(const struct dblinks *, int, const char *);
  89. int Vect_map_add_dblink(struct Map_info *, int, const char *,
  90. const char *, const char *, const char *,
  91. const char *);
  92. int Vect_map_del_dblink(struct Map_info *, int);
  93. void Vect_copy_map_dblinks(const struct Map_info *, struct Map_info *, int);
  94. int Vect_map_check_dblink(const struct Map_info *, int, const char *);
  95. int Vect_read_dblinks(struct Map_info *);
  96. int Vect_write_dblinks(struct Map_info *);
  97. struct field_info *Vect_default_field_info(struct Map_info *, int,
  98. const char *, int);
  99. struct field_info *Vect_get_dblink(const struct Map_info *, int);
  100. struct field_info *Vect_get_field(const struct Map_info *, int);
  101. struct field_info *Vect_get_field_by_name(const struct Map_info *, const char *);
  102. struct field_info *Vect_get_field2(const struct Map_info *, const char *);
  103. int Vect_get_field_number(const struct Map_info *, const char *);
  104. void Vect_set_db_updated(struct Map_info *);
  105. const char *Vect_get_column_names(const struct Map_info *, int);
  106. const char *Vect_get_column_types(const struct Map_info *, int);
  107. const char *Vect_get_column_names_types(const struct Map_info *, int);
  108. /* List of FID (feature ID) (integers) */
  109. struct ilist *Vect_new_list(void);
  110. int Vect_list_append(struct ilist *, int);
  111. int Vect_list_append_list(struct ilist *, const struct ilist *);
  112. int Vect_list_delete(struct ilist *, int);
  113. int Vect_list_delete_list(struct ilist *, const struct ilist *);
  114. int Vect_val_in_list(const struct ilist *, int);
  115. int Vect_reset_list(struct ilist *);
  116. void Vect_destroy_list(struct ilist *);
  117. /* List of bounding boxes with ids */
  118. struct boxlist *Vect_new_boxlist(int);
  119. int Vect_boxlist_append(struct boxlist *, int, const struct bound_box *);
  120. int Vect_boxlist_append_boxlist(struct boxlist *, const struct boxlist *);
  121. int Vect_boxlist_delete(struct boxlist *, int);
  122. int Vect_boxlist_delete_boxlist(struct boxlist *, const struct boxlist *);
  123. int Vect_val_in_boxlist(const struct boxlist *, int);
  124. int Vect_reset_boxlist(struct boxlist *);
  125. void Vect_destroy_boxlist(struct boxlist *);
  126. /* Bounding box (MBR) */
  127. int Vect_point_in_box(double, double, double, const struct bound_box *);
  128. int Vect_point_in_box_2d(double, double, const struct bound_box *);
  129. int Vect_box_overlap(const struct bound_box *, const struct bound_box *);
  130. int Vect_box_copy(struct bound_box *, const struct bound_box *);
  131. int Vect_box_extend(struct bound_box *, const struct bound_box *);
  132. int Vect_box_clip(double *, double *, double *, double *, const struct bound_box *);
  133. int Vect_region_box(const struct Cell_head *, struct bound_box *);
  134. /* Category index */
  135. int Vect_cidx_get_num_fields(const struct Map_info *);
  136. int Vect_cidx_get_field_number(const struct Map_info *, int);
  137. int Vect_cidx_get_field_index(const struct Map_info *, int);
  138. int Vect_cidx_get_num_unique_cats_by_index(const struct Map_info *, int);
  139. int Vect_cidx_get_num_cats_by_index(const struct Map_info *, int);
  140. int Vect_cidx_get_num_types_by_index(const struct Map_info *, int);
  141. int Vect_cidx_get_type_count_by_index(const struct Map_info *, int, int, int *,
  142. int *);
  143. int Vect_cidx_get_type_count(const struct Map_info *, int, int);
  144. int Vect_cidx_get_cat_by_index(const struct Map_info *, int, int, int *, int *,
  145. int *);
  146. int Vect_cidx_get_unique_cats_by_index(struct Map_info *, int, struct ilist *);
  147. int Vect_cidx_find_next(const struct Map_info *, int, int, int, int, int *, int *);
  148. void Vect_cidx_find_all(const struct Map_info *, int, int, int, struct ilist *);
  149. int Vect_cidx_dump(const struct Map_info *, FILE *);
  150. int Vect_cidx_save(struct Map_info *);
  151. int Vect_cidx_open(struct Map_info *, int);
  152. /* Create/destroy Map_info */
  153. struct Map_info *Vect_new_map_struct(void);
  154. void Vect_destroy_map_struct(struct Map_info *);
  155. /* Set/get map header info */
  156. int Vect_read_header(struct Map_info *);
  157. int Vect_write_header(const struct Map_info *);
  158. const char *Vect_get_name(const struct Map_info *);
  159. const char *Vect_get_mapset(const struct Map_info *);
  160. const char *Vect_get_full_name(const struct Map_info *);
  161. const char *Vect_get_finfo_dsn_name(const struct Map_info *);
  162. char *Vect_get_finfo_layer_name(const struct Map_info *);
  163. const char *Vect_get_finfo_format_info(const struct Map_info *);
  164. const char *Vect_get_finfo_geometry_type(const struct Map_info *);
  165. const struct Format_info *Vect_get_finfo(const struct Map_info *);
  166. int Vect_get_finfo_topology_info(const struct Map_info *, char **, char **, int*);
  167. int Vect_is_3d(const struct Map_info *);
  168. int Vect_set_organization(struct Map_info *, const char *);
  169. const char *Vect_get_organization(const struct Map_info *);
  170. int Vect_set_date(struct Map_info *, const char *);
  171. const char *Vect_get_date(const struct Map_info *);
  172. int Vect_set_person(struct Map_info *, const char *);
  173. const char *Vect_get_person(const struct Map_info *);
  174. int Vect_set_map_name(struct Map_info *, const char *);
  175. const char *Vect_get_map_name(const struct Map_info *);
  176. int Vect_set_map_date(struct Map_info *, const char *);
  177. const char *Vect_get_map_date(const struct Map_info *);
  178. int Vect_set_comment(struct Map_info *, const char *);
  179. const char *Vect_get_comment(const struct Map_info *);
  180. int Vect_set_scale(struct Map_info *, int);
  181. int Vect_get_scale(const struct Map_info *);
  182. int Vect_set_zone(struct Map_info *, int);
  183. int Vect_get_zone(const struct Map_info *);
  184. int Vect_get_proj(const struct Map_info *);
  185. int Vect_set_proj(struct Map_info *, int);
  186. const char *Vect_get_proj_name(const struct Map_info *);
  187. int Vect_set_thresh(struct Map_info *, double);
  188. double Vect_get_thresh(const struct Map_info *);
  189. int Vect_get_constraint_box(const struct Map_info *, struct bound_box *);
  190. /* Get map information */
  191. int Vect_level(const struct Map_info *);
  192. /* Get map level 1 information */
  193. int Vect_get_map_box1(struct Map_info *, struct bound_box *);
  194. /* Get map level 2 information */
  195. int Vect_get_line_type(const struct Map_info *, int);
  196. plus_t Vect_get_num_nodes(const struct Map_info *);
  197. plus_t Vect_get_num_primitives(const struct Map_info *, int);
  198. plus_t Vect_get_num_lines(const struct Map_info *);
  199. plus_t Vect_get_num_areas(const struct Map_info *);
  200. plus_t Vect_get_num_faces(const struct Map_info *);
  201. plus_t Vect_get_num_kernels(const struct Map_info *);
  202. plus_t Vect_get_num_volumes(const struct Map_info *);
  203. plus_t Vect_get_num_islands(const struct Map_info *);
  204. plus_t Vect_get_num_holes(const struct Map_info *);
  205. int Vect_get_line_box(const struct Map_info *, int, struct bound_box *);
  206. int Vect_get_area_box(const struct Map_info *, int, struct bound_box *);
  207. int Vect_get_isle_box(const struct Map_info *, int, struct bound_box *);
  208. int Vect_get_map_box(const struct Map_info *, struct bound_box *);
  209. int V__map_overlap(struct Map_info *, double, double, double, double);
  210. void Vect_set_release_support(struct Map_info *);
  211. void Vect_set_category_index_update(struct Map_info *);
  212. /* Open/close/rewind/set_constraints for map */
  213. int Vect_check_input_output_name(const char *, const char *, int);
  214. int Vect_legal_filename(const char *);
  215. int Vect_set_open_level(int);
  216. int Vect_open_old(struct Map_info *, const char *, const char *);
  217. int Vect_open_tmp_old(struct Map_info *, const char *, const char *);
  218. int Vect_open_old2(struct Map_info *, const char *, const char *, const char *);
  219. int Vect_open_old_head(struct Map_info *, const char *, const char *);
  220. int Vect_open_old_head2(struct Map_info *, const char *, const char *, const char *);
  221. int Vect_open_new(struct Map_info *, const char *, int);
  222. int Vect_open_tmp_new(struct Map_info *, const char *, int);
  223. int Vect_open_update(struct Map_info *, const char *, const char *);
  224. int Vect_open_tmp_update(struct Map_info *, const char *, const char *);
  225. int Vect_open_update2(struct Map_info *, const char *, const char *, const char *);
  226. int Vect_open_update_head(struct Map_info *, const char *, const char *);
  227. int Vect_copy_head_data(const struct Map_info *, struct Map_info *);
  228. int Vect_build(struct Map_info *);
  229. int Vect_topo_check(struct Map_info *, struct Map_info *);
  230. int Vect_get_built(const struct Map_info *);
  231. int Vect_build_partial(struct Map_info *, int);
  232. int Vect_set_constraint_region(struct Map_info *, double, double, double,
  233. double, double, double);
  234. int Vect_set_constraint_type(struct Map_info *, int);
  235. int Vect_set_constraint_field(struct Map_info *, int);
  236. void Vect_remove_constraints(struct Map_info *);
  237. int Vect_rewind(struct Map_info *);
  238. int Vect_close(struct Map_info *);
  239. void Vect_set_error_handler_io(struct Map_info *, struct Map_info *);
  240. /* Read/write lines, nodes, areas */
  241. /* Level 1 and 2 */
  242. int Vect_get_next_line_id(const struct Map_info *);
  243. int Vect_read_next_line(const struct Map_info *, struct line_pnts *,
  244. struct line_cats *);
  245. off_t Vect_write_line(struct Map_info *, int, const struct line_pnts *,
  246. const struct line_cats *);
  247. off_t Vect_rewrite_line(struct Map_info *, off_t, int, const struct line_pnts *,
  248. const struct line_cats *);
  249. int Vect_delete_line(struct Map_info *, off_t);
  250. int Vect_restore_line(struct Map_info *, off_t, off_t);
  251. int Vect_get_num_dblinks(const struct Map_info *);
  252. /* Level 2 only */
  253. int Vect_read_line(const struct Map_info *, struct line_pnts *, struct line_cats *,
  254. int);
  255. int Vect_line_alive(const struct Map_info *, int);
  256. int Vect_node_alive(const struct Map_info *, int);
  257. int Vect_area_alive(const struct Map_info *, int);
  258. int Vect_isle_alive(const struct Map_info *, int);
  259. int Vect_get_line_nodes(const struct Map_info *, int, int *, int *);
  260. int Vect_get_line_areas(const struct Map_info *, int, int *, int *);
  261. off_t Vect_get_line_offset(const struct Map_info *, int);
  262. int Vect_get_node_coor(const struct Map_info *, int, double *, double *, double *);
  263. int Vect_get_node_n_lines(const struct Map_info *, int);
  264. int Vect_get_node_line(const struct Map_info *, int, int);
  265. float Vect_get_node_line_angle(const struct Map_info *, int, int);
  266. int Vect_get_area_points(const struct Map_info *, int, struct line_pnts *);
  267. int Vect_get_area_centroid(const struct Map_info *, int);
  268. int Vect_get_area_num_isles(const struct Map_info *, int);
  269. int Vect_get_area_isle(const struct Map_info *, int, int);
  270. double Vect_get_area_perimeter(const struct Map_info *, int);
  271. double Vect_get_area_area(const struct Map_info *, int);
  272. int Vect_get_area_boundaries(const struct Map_info *, int, struct ilist *);
  273. int Vect_get_isle_points(const struct Map_info *, int, struct line_pnts *);
  274. int Vect_get_isle_area(const struct Map_info *, int);
  275. int Vect_get_isle_boundaries(const struct Map_info *, int, struct ilist *);
  276. int Vect_get_centroid_area(const struct Map_info *, int);
  277. /* Level 2 update only */
  278. int Vect_get_num_updated_lines(const struct Map_info *);
  279. int Vect_get_updated_line(const struct Map_info *, int);
  280. off_t Vect_get_updated_line_offset(const struct Map_info *, int);
  281. int Vect_get_num_updated_nodes(const struct Map_info *);
  282. int Vect_get_updated_node(const struct Map_info *, int);
  283. void Vect_set_updated(struct Map_info *, int);
  284. void Vect_reset_updated(struct Map_info *);
  285. /* History */
  286. int Vect_hist_command(struct Map_info *);
  287. int Vect_hist_write(struct Map_info *, const char *);
  288. int Vect_hist_copy(const struct Map_info *, struct Map_info *);
  289. void Vect_hist_rewind(struct Map_info *);
  290. char *Vect_hist_read(char *, int, const struct Map_info *);
  291. /* Selecting features */
  292. int Vect_select_lines_by_box(struct Map_info *, const struct bound_box *,
  293. int, struct boxlist *);
  294. int Vect_select_areas_by_box(struct Map_info *, const struct bound_box *,
  295. struct boxlist *);
  296. int Vect_select_isles_by_box(struct Map_info *, const struct bound_box *,
  297. struct boxlist *);
  298. int Vect_select_nodes_by_box(struct Map_info *, const struct bound_box *,
  299. struct ilist *);
  300. int Vect_find_node(struct Map_info *, double, double, double, double, int);
  301. int Vect_find_line(struct Map_info *, double, double, double, int, double,
  302. int, int);
  303. int Vect_find_line_list(struct Map_info *, double, double, double, int,
  304. double, int, const struct ilist *, struct ilist *);
  305. int Vect_find_area(struct Map_info *, double, double);
  306. int Vect_find_island(struct Map_info *, double, double);
  307. int Vect_select_lines_by_polygon(struct Map_info *, struct line_pnts *, int,
  308. struct line_pnts **, int, struct ilist *);
  309. int Vect_select_areas_by_polygon(struct Map_info *, struct line_pnts *, int,
  310. struct line_pnts **, struct ilist *);
  311. /* Analysis */
  312. int Vect_tin_get_z(struct Map_info *, double, double, double *, double *,
  313. double *);
  314. /* int Vect_point_in_islands (struct Map_info *, int, double, double); */
  315. int Vect_find_poly_centroid(const struct line_pnts *, double *, double *);
  316. int Vect__intersect_line_with_poly(const struct line_pnts *, double,
  317. struct line_pnts *);
  318. int Vect_get_point_in_area(const struct Map_info *, int, double *, double *);
  319. int Vect_get_point_in_poly(const struct line_pnts *, double *, double *);
  320. int Vect_get_point_in_poly_isl(const struct line_pnts *, const struct line_pnts **, int,
  321. double *, double *);
  322. int Vect_point_in_area(double, double, const struct Map_info *, int, struct bound_box *);
  323. int Vect_point_in_area_outer_ring(double, double, const struct Map_info *, int, struct bound_box *);
  324. int Vect_point_in_island(double, double, const struct Map_info *, int, struct bound_box *);
  325. int Vect_point_in_poly(double, double, const struct line_pnts *);
  326. /* Cleaning */
  327. void Vect_break_lines(struct Map_info *, int, struct Map_info *);
  328. int Vect_break_lines_list(struct Map_info *, struct ilist *, struct ilist *,
  329. int, struct Map_info *);
  330. int Vect_check_line_breaks(struct Map_info *, int, struct Map_info *);
  331. int Vect_check_line_breaks_list(struct Map_info *, struct ilist *, struct ilist *,
  332. int, struct Map_info *);
  333. int Vect_merge_lines(struct Map_info *, int, int *, struct Map_info *);
  334. void Vect_break_polygons(struct Map_info *, int, struct Map_info *);
  335. void Vect_remove_duplicates(struct Map_info *, int, struct Map_info *);
  336. int Vect_line_check_duplicate(const struct line_pnts *,
  337. const struct line_pnts *, int);
  338. void Vect_snap_lines(struct Map_info *, int, double, struct Map_info *);
  339. void Vect_snap_lines_list(struct Map_info *, const struct ilist *, double,
  340. struct Map_info *);
  341. int Vect_snap_line(struct Map_info *, struct ilist *, struct line_pnts *,
  342. double, int, int *, int *);
  343. void Vect_remove_dangles(struct Map_info *, int, double, struct Map_info *);
  344. void Vect_chtype_dangles(struct Map_info *, double, struct Map_info *);
  345. void Vect_select_dangles(struct Map_info *, int, double, struct ilist *);
  346. void Vect_remove_bridges(struct Map_info *, struct Map_info *, int *, int *);
  347. void Vect_chtype_bridges(struct Map_info *, struct Map_info *, int *, int *);
  348. int Vect_remove_small_areas(struct Map_info *, double, struct Map_info *,
  349. double *);
  350. int Vect_clean_small_angles_at_nodes(struct Map_info *, int,
  351. struct Map_info *);
  352. /* Overlay */
  353. int Vect_overlay_str_to_operator(const char *);
  354. int Vect_overlay(struct Map_info *, int, struct ilist *, struct ilist *,
  355. struct Map_info *, int, struct ilist *, struct ilist *,
  356. int, struct Map_info *);
  357. int Vect_overlay_and(struct Map_info *, int, struct ilist *,
  358. struct ilist *, struct Map_info *, int,
  359. struct ilist *, struct ilist *, struct Map_info *);
  360. /* Graph */
  361. void Vect_graph_init(dglGraph_s *, int);
  362. void Vect_graph_build(dglGraph_s *);
  363. void Vect_graph_add_edge(dglGraph_s *, int, int, double, int);
  364. void Vect_graph_set_node_costs(dglGraph_s *, int, double);
  365. int Vect_graph_shortest_path(dglGraph_s *, int, int, struct ilist *, double *);
  366. /* Network (graph) */
  367. int Vect_net_build_graph(struct Map_info *, int, int, int, const char *,
  368. const char *, const char *, int, int);
  369. int Vect_net_ttb_build_graph(struct Map_info *, int, int, int, int, int ,
  370. const char *, const char *, const char *, int, int);
  371. int Vect_net_shortest_path(struct Map_info *, int, int, struct ilist *,
  372. double *);
  373. int Vect_net_ttb_shortest_path(struct Map_info *, int, int, int, int, int,
  374. struct ilist *, double *);
  375. dglGraph_s *Vect_net_get_graph(struct Map_info *);
  376. int Vect_net_get_line_cost(const struct Map_info *, int, int, double *);
  377. int Vect_net_get_node_cost(const struct Map_info *, int, double *);
  378. int Vect_net_nearest_nodes(struct Map_info *, double, double, double, int,
  379. double, int *, int *, int *, double *, double *,
  380. struct line_pnts *, struct line_pnts *, double *);
  381. int Vect_net_shortest_path_coor(struct Map_info *, double, double, double,
  382. double, double, double, double, double,
  383. double *, struct line_pnts *, struct ilist *, struct ilist *,
  384. struct line_pnts *, struct line_pnts *,
  385. double *, double *);
  386. int Vect_net_ttb_shortest_path_coor(struct Map_info *, double, double, double,
  387. double, double, double, double, double, int,
  388. double *, struct line_pnts *, struct ilist *, struct ilist *,
  389. struct line_pnts *, struct line_pnts *,
  390. double *, double *);
  391. /* Miscellaneous */
  392. int Vect_topo_dump(const struct Map_info *, FILE *);
  393. double Vect_points_distance(double, double, double, double, double, double,
  394. int);
  395. int Vect_option_to_types(const struct Option *);
  396. int Vect_copy_map_lines(struct Map_info *, struct Map_info *);
  397. int Vect_copy_map_lines_field(struct Map_info *, int, struct Map_info *);
  398. int Vect_copy(const char *, const char *, const char *);
  399. int Vect_rename(const char *, const char *);
  400. int Vect_copy_table(const struct Map_info *, struct Map_info *, int, int,
  401. const char *, int);
  402. int Vect_copy_table_by_cat_list(const struct Map_info *, struct Map_info *, int, int,
  403. const char *, int, const struct cat_list *);
  404. int Vect_copy_table_by_cats(const struct Map_info *, struct Map_info *, int, int,
  405. const char *, int, int *, int);
  406. int Vect_copy_tables(const struct Map_info *, struct Map_info *, int);
  407. int Vect_delete(const char *);
  408. int Vect_segment_intersection(double, double, double, double, double, double,
  409. double, double, double, double, double, double,
  410. double *, double *, double *, double *,
  411. double *, double *, int);
  412. int Vect_line_intersection(struct line_pnts *, struct line_pnts *,
  413. struct bound_box *, struct bound_box *,
  414. struct line_pnts ***, struct line_pnts ***, int *,
  415. int *, int);
  416. int Vect_line_intersection2(struct line_pnts *, struct line_pnts *,
  417. struct bound_box *, struct bound_box *,
  418. struct line_pnts ***, struct line_pnts ***, int *,
  419. int *, int);
  420. int Vect_line_check_intersection(struct line_pnts *, struct line_pnts *, int);
  421. int Vect_line_check_intersection2(struct line_pnts *, struct line_pnts *, int);
  422. int Vect_line_get_intersections(struct line_pnts *, struct line_pnts *,
  423. struct line_pnts *, int);
  424. int Vect_line_get_intersections2(struct line_pnts *, struct line_pnts *,
  425. struct line_pnts *, int);
  426. char *Vect_subst_var(const char *, const struct Map_info *);
  427. /* Custom spatial index */
  428. void Vect_spatial_index_init(struct spatial_index *, int);
  429. void Vect_spatial_index_destroy(struct spatial_index *);
  430. void Vect_spatial_index_add_item(struct spatial_index *, int, const struct bound_box *);
  431. void Vect_spatial_index_del_item(struct spatial_index *, int, const struct bound_box *);
  432. int Vect_spatial_index_select(const struct spatial_index *, const struct bound_box *, struct ilist *);
  433. /* GRASS ASCII vector format */
  434. int Vect_read_ascii(FILE *, struct Map_info *);
  435. int Vect_read_ascii_head(FILE *, struct Map_info *);
  436. int Vect_write_ascii(FILE *, FILE *, struct Map_info *, int,
  437. int, int, char *, int, int,
  438. int, const struct cat_list *, const char*,
  439. const char **, int);
  440. void Vect_write_ascii_head(FILE *, struct Map_info *);
  441. /* Simple Features */
  442. SF_FeatureType Vect_sfa_get_line_type(const struct line_pnts *, int, int);
  443. int Vect_sfa_get_type(SF_FeatureType);
  444. int Vect_sfa_check_line_type(const struct line_pnts *, int, SF_FeatureType, int);
  445. int Vect_sfa_line_dimension(int);
  446. char *Vect_sfa_line_geometry_type(const struct line_pnts *, int);
  447. int Vect_sfa_line_astext(const struct line_pnts *, int, int, int, FILE *);
  448. int Vect_sfa_is_line_simple(const struct line_pnts *, int, int);
  449. int Vect_sfa_is_line_closed(const struct line_pnts *, int, int);
  450. int Vect_sfa_get_num_features(const struct Map_info *);
  451. /*
  452. * Internal functions, MUST NOT be used in modules
  453. */
  454. int Vect_print_header(const struct Map_info *);
  455. void Vect__init_head(struct Map_info *);
  456. /* Open/close/rewind map */
  457. int Vect_coor_info(const struct Map_info *, struct Coor_info *);
  458. const char *Vect_maptype_info(const struct Map_info *);
  459. int Vect_maptype(const struct Map_info *);
  460. int Vect_open_topo(struct Map_info *, int);
  461. int Vect_save_topo(struct Map_info *);
  462. int Vect_open_sidx(struct Map_info *, int);
  463. int Vect_save_sidx(struct Map_info *);
  464. int Vect_sidx_dump(const struct Map_info *, FILE *);
  465. int Vect_build_sidx_from_topo(const struct Map_info *);
  466. int Vect_build_sidx(struct Map_info *);
  467. int Vect_open_fidx(struct Map_info *, struct Format_info_offset *);
  468. int Vect_save_fidx(struct Map_info *, struct Format_info_offset *);
  469. int Vect_fidx_dump(const struct Map_info *, FILE *);
  470. int Vect_save_frmt(struct Map_info *);
  471. int Vect__write_head(const struct Map_info *);
  472. int Vect__read_head(struct Map_info *);
  473. int V1_open_old_nat(struct Map_info *, int);
  474. int V1_open_old_ogr(struct Map_info *, int);
  475. int V1_open_old_pg(struct Map_info *, int);
  476. int V2_open_old_ogr(struct Map_info *);
  477. int V2_open_old_pg(struct Map_info *);
  478. int V1_open_new_nat(struct Map_info *, const char *, int);
  479. int V1_open_new_ogr(struct Map_info *, const char *, int);
  480. int V1_open_new_pg(struct Map_info *, const char *, int);
  481. int V1_rewind_nat(struct Map_info *);
  482. int V1_rewind_ogr(struct Map_info *);
  483. int V1_rewind_pg(struct Map_info *);
  484. int V2_rewind_nat(struct Map_info *);
  485. int V2_rewind_ogr(struct Map_info *);
  486. int V2_rewind_pg(struct Map_info *);
  487. int V1_close_nat(struct Map_info *);
  488. int V1_close_ogr(struct Map_info *);
  489. int V1_close_pg(struct Map_info *);
  490. int V2_close_ogr(struct Map_info *);
  491. int V2_close_pg(struct Map_info *);
  492. /* Read/write lines (internal use only) */
  493. int V1_read_line_nat(struct Map_info *, struct line_pnts *,
  494. struct line_cats *, off_t);
  495. int V1_read_line_ogr(struct Map_info *, struct line_pnts *,
  496. struct line_cats *, off_t);
  497. int V1_read_line_pg(struct Map_info *, struct line_pnts *,
  498. struct line_cats *, off_t);
  499. int V2_read_line_nat(struct Map_info *, struct line_pnts *,
  500. struct line_cats *, int);
  501. int V2_read_line_sfa(struct Map_info *, struct line_pnts *,
  502. struct line_cats *, int);
  503. int V2_read_line_pg(struct Map_info *, struct line_pnts *,
  504. struct line_cats *, int);
  505. int V1_read_next_line_nat(struct Map_info *, struct line_pnts *,
  506. struct line_cats *);
  507. int V1_read_next_line_ogr(struct Map_info *, struct line_pnts *,
  508. struct line_cats *);
  509. int V1_read_next_line_pg(struct Map_info *, struct line_pnts *,
  510. struct line_cats *);
  511. int V2_read_next_line_nat(struct Map_info *, struct line_pnts *,
  512. struct line_cats *);
  513. int V2_read_next_line_ogr(struct Map_info *, struct line_pnts *,
  514. struct line_cats *);
  515. int V2_read_next_line_pg(struct Map_info *, struct line_pnts *,
  516. struct line_cats *);
  517. int V1_delete_line_nat(struct Map_info *, off_t);
  518. int V1_delete_line_ogr(struct Map_info *, off_t);
  519. int V1_delete_line_pg(struct Map_info *, off_t);
  520. int V2_delete_line_nat(struct Map_info *, off_t);
  521. int V2_delete_line_sfa(struct Map_info *, off_t);
  522. int V2_delete_line_pg(struct Map_info *, off_t);
  523. int V1_restore_line_nat(struct Map_info *, off_t, off_t);
  524. int V2_restore_line_nat(struct Map_info *, off_t, off_t);
  525. off_t V1_write_line_nat(struct Map_info *, int, const struct line_pnts *,
  526. const struct line_cats *);
  527. off_t V1_write_line_ogr(struct Map_info *, int, const struct line_pnts *,
  528. const struct line_cats *);
  529. off_t V1_write_line_pg(struct Map_info *, int, const struct line_pnts *,
  530. const struct line_cats *);
  531. off_t V2_write_line_nat(struct Map_info *, int, const struct line_pnts *,
  532. const struct line_cats *);
  533. off_t V2_write_line_sfa(struct Map_info *, int, const struct line_pnts *,
  534. const struct line_cats *);
  535. off_t V2_write_line_pg(struct Map_info *, int, const struct line_pnts *,
  536. const struct line_cats *);
  537. off_t V1_rewrite_line_nat(struct Map_info *, off_t, int,
  538. const struct line_pnts *, const struct line_cats *);
  539. off_t V1_rewrite_line_ogr(struct Map_info *, off_t, int,
  540. const struct line_pnts *, const struct line_cats *);
  541. off_t V1_rewrite_line_pg(struct Map_info *, off_t, int,
  542. const struct line_pnts *, const struct line_cats *);
  543. off_t V2_rewrite_line_nat(struct Map_info *, off_t, int,
  544. const struct line_pnts *, const struct line_cats *);
  545. off_t V2_rewrite_line_sfa(struct Map_info *, off_t, int,
  546. const struct line_pnts *, const struct line_cats *);
  547. off_t V2_rewrite_line_pg(struct Map_info *, off_t, int,
  548. const struct line_pnts *, const struct line_cats *);
  549. /* Build topology */
  550. int Vect_build_nat(struct Map_info *, int);
  551. void Vect__build_downgrade(struct Map_info *, int);
  552. int Vect__build_sfa(struct Map_info *, int);
  553. int Vect_build_ogr(struct Map_info *, int);
  554. int Vect_build_pg(struct Map_info *, int);
  555. int Vect_build_line_area(struct Map_info *, int, int);
  556. int Vect_isle_find_area(struct Map_info *, int, const struct bound_box *);
  557. int Vect_attach_isle(struct Map_info *, int, const struct bound_box *);
  558. int Vect_attach_isles(struct Map_info *, const struct bound_box *);
  559. int Vect_attach_centroids(struct Map_info *, const struct bound_box *);
  560. /* GEOS support */
  561. #ifdef HAVE_GEOS
  562. GEOSGeometry *Vect_read_line_geos(struct Map_info *, int, int*);
  563. GEOSGeometry *Vect_line_to_geos(const struct line_pnts*, int, int);
  564. GEOSGeometry *Vect_read_area_geos(struct Map_info *, int);
  565. GEOSCoordSequence *Vect_get_area_points_geos(struct Map_info *, int);
  566. GEOSCoordSequence *Vect_get_isle_points_geos(struct Map_info *, int);
  567. char *Vect_line_to_wkt(const struct line_pnts *, int, int);
  568. unsigned char *Vect_line_to_wkb(const struct line_pnts *,
  569. int, int, size_t *);
  570. char *Vect_read_area_to_wkt(struct Map_info *, int);
  571. unsigned char *Vect_read_area_to_wkb(struct Map_info *, int, size_t *);
  572. unsigned char *Vect_read_line_to_wkb(const struct Map_info *,
  573. struct line_pnts *,
  574. struct line_cats *,
  575. int, size_t *, int *);
  576. #endif
  577. /* Raster color tables */
  578. int Vect_read_colors(const char *, const char *, struct Colors *);
  579. int Vect_remove_colors(const char *, const char *);
  580. void Vect_write_colors(const char *, const char *, struct Colors *);
  581. /* Simplified RTree search using an ilist to store rectangle ids */
  582. int RTreeSearch2(struct RTree *, struct RTree_Rect *, struct ilist *);
  583. #endif /* GRASS_VECTORDEFS_H */