@sentryware/s2-node 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. package/.circleci/config.yml +45 -0
  2. package/.dockerignore +1 -0
  3. package/.gitmodules +3 -0
  4. package/CHANGELOG.md +33 -0
  5. package/LICENSE +201 -0
  6. package/README.md +147 -0
  7. package/binding.gyp +170 -0
  8. package/docker/Dockerfile.node20.test +8 -0
  9. package/docker/Dockerfile.node22.test +8 -0
  10. package/docker/Dockerfile.node24.test +8 -0
  11. package/index.d.ts +117 -0
  12. package/index.js +6 -0
  13. package/jest.config.js +184 -0
  14. package/package.json +43 -0
  15. package/publish-linux.sh +18 -0
  16. package/publish-osx.sh +19 -0
  17. package/src/builder.cc +84 -0
  18. package/src/builder.h +29 -0
  19. package/src/cell.cc +71 -0
  20. package/src/cell.h +26 -0
  21. package/src/cell_id.cc +210 -0
  22. package/src/cell_id.h +44 -0
  23. package/src/cell_union.cc +237 -0
  24. package/src/cell_union.h +34 -0
  25. package/src/earth.cc +185 -0
  26. package/src/earth.h +33 -0
  27. package/src/latlng.cc +132 -0
  28. package/src/latlng.h +28 -0
  29. package/src/loop.cc +51 -0
  30. package/src/loop.h +21 -0
  31. package/src/point.cc +69 -0
  32. package/src/point.h +23 -0
  33. package/src/polygon.cc +36 -0
  34. package/src/polygon.h +20 -0
  35. package/src/polyline.cc +186 -0
  36. package/src/polyline.h +34 -0
  37. package/src/region_coverer.cc +450 -0
  38. package/src/region_coverer.h +56 -0
  39. package/src/s2.cc +27 -0
  40. package/test/Cell.test.js +37 -0
  41. package/test/CellId.test.js +135 -0
  42. package/test/CellUnion.test.js +150 -0
  43. package/test/Earth.test.js +62 -0
  44. package/test/LatLng.test.js +45 -0
  45. package/test/Point.test.js +14 -0
  46. package/test/Polyline.test.js +78 -0
  47. package/test/RegionCoverer.test.js +301 -0
  48. package/test.sh +16 -0
  49. package/third_party/s2geometry/.travis.yml +163 -0
  50. package/third_party/s2geometry/AUTHORS +13 -0
  51. package/third_party/s2geometry/CONTRIBUTING.md +65 -0
  52. package/third_party/s2geometry/CONTRIBUTORS +30 -0
  53. package/third_party/s2geometry/LICENSE +202 -0
  54. package/third_party/s2geometry/NOTICE +5 -0
  55. package/third_party/s2geometry/README.md +127 -0
  56. package/third_party/s2geometry/doc/examples/point_index.cc +44 -0
  57. package/third_party/s2geometry/doc/examples/term_index.cc +99 -0
  58. package/third_party/s2geometry/doc/examples/term_index.py +101 -0
  59. package/third_party/s2geometry/src/python/coder.i +125 -0
  60. package/third_party/s2geometry/src/python/pywraps2_test.py +786 -0
  61. package/third_party/s2geometry/src/python/s2.i +37 -0
  62. package/third_party/s2geometry/src/python/s2_common.i +756 -0
  63. package/third_party/s2geometry/src/s2/_fp_contract_off.h +60 -0
  64. package/third_party/s2geometry/src/s2/base/casts.h +318 -0
  65. package/third_party/s2geometry/src/s2/base/commandlineflags.h +67 -0
  66. package/third_party/s2geometry/src/s2/base/integral_types.h +31 -0
  67. package/third_party/s2geometry/src/s2/base/log_severity.h +40 -0
  68. package/third_party/s2geometry/src/s2/base/logging.h +173 -0
  69. package/third_party/s2geometry/src/s2/base/mutex.h +61 -0
  70. package/third_party/s2geometry/src/s2/base/port.h +999 -0
  71. package/third_party/s2geometry/src/s2/base/spinlock.h +60 -0
  72. package/third_party/s2geometry/src/s2/base/stringprintf.cc +107 -0
  73. package/third_party/s2geometry/src/s2/base/stringprintf.h +53 -0
  74. package/third_party/s2geometry/src/s2/base/strtoint.cc +65 -0
  75. package/third_party/s2geometry/src/s2/base/strtoint.h +106 -0
  76. package/third_party/s2geometry/src/s2/base/timer.h +50 -0
  77. package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector.cc +164 -0
  78. package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector.h +110 -0
  79. package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector_test.cc +232 -0
  80. package/third_party/s2geometry/src/s2/encoded_s2point_vector.cc +838 -0
  81. package/third_party/s2geometry/src/s2/encoded_s2point_vector.h +140 -0
  82. package/third_party/s2geometry/src/s2/encoded_s2point_vector_test.cc +344 -0
  83. package/third_party/s2geometry/src/s2/encoded_s2shape_index.cc +181 -0
  84. package/third_party/s2geometry/src/s2/encoded_s2shape_index.h +276 -0
  85. package/third_party/s2geometry/src/s2/encoded_s2shape_index_test.cc +244 -0
  86. package/third_party/s2geometry/src/s2/encoded_string_vector.cc +66 -0
  87. package/third_party/s2geometry/src/s2/encoded_string_vector.h +164 -0
  88. package/third_party/s2geometry/src/s2/encoded_string_vector_test.cc +69 -0
  89. package/third_party/s2geometry/src/s2/encoded_uint_vector.h +299 -0
  90. package/third_party/s2geometry/src/s2/encoded_uint_vector_test.cc +124 -0
  91. package/third_party/s2geometry/src/s2/id_set_lexicon.cc +81 -0
  92. package/third_party/s2geometry/src/s2/id_set_lexicon.h +199 -0
  93. package/third_party/s2geometry/src/s2/id_set_lexicon_test.cc +70 -0
  94. package/third_party/s2geometry/src/s2/mutable_s2shape_index.cc +1585 -0
  95. package/third_party/s2geometry/src/s2/mutable_s2shape_index.h +600 -0
  96. package/third_party/s2geometry/src/s2/mutable_s2shape_index_test.cc +589 -0
  97. package/third_party/s2geometry/src/s2/r1interval.h +220 -0
  98. package/third_party/s2geometry/src/s2/r1interval_test.cc +185 -0
  99. package/third_party/s2geometry/src/s2/r2.h +26 -0
  100. package/third_party/s2geometry/src/s2/r2rect.cc +93 -0
  101. package/third_party/s2geometry/src/s2/r2rect.h +234 -0
  102. package/third_party/s2geometry/src/s2/r2rect_test.cc +228 -0
  103. package/third_party/s2geometry/src/s2/s1angle.cc +54 -0
  104. package/third_party/s2geometry/src/s2/s1angle.h +336 -0
  105. package/third_party/s2geometry/src/s2/s1angle_test.cc +185 -0
  106. package/third_party/s2geometry/src/s2/s1chord_angle.cc +159 -0
  107. package/third_party/s2geometry/src/s2/s1chord_angle.h +369 -0
  108. package/third_party/s2geometry/src/s2/s1chord_angle_test.cc +207 -0
  109. package/third_party/s2geometry/src/s2/s1interval.cc +296 -0
  110. package/third_party/s2geometry/src/s2/s1interval.h +266 -0
  111. package/third_party/s2geometry/src/s2/s1interval_test.cc +469 -0
  112. package/third_party/s2geometry/src/s2/s2boolean_operation.cc +2391 -0
  113. package/third_party/s2geometry/src/s2/s2boolean_operation.h +501 -0
  114. package/third_party/s2geometry/src/s2/s2boolean_operation_test.cc +1400 -0
  115. package/third_party/s2geometry/src/s2/s2builder.cc +1828 -0
  116. package/third_party/s2geometry/src/s2/s2builder.h +1057 -0
  117. package/third_party/s2geometry/src/s2/s2builder_graph.cc +1084 -0
  118. package/third_party/s2geometry/src/s2/s2builder_graph.h +799 -0
  119. package/third_party/s2geometry/src/s2/s2builder_graph_test.cc +462 -0
  120. package/third_party/s2geometry/src/s2/s2builder_layer.h +50 -0
  121. package/third_party/s2geometry/src/s2/s2builder_test.cc +1329 -0
  122. package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer.cc +313 -0
  123. package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer.h +221 -0
  124. package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer_test.cc +261 -0
  125. package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies.cc +392 -0
  126. package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies.h +86 -0
  127. package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies_test.cc +182 -0
  128. package/third_party/s2geometry/src/s2/s2builderutil_graph_shape.h +57 -0
  129. package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer.cc +212 -0
  130. package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer.h +218 -0
  131. package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer_test.cc +367 -0
  132. package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer.cc +74 -0
  133. package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer.h +122 -0
  134. package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer_test.cc +167 -0
  135. package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer.cc +191 -0
  136. package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer.h +211 -0
  137. package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer_test.cc +312 -0
  138. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer.cc +105 -0
  139. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer.h +174 -0
  140. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer_test.cc +220 -0
  141. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer.cc +98 -0
  142. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer.h +292 -0
  143. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer_test.cc +233 -0
  144. package/third_party/s2geometry/src/s2/s2builderutil_snap_functions.cc +354 -0
  145. package/third_party/s2geometry/src/s2/s2builderutil_snap_functions.h +239 -0
  146. package/third_party/s2geometry/src/s2/s2builderutil_snap_functions_test.cc +716 -0
  147. package/third_party/s2geometry/src/s2/s2builderutil_testing.cc +37 -0
  148. package/third_party/s2geometry/src/s2/s2builderutil_testing.h +100 -0
  149. package/third_party/s2geometry/src/s2/s2builderutil_testing_test.cc +85 -0
  150. package/third_party/s2geometry/src/s2/s2cap.cc +347 -0
  151. package/third_party/s2geometry/src/s2/s2cap.h +286 -0
  152. package/third_party/s2geometry/src/s2/s2cap_test.cc +379 -0
  153. package/third_party/s2geometry/src/s2/s2cell.cc +552 -0
  154. package/third_party/s2geometry/src/s2/s2cell.h +249 -0
  155. package/third_party/s2geometry/src/s2/s2cell_id.cc +619 -0
  156. package/third_party/s2geometry/src/s2/s2cell_id.h +705 -0
  157. package/third_party/s2geometry/src/s2/s2cell_id_test.cc +633 -0
  158. package/third_party/s2geometry/src/s2/s2cell_index.cc +149 -0
  159. package/third_party/s2geometry/src/s2/s2cell_index.h +660 -0
  160. package/third_party/s2geometry/src/s2/s2cell_index_test.cc +411 -0
  161. package/third_party/s2geometry/src/s2/s2cell_test.cc +687 -0
  162. package/third_party/s2geometry/src/s2/s2cell_union.cc +515 -0
  163. package/third_party/s2geometry/src/s2/s2cell_union.h +399 -0
  164. package/third_party/s2geometry/src/s2/s2cell_union_test.cc +598 -0
  165. package/third_party/s2geometry/src/s2/s2centroids.cc +84 -0
  166. package/third_party/s2geometry/src/s2/s2centroids.h +87 -0
  167. package/third_party/s2geometry/src/s2/s2centroids_test.cc +82 -0
  168. package/third_party/s2geometry/src/s2/s2closest_cell_query.cc +123 -0
  169. package/third_party/s2geometry/src/s2/s2closest_cell_query.h +385 -0
  170. package/third_party/s2geometry/src/s2/s2closest_cell_query_base.h +841 -0
  171. package/third_party/s2geometry/src/s2/s2closest_cell_query_base_test.cc +63 -0
  172. package/third_party/s2geometry/src/s2/s2closest_cell_query_test.cc +412 -0
  173. package/third_party/s2geometry/src/s2/s2closest_edge_query.cc +106 -0
  174. package/third_party/s2geometry/src/s2/s2closest_edge_query.h +421 -0
  175. package/third_party/s2geometry/src/s2/s2closest_edge_query_base.h +946 -0
  176. package/third_party/s2geometry/src/s2/s2closest_edge_query_base_test.cc +59 -0
  177. package/third_party/s2geometry/src/s2/s2closest_edge_query_test.cc +505 -0
  178. package/third_party/s2geometry/src/s2/s2closest_edge_query_testing.h +91 -0
  179. package/third_party/s2geometry/src/s2/s2closest_point_query.cc +66 -0
  180. package/third_party/s2geometry/src/s2/s2closest_point_query.h +465 -0
  181. package/third_party/s2geometry/src/s2/s2closest_point_query_base.h +767 -0
  182. package/third_party/s2geometry/src/s2/s2closest_point_query_base_test.cc +63 -0
  183. package/third_party/s2geometry/src/s2/s2closest_point_query_test.cc +312 -0
  184. package/third_party/s2geometry/src/s2/s2contains_point_query.h +328 -0
  185. package/third_party/s2geometry/src/s2/s2contains_point_query_test.cc +159 -0
  186. package/third_party/s2geometry/src/s2/s2contains_vertex_query.cc +39 -0
  187. package/third_party/s2geometry/src/s2/s2contains_vertex_query.h +66 -0
  188. package/third_party/s2geometry/src/s2/s2contains_vertex_query_test.cc +67 -0
  189. package/third_party/s2geometry/src/s2/s2convex_hull_query.cc +198 -0
  190. package/third_party/s2geometry/src/s2/s2convex_hull_query.h +110 -0
  191. package/third_party/s2geometry/src/s2/s2convex_hull_query_test.cc +208 -0
  192. package/third_party/s2geometry/src/s2/s2coords.cc +146 -0
  193. package/third_party/s2geometry/src/s2/s2coords.h +459 -0
  194. package/third_party/s2geometry/src/s2/s2coords_internal.h +71 -0
  195. package/third_party/s2geometry/src/s2/s2coords_test.cc +218 -0
  196. package/third_party/s2geometry/src/s2/s2crossing_edge_query.cc +380 -0
  197. package/third_party/s2geometry/src/s2/s2crossing_edge_query.h +220 -0
  198. package/third_party/s2geometry/src/s2/s2crossing_edge_query_test.cc +382 -0
  199. package/third_party/s2geometry/src/s2/s2debug.cc +23 -0
  200. package/third_party/s2geometry/src/s2/s2debug.h +69 -0
  201. package/third_party/s2geometry/src/s2/s2distance_target.h +165 -0
  202. package/third_party/s2geometry/src/s2/s2earth.cc +52 -0
  203. package/third_party/s2geometry/src/s2/s2earth.h +268 -0
  204. package/third_party/s2geometry/src/s2/s2earth_test.cc +146 -0
  205. package/third_party/s2geometry/src/s2/s2edge_clipping.cc +462 -0
  206. package/third_party/s2geometry/src/s2/s2edge_clipping.h +183 -0
  207. package/third_party/s2geometry/src/s2/s2edge_clipping_test.cc +335 -0
  208. package/third_party/s2geometry/src/s2/s2edge_crosser.cc +85 -0
  209. package/third_party/s2geometry/src/s2/s2edge_crosser.h +343 -0
  210. package/third_party/s2geometry/src/s2/s2edge_crosser_test.cc +264 -0
  211. package/third_party/s2geometry/src/s2/s2edge_crossings.cc +515 -0
  212. package/third_party/s2geometry/src/s2/s2edge_crossings.h +138 -0
  213. package/third_party/s2geometry/src/s2/s2edge_crossings_internal.h +59 -0
  214. package/third_party/s2geometry/src/s2/s2edge_crossings_test.cc +246 -0
  215. package/third_party/s2geometry/src/s2/s2edge_distances.cc +419 -0
  216. package/third_party/s2geometry/src/s2/s2edge_distances.h +192 -0
  217. package/third_party/s2geometry/src/s2/s2edge_distances_test.cc +539 -0
  218. package/third_party/s2geometry/src/s2/s2edge_tessellator.cc +276 -0
  219. package/third_party/s2geometry/src/s2/s2edge_tessellator.h +101 -0
  220. package/third_party/s2geometry/src/s2/s2edge_tessellator_test.cc +492 -0
  221. package/third_party/s2geometry/src/s2/s2edge_vector_shape.h +85 -0
  222. package/third_party/s2geometry/src/s2/s2edge_vector_shape_test.cc +66 -0
  223. package/third_party/s2geometry/src/s2/s2error.cc +29 -0
  224. package/third_party/s2geometry/src/s2/s2error.h +147 -0
  225. package/third_party/s2geometry/src/s2/s2error_test.cc +31 -0
  226. package/third_party/s2geometry/src/s2/s2furthest_edge_query.cc +117 -0
  227. package/third_party/s2geometry/src/s2/s2furthest_edge_query.h +439 -0
  228. package/third_party/s2geometry/src/s2/s2furthest_edge_query_test.cc +487 -0
  229. package/third_party/s2geometry/src/s2/s2latlng.cc +90 -0
  230. package/third_party/s2geometry/src/s2/s2latlng.h +234 -0
  231. package/third_party/s2geometry/src/s2/s2latlng_rect.cc +727 -0
  232. package/third_party/s2geometry/src/s2/s2latlng_rect.h +434 -0
  233. package/third_party/s2geometry/src/s2/s2latlng_rect_bounder.cc +344 -0
  234. package/third_party/s2geometry/src/s2/s2latlng_rect_bounder.h +89 -0
  235. package/third_party/s2geometry/src/s2/s2latlng_rect_bounder_test.cc +306 -0
  236. package/third_party/s2geometry/src/s2/s2latlng_rect_test.cc +1030 -0
  237. package/third_party/s2geometry/src/s2/s2latlng_test.cc +165 -0
  238. package/third_party/s2geometry/src/s2/s2lax_loop_shape.cc +104 -0
  239. package/third_party/s2geometry/src/s2/s2lax_loop_shape.h +153 -0
  240. package/third_party/s2geometry/src/s2/s2lax_loop_shape_test.cc +101 -0
  241. package/third_party/s2geometry/src/s2/s2lax_polygon_shape.cc +348 -0
  242. package/third_party/s2geometry/src/s2/s2lax_polygon_shape.h +183 -0
  243. package/third_party/s2geometry/src/s2/s2lax_polygon_shape_test.cc +234 -0
  244. package/third_party/s2geometry/src/s2/s2lax_polyline_shape.cc +118 -0
  245. package/third_party/s2geometry/src/s2/s2lax_polyline_shape.h +124 -0
  246. package/third_party/s2geometry/src/s2/s2lax_polyline_shape_test.cc +62 -0
  247. package/third_party/s2geometry/src/s2/s2loop.cc +1509 -0
  248. package/third_party/s2geometry/src/s2/s2loop.h +711 -0
  249. package/third_party/s2geometry/src/s2/s2loop_measures.cc +313 -0
  250. package/third_party/s2geometry/src/s2/s2loop_measures.h +280 -0
  251. package/third_party/s2geometry/src/s2/s2loop_measures_test.cc +367 -0
  252. package/third_party/s2geometry/src/s2/s2loop_test.cc +1371 -0
  253. package/third_party/s2geometry/src/s2/s2max_distance_targets.cc +265 -0
  254. package/third_party/s2geometry/src/s2/s2max_distance_targets.h +241 -0
  255. package/third_party/s2geometry/src/s2/s2max_distance_targets_test.cc +367 -0
  256. package/third_party/s2geometry/src/s2/s2measures.cc +128 -0
  257. package/third_party/s2geometry/src/s2/s2measures.h +78 -0
  258. package/third_party/s2geometry/src/s2/s2measures_test.cc +135 -0
  259. package/third_party/s2geometry/src/s2/s2metrics.cc +122 -0
  260. package/third_party/s2geometry/src/s2/s2metrics.h +199 -0
  261. package/third_party/s2geometry/src/s2/s2metrics_test.cc +127 -0
  262. package/third_party/s2geometry/src/s2/s2min_distance_targets.cc +295 -0
  263. package/third_party/s2geometry/src/s2/s2min_distance_targets.h +273 -0
  264. package/third_party/s2geometry/src/s2/s2min_distance_targets_test.cc +239 -0
  265. package/third_party/s2geometry/src/s2/s2padded_cell.cc +162 -0
  266. package/third_party/s2geometry/src/s2/s2padded_cell.h +108 -0
  267. package/third_party/s2geometry/src/s2/s2padded_cell_test.cc +138 -0
  268. package/third_party/s2geometry/src/s2/s2point.h +38 -0
  269. package/third_party/s2geometry/src/s2/s2point_compression.cc +388 -0
  270. package/third_party/s2geometry/src/s2/s2point_compression.h +78 -0
  271. package/third_party/s2geometry/src/s2/s2point_compression_test.cc +305 -0
  272. package/third_party/s2geometry/src/s2/s2point_index.h +345 -0
  273. package/third_party/s2geometry/src/s2/s2point_index_test.cc +147 -0
  274. package/third_party/s2geometry/src/s2/s2point_region.cc +72 -0
  275. package/third_party/s2geometry/src/s2/s2point_region.h +76 -0
  276. package/third_party/s2geometry/src/s2/s2point_region_test.cc +100 -0
  277. package/third_party/s2geometry/src/s2/s2point_span.h +57 -0
  278. package/third_party/s2geometry/src/s2/s2point_test.cc +47 -0
  279. package/third_party/s2geometry/src/s2/s2point_vector_shape.h +127 -0
  280. package/third_party/s2geometry/src/s2/s2point_vector_shape_test.cc +59 -0
  281. package/third_party/s2geometry/src/s2/s2pointutil.cc +131 -0
  282. package/third_party/s2geometry/src/s2/s2pointutil.h +138 -0
  283. package/third_party/s2geometry/src/s2/s2pointutil_test.cc +157 -0
  284. package/third_party/s2geometry/src/s2/s2polygon.cc +1569 -0
  285. package/third_party/s2geometry/src/s2/s2polygon.h +934 -0
  286. package/third_party/s2geometry/src/s2/s2polygon_test.cc +3025 -0
  287. package/third_party/s2geometry/src/s2/s2polyline.cc +645 -0
  288. package/third_party/s2geometry/src/s2/s2polyline.h +379 -0
  289. package/third_party/s2geometry/src/s2/s2polyline_alignment.cc +414 -0
  290. package/third_party/s2geometry/src/s2/s2polyline_alignment.h +245 -0
  291. package/third_party/s2geometry/src/s2/s2polyline_alignment_internal.h +158 -0
  292. package/third_party/s2geometry/src/s2/s2polyline_alignment_test.cc +610 -0
  293. package/third_party/s2geometry/src/s2/s2polyline_measures.cc +42 -0
  294. package/third_party/s2geometry/src/s2/s2polyline_measures.h +53 -0
  295. package/third_party/s2geometry/src/s2/s2polyline_measures_test.cc +57 -0
  296. package/third_party/s2geometry/src/s2/s2polyline_simplifier.cc +187 -0
  297. package/third_party/s2geometry/src/s2/s2polyline_simplifier.h +109 -0
  298. package/third_party/s2geometry/src/s2/s2polyline_simplifier_test.cc +165 -0
  299. package/third_party/s2geometry/src/s2/s2polyline_test.cc +554 -0
  300. package/third_party/s2geometry/src/s2/s2predicates.cc +1486 -0
  301. package/third_party/s2geometry/src/s2/s2predicates.h +282 -0
  302. package/third_party/s2geometry/src/s2/s2predicates_internal.h +135 -0
  303. package/third_party/s2geometry/src/s2/s2predicates_test.cc +1427 -0
  304. package/third_party/s2geometry/src/s2/s2projections.cc +109 -0
  305. package/third_party/s2geometry/src/s2/s2projections.h +161 -0
  306. package/third_party/s2geometry/src/s2/s2projections_test.cc +78 -0
  307. package/third_party/s2geometry/src/s2/s2r2rect.cc +88 -0
  308. package/third_party/s2geometry/src/s2/s2r2rect.h +292 -0
  309. package/third_party/s2geometry/src/s2/s2r2rect_test.cc +312 -0
  310. package/third_party/s2geometry/src/s2/s2region.cc +26 -0
  311. package/third_party/s2geometry/src/s2/s2region.h +142 -0
  312. package/third_party/s2geometry/src/s2/s2region_coverer.cc +514 -0
  313. package/third_party/s2geometry/src/s2/s2region_coverer.h +356 -0
  314. package/third_party/s2geometry/src/s2/s2region_coverer_test.cc +509 -0
  315. package/third_party/s2geometry/src/s2/s2region_intersection.cc +84 -0
  316. package/third_party/s2geometry/src/s2/s2region_intersection.h +79 -0
  317. package/third_party/s2geometry/src/s2/s2region_term_indexer.cc +270 -0
  318. package/third_party/s2geometry/src/s2/s2region_term_indexer.h +299 -0
  319. package/third_party/s2geometry/src/s2/s2region_term_indexer_test.cc +209 -0
  320. package/third_party/s2geometry/src/s2/s2region_test.cc +370 -0
  321. package/third_party/s2geometry/src/s2/s2region_union.cc +90 -0
  322. package/third_party/s2geometry/src/s2/s2region_union.h +83 -0
  323. package/third_party/s2geometry/src/s2/s2region_union_test.cc +89 -0
  324. package/third_party/s2geometry/src/s2/s2shape.h +283 -0
  325. package/third_party/s2geometry/src/s2/s2shape_index.cc +321 -0
  326. package/third_party/s2geometry/src/s2/s2shape_index.h +781 -0
  327. package/third_party/s2geometry/src/s2/s2shape_index_buffered_region.cc +113 -0
  328. package/third_party/s2geometry/src/s2/s2shape_index_buffered_region.h +135 -0
  329. package/third_party/s2geometry/src/s2/s2shape_index_buffered_region_test.cc +162 -0
  330. package/third_party/s2geometry/src/s2/s2shape_index_measures.cc +92 -0
  331. package/third_party/s2geometry/src/s2/s2shape_index_measures.h +100 -0
  332. package/third_party/s2geometry/src/s2/s2shape_index_measures_test.cc +136 -0
  333. package/third_party/s2geometry/src/s2/s2shape_index_region.h +350 -0
  334. package/third_party/s2geometry/src/s2/s2shape_index_region_test.cc +161 -0
  335. package/third_party/s2geometry/src/s2/s2shape_index_test.cc +24 -0
  336. package/third_party/s2geometry/src/s2/s2shape_measures.cc +138 -0
  337. package/third_party/s2geometry/src/s2/s2shape_measures.h +95 -0
  338. package/third_party/s2geometry/src/s2/s2shape_measures_test.cc +139 -0
  339. package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries.cc +120 -0
  340. package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries.h +66 -0
  341. package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries_test.cc +170 -0
  342. package/third_party/s2geometry/src/s2/s2shapeutil_coding.cc +253 -0
  343. package/third_party/s2geometry/src/s2/s2shapeutil_coding.h +283 -0
  344. package/third_party/s2geometry/src/s2/s2shapeutil_coding_test.cc +54 -0
  345. package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force.cc +40 -0
  346. package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force.h +41 -0
  347. package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force_test.cc +55 -0
  348. package/third_party/s2geometry/src/s2/s2shapeutil_count_edges.h +57 -0
  349. package/third_party/s2geometry/src/s2/s2shapeutil_count_edges_test.cc +43 -0
  350. package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator.cc +45 -0
  351. package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator.h +72 -0
  352. package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator_test.cc +116 -0
  353. package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point.cc +107 -0
  354. package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point.h +48 -0
  355. package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point_test.cc +104 -0
  356. package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator.cc +58 -0
  357. package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator.h +65 -0
  358. package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator_test.cc +61 -0
  359. package/third_party/s2geometry/src/s2/s2shapeutil_shape_edge.h +58 -0
  360. package/third_party/s2geometry/src/s2/s2shapeutil_shape_edge_id.h +97 -0
  361. package/third_party/s2geometry/src/s2/s2shapeutil_testing.cc +104 -0
  362. package/third_party/s2geometry/src/s2/s2shapeutil_testing.h +36 -0
  363. package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs.cc +440 -0
  364. package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs.h +72 -0
  365. package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs_test.cc +184 -0
  366. package/third_party/s2geometry/src/s2/s2testing.cc +464 -0
  367. package/third_party/s2geometry/src/s2/s2testing.h +385 -0
  368. package/third_party/s2geometry/src/s2/s2testing_test.cc +166 -0
  369. package/third_party/s2geometry/src/s2/s2text_format.cc +506 -0
  370. package/third_party/s2geometry/src/s2/s2text_format.h +289 -0
  371. package/third_party/s2geometry/src/s2/s2text_format_test.cc +417 -0
  372. package/third_party/s2geometry/src/s2/s2wedge_relations.cc +80 -0
  373. package/third_party/s2geometry/src/s2/s2wedge_relations.h +64 -0
  374. package/third_party/s2geometry/src/s2/s2wedge_relations_test.cc +89 -0
  375. package/third_party/s2geometry/src/s2/sequence_lexicon.h +296 -0
  376. package/third_party/s2geometry/src/s2/sequence_lexicon_test.cc +113 -0
  377. package/third_party/s2geometry/src/s2/strings/ostringstream.cc +35 -0
  378. package/third_party/s2geometry/src/s2/strings/ostringstream.h +105 -0
  379. package/third_party/s2geometry/src/s2/strings/serialize.cc +46 -0
  380. package/third_party/s2geometry/src/s2/strings/serialize.h +40 -0
  381. package/third_party/s2geometry/src/s2/third_party/absl/algorithm/algorithm.h +187 -0
  382. package/third_party/s2geometry/src/s2/third_party/absl/base/attributes.h +666 -0
  383. package/third_party/s2geometry/src/s2/third_party/absl/base/casts.h +189 -0
  384. package/third_party/s2geometry/src/s2/third_party/absl/base/config.h +462 -0
  385. package/third_party/s2geometry/src/s2/third_party/absl/base/dynamic_annotations.cc +129 -0
  386. package/third_party/s2geometry/src/s2/third_party/absl/base/dynamic_annotations.h +394 -0
  387. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/atomic_hook.h +168 -0
  388. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/identity.h +33 -0
  389. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/inline_variable.h +117 -0
  390. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/invoke.h +188 -0
  391. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/raw_logging.cc +254 -0
  392. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/raw_logging.h +205 -0
  393. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/throw_delegate.cc +106 -0
  394. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/throw_delegate.h +71 -0
  395. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/unaligned_access.h +322 -0
  396. package/third_party/s2geometry/src/s2/third_party/absl/base/log_severity.h +77 -0
  397. package/third_party/s2geometry/src/s2/third_party/absl/base/macros.h +236 -0
  398. package/third_party/s2geometry/src/s2/third_party/absl/base/optimization.h +177 -0
  399. package/third_party/s2geometry/src/s2/third_party/absl/base/policy_checks.h +124 -0
  400. package/third_party/s2geometry/src/s2/third_party/absl/base/port.h +97 -0
  401. package/third_party/s2geometry/src/s2/third_party/absl/base/thread_annotations.h +277 -0
  402. package/third_party/s2geometry/src/s2/third_party/absl/container/fixed_array.h +523 -0
  403. package/third_party/s2geometry/src/s2/third_party/absl/container/inlined_vector.h +1453 -0
  404. package/third_party/s2geometry/src/s2/third_party/absl/container/internal/compressed_tuple.h +191 -0
  405. package/third_party/s2geometry/src/s2/third_party/absl/container/internal/container_memory.h +424 -0
  406. package/third_party/s2geometry/src/s2/third_party/absl/container/internal/layout.h +739 -0
  407. package/third_party/s2geometry/src/s2/third_party/absl/memory/memory.h +755 -0
  408. package/third_party/s2geometry/src/s2/third_party/absl/meta/type_traits.h +436 -0
  409. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128.cc +232 -0
  410. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128.h +656 -0
  411. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128_have_intrinsic.inc +3 -0
  412. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128_no_intrinsic.inc +3 -0
  413. package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii.cc +198 -0
  414. package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii.h +239 -0
  415. package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii_ctype.h +66 -0
  416. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/bits.h +53 -0
  417. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/memutil.cc +110 -0
  418. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/memutil.h +146 -0
  419. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/resize_uninitialized.h +72 -0
  420. package/third_party/s2geometry/src/s2/third_party/absl/strings/match.cc +38 -0
  421. package/third_party/s2geometry/src/s2/third_party/absl/strings/match.h +89 -0
  422. package/third_party/s2geometry/src/s2/third_party/absl/strings/numbers.cc +909 -0
  423. package/third_party/s2geometry/src/s2/third_party/absl/strings/numbers.h +187 -0
  424. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_cat.cc +240 -0
  425. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_cat.h +398 -0
  426. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_join.h +22 -0
  427. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_split.cc +47 -0
  428. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_split.h +43 -0
  429. package/third_party/s2geometry/src/s2/third_party/absl/strings/string_view.cc +245 -0
  430. package/third_party/s2geometry/src/s2/third_party/absl/strings/string_view.h +602 -0
  431. package/third_party/s2geometry/src/s2/third_party/absl/strings/strip.cc +42 -0
  432. package/third_party/s2geometry/src/s2/third_party/absl/strings/strip.h +130 -0
  433. package/third_party/s2geometry/src/s2/third_party/absl/types/span.h +793 -0
  434. package/third_party/s2geometry/src/s2/third_party/absl/utility/utility.h +299 -0
  435. package/third_party/s2geometry/src/s2/util/bits/bit-interleave.cc +274 -0
  436. package/third_party/s2geometry/src/s2/util/bits/bit-interleave.h +53 -0
  437. package/third_party/s2geometry/src/s2/util/bits/bits.cc +155 -0
  438. package/third_party/s2geometry/src/s2/util/bits/bits.h +745 -0
  439. package/third_party/s2geometry/src/s2/util/coding/coder.cc +83 -0
  440. package/third_party/s2geometry/src/s2/util/coding/coder.h +553 -0
  441. package/third_party/s2geometry/src/s2/util/coding/nth-derivative.h +134 -0
  442. package/third_party/s2geometry/src/s2/util/coding/transforms.h +62 -0
  443. package/third_party/s2geometry/src/s2/util/coding/varint.cc +289 -0
  444. package/third_party/s2geometry/src/s2/util/coding/varint.h +476 -0
  445. package/third_party/s2geometry/src/s2/util/endian/endian.h +859 -0
  446. package/third_party/s2geometry/src/s2/util/gtl/btree.h +2471 -0
  447. package/third_party/s2geometry/src/s2/util/gtl/btree_container.h +411 -0
  448. package/third_party/s2geometry/src/s2/util/gtl/btree_map.h +79 -0
  449. package/third_party/s2geometry/src/s2/util/gtl/btree_set.h +73 -0
  450. package/third_party/s2geometry/src/s2/util/gtl/compact_array.h +653 -0
  451. package/third_party/s2geometry/src/s2/util/gtl/container_logging.h +291 -0
  452. package/third_party/s2geometry/src/s2/util/gtl/dense_hash_set.h +358 -0
  453. package/third_party/s2geometry/src/s2/util/gtl/densehashtable.h +1493 -0
  454. package/third_party/s2geometry/src/s2/util/gtl/hashtable_common.h +253 -0
  455. package/third_party/s2geometry/src/s2/util/gtl/layout.h +28 -0
  456. package/third_party/s2geometry/src/s2/util/gtl/legacy_random_shuffle.h +77 -0
  457. package/third_party/s2geometry/src/s2/util/hash/mix.h +76 -0
  458. package/third_party/s2geometry/src/s2/util/math/exactfloat/exactfloat.cc +832 -0
  459. package/third_party/s2geometry/src/s2/util/math/exactfloat/exactfloat.h +646 -0
  460. package/third_party/s2geometry/src/s2/util/math/mathutil.cc +75 -0
  461. package/third_party/s2geometry/src/s2/util/math/mathutil.h +189 -0
  462. package/third_party/s2geometry/src/s2/util/math/matrix3x3.h +574 -0
  463. package/third_party/s2geometry/src/s2/util/math/vector.h +569 -0
  464. package/third_party/s2geometry/src/s2/util/math/vector3_hash.h +54 -0
  465. package/third_party/s2geometry/src/s2/util/units/length-units.cc +21 -0
  466. package/third_party/s2geometry/src/s2/util/units/length-units.h +135 -0
  467. package/third_party/s2geometry/src/s2/util/units/physical-units.h +313 -0
  468. package/third_party/s2geometry/src/s2/value_lexicon.h +234 -0
  469. package/third_party/s2geometry/src/s2/value_lexicon_test.cc +121 -0
  470. package/third_party/s2geometry/third_party/cmake/FindGFlags.cmake +48 -0
  471. package/third_party/s2geometry/third_party/cmake/FindGlog.cmake +48 -0
@@ -0,0 +1,220 @@
1
+ // Copyright 2016 Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS-IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+
16
+ // Author: ericv@google.com (Eric Veach)
17
+
18
+ #include "s2/s2builderutil_s2polyline_layer.h"
19
+
20
+ #include <string>
21
+ #include "s2/base/casts.h"
22
+ #include "s2/base/integral_types.h"
23
+ #include <gtest/gtest.h>
24
+ #include "s2/third_party/absl/memory/memory.h"
25
+ #include "s2/s2builderutil_snap_functions.h"
26
+ #include "s2/s2debug.h"
27
+ #include "s2/s2text_format.h"
28
+
29
+ using absl::make_unique;
30
+ using s2builderutil::IndexedS2PolylineLayer;
31
+ using s2builderutil::S2PolylineLayer;
32
+ using s2textformat::MakePolylineOrDie;
33
+ using std::vector;
34
+
35
+ using EdgeType = S2Builder::EdgeType;
36
+
37
+ namespace {
38
+
39
+ void TestS2Polyline(
40
+ const vector<const char*>& input_strs,
41
+ const char* expected_str, EdgeType edge_type,
42
+ const S2Builder::Options& options = S2Builder::Options()) {
43
+ SCOPED_TRACE(edge_type == EdgeType::DIRECTED ? "DIRECTED" : "UNDIRECTED");
44
+ S2Builder builder(options);
45
+ S2Polyline output;
46
+ builder.StartLayer(make_unique<S2PolylineLayer>(
47
+ &output, S2PolylineLayer::Options(edge_type)));
48
+ for (auto input_str : input_strs) {
49
+ builder.AddPolyline(*MakePolylineOrDie(input_str));
50
+ }
51
+ S2Error error;
52
+ ASSERT_TRUE(builder.Build(&error));
53
+ EXPECT_EQ(expected_str, s2textformat::ToString(output));
54
+ }
55
+
56
+ // Convenience function that tests both directed and undirected edges.
57
+ void TestS2Polyline(
58
+ const vector<const char*>& input_strs, const char* expected_str,
59
+ const S2Builder::Options& options = S2Builder::Options()) {
60
+ TestS2Polyline(input_strs, expected_str, EdgeType::DIRECTED, options);
61
+ TestS2Polyline(input_strs, expected_str, EdgeType::UNDIRECTED, options);
62
+ }
63
+
64
+ void TestS2PolylineUnchanged(const char* input_str) {
65
+ TestS2Polyline(vector<const char*>{input_str}, input_str);
66
+ }
67
+
68
+ TEST(S2PolylineLayer, NoEdges) {
69
+ TestS2Polyline({}, "");
70
+ }
71
+
72
+ TEST(S2PolylineLayer, OneEdge) {
73
+ // Even with undirected edges, S2PolylineLayer prefers to reconstruct edges
74
+ // in their original direction.
75
+ TestS2PolylineUnchanged("3:4, 1:1");
76
+ TestS2PolylineUnchanged("1:1, 3:4");
77
+ }
78
+
79
+ TEST(S2PolylineLayer, StraightLineWithBacktracking) {
80
+ TestS2PolylineUnchanged("0:0, 1:0, 2:0, 3:0, 2:0, 1:0, 2:0, 3:0, 4:0");
81
+ }
82
+
83
+ TEST(S2PolylineLayer, EarlyWalkTerminationWithEndLoop1) {
84
+ // Test that the "early walk termination" code (which is needed by
85
+ // S2PolylineVectorLayer in order to implement idempotency) does not create
86
+ // two polylines when it is possible to assemble the edges into one.
87
+ //
88
+ // This example tests a code path where the early walk termination code
89
+ // should not be triggered at all (but was at one point due to a bug).
90
+ S2Builder::Options options;
91
+ options.set_snap_function(s2builderutil::IntLatLngSnapFunction(2));
92
+ TestS2Polyline({"0:0, 0:2, 0:1"}, "0:0, 0:1, 0:2, 0:1", options);
93
+ }
94
+
95
+ TEST(S2PolylineLayer, EarlyWalkTerminationWithEndLoop2) {
96
+ // This tests a different code path where the walk is terminated early
97
+ // (yield a polyline with one edge), and then the walk is "maximimzed" by
98
+ // appending a two-edge loop to the end.
99
+ TestS2Polyline({"0:0, 0:1", "0:2, 0:1", "0:1, 0:2"},
100
+ "0:0, 0:1, 0:2, 0:1");
101
+ }
102
+
103
+ TEST(S2PolylineLayer, SimpleLoop) {
104
+ TestS2PolylineUnchanged("0:0, 0:5, 5:5, 5:0, 0:0");
105
+ }
106
+
107
+ TEST(S2PolylineLayer, ManyLoops) {
108
+ // This polyline consists of many overlapping loops that keep returning to
109
+ // the same starting vertex (2:2). This tests whether the implementation is
110
+ // able to assemble the polyline in the original order.
111
+ TestS2PolylineUnchanged(
112
+ "0:0, 2:2, 2:4, 2:2, 2:4, 4:4, 4:2, 2:2, 4:4, 4:2, 2:2, 2:0, 2:2, "
113
+ "2:0, 4:0, 2:2, 4:2, 2:2, 0:2, 0:4, 2:2, 0:4, 0:2, 2:2, 0:4, 2:2, "
114
+ "0:2, 2:2, 0:0, 0:2, 2:2, 0:0");
115
+ }
116
+
117
+ TEST(S2PolylineLayer, UnorderedLoops) {
118
+ // This test consists of 5 squares that touch diagonally, similar to the 5
119
+ // white squares of a 3x3 chessboard. The edges of these squares need to be
120
+ // reordered to assemble them into a single unbroken polyline.
121
+ TestS2Polyline({
122
+ "3:3, 3:2, 2:2, 2:3, 3:3",
123
+ "1:0, 0:0, 0:1, 1:1, 1:0",
124
+ "3:1, 3:0, 2:0, 2:1, 3:1",
125
+ "1:3, 1:2, 0:2, 0:1, 1:3",
126
+ "1:1, 1:2, 2:2, 2:1, 1:1", // Central square
127
+ },
128
+ "3:3, 3:2, 2:2, 2:1, 3:1, 3:0, 2:0, 2:1, 1:1, 1:0, 0:0, "
129
+ "0:1, 1:1, 1:2, 0:2, 0:1, 1:3, 1:2, 2:2, 2:3, 3:3");
130
+ }
131
+
132
+ TEST(S2PolylineLayer, SplitEdges) {
133
+ // Test reconstruction of a polyline where two edges have been split into
134
+ // many pieces by crossing edges. This example is particularly challenging
135
+ // because (1) the edges form a loop, and (2) the first and last edges are
136
+ // identical (but reversed). This is designed to test the heuristics that
137
+ // attempt to find the first edge of the input polyline.
138
+ S2Builder::Options options;
139
+ options.set_split_crossing_edges(true);
140
+ options.set_snap_function(s2builderutil::IntLatLngSnapFunction(7));
141
+ TestS2Polyline(
142
+ {"0:10, 0:0, 1:0, -1:2, 1:4, -1:6, 1:8, -1:10, -5:0, 0:0, 0:10"},
143
+ "0:10, 0:9, 0:7, 0:5, 0:3, 0:1, 0:0, 1:0, 0:1, -1:2, 0:3, 1:4, 0:5, "
144
+ "-1:6, 0:7, 1:8, 0:9, -1:10, -5:0, 0:0, 0:1, 0:3, 0:5, 0:7, 0:9, 0:10",
145
+ options);
146
+ }
147
+
148
+ TEST(S2PolylineLayer, SimpleEdgeLabels) {
149
+ S2Builder builder{S2Builder::Options()};
150
+ S2Polyline output;
151
+ S2PolylineLayer::LabelSetIds label_set_ids;
152
+ IdSetLexicon label_set_lexicon;
153
+ builder.StartLayer(make_unique<S2PolylineLayer>(
154
+ &output, &label_set_ids, &label_set_lexicon,
155
+ S2PolylineLayer::Options(EdgeType::UNDIRECTED)));
156
+ builder.set_label(5);
157
+ builder.AddPolyline(*MakePolylineOrDie("0:0, 0:1, 0:2"));
158
+ builder.push_label(7);
159
+ builder.AddPolyline(*MakePolylineOrDie("0:3, 0:2"));
160
+ builder.clear_labels();
161
+ builder.AddPolyline(*MakePolylineOrDie("0:3, 0:4, 0:5"));
162
+ builder.set_label(11);
163
+ builder.AddPolyline(*MakePolylineOrDie("0:6, 0:5"));
164
+ S2Error error;
165
+ ASSERT_TRUE(builder.Build(&error));
166
+ vector<vector<int32>> expected = {{5}, {5}, {5, 7}, {}, {}, {11}};
167
+ ASSERT_EQ(expected.size(), label_set_ids.size());
168
+ for (int i = 0; i < expected.size(); ++i) {
169
+ ASSERT_EQ(expected[i].size(),
170
+ label_set_lexicon.id_set(label_set_ids[i]).size());
171
+ int j = 0;
172
+ for (int32 label : label_set_lexicon.id_set(label_set_ids[i])) {
173
+ EXPECT_EQ(expected[i][j++], label);
174
+ }
175
+ }
176
+ }
177
+
178
+ TEST(S2PolylineLayer, InvalidPolyline) {
179
+ S2Builder builder{S2Builder::Options()};
180
+ S2Polyline output;
181
+ S2PolylineLayer::Options options;
182
+ options.set_validate(true);
183
+ builder.StartLayer(make_unique<S2PolylineLayer>(&output, options));
184
+ vector<S2Point> vertices;
185
+ vertices.push_back(S2Point(1, 0, 0));
186
+ vertices.push_back(S2Point(-1, 0, 0));
187
+ S2Polyline input(vertices, S2Debug::DISABLE);
188
+ builder.AddPolyline(input);
189
+ S2Error error;
190
+ EXPECT_FALSE(builder.Build(&error));
191
+ EXPECT_EQ(S2Error::ANTIPODAL_VERTICES, error.code());
192
+ }
193
+
194
+
195
+ TEST(IndexedS2PolylineLayer, AddsShape) {
196
+ S2Builder builder{S2Builder::Options()};
197
+ MutableS2ShapeIndex index;
198
+ builder.StartLayer(make_unique<IndexedS2PolylineLayer>(&index));
199
+ const string& polyline_str = "0:0, 0:10";
200
+ builder.AddPolyline(*MakePolylineOrDie(polyline_str));
201
+ S2Error error;
202
+ ASSERT_TRUE(builder.Build(&error));
203
+ EXPECT_EQ(1, index.num_shape_ids());
204
+ const S2Polyline* polyline = down_cast<const S2Polyline::Shape*>(
205
+ index.shape(0))->polyline();
206
+ EXPECT_EQ(polyline_str, s2textformat::ToString(*polyline));
207
+ }
208
+
209
+ TEST(IndexedS2PolylineLayer, AddsEmptyShape) {
210
+ S2Builder builder{S2Builder::Options()};
211
+ MutableS2ShapeIndex index;
212
+ builder.StartLayer(make_unique<IndexedS2PolylineLayer>(&index));
213
+ S2Polyline line;
214
+ builder.AddPolyline(line);
215
+ S2Error error;
216
+ ASSERT_TRUE(builder.Build(&error));
217
+ EXPECT_EQ(0, index.num_shape_ids());
218
+ }
219
+
220
+ } // namespace
@@ -0,0 +1,98 @@
1
+ // Copyright 2016 Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS-IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+
16
+ // Author: ericv@google.com (Eric Veach)
17
+
18
+ #include "s2/s2builderutil_s2polyline_vector_layer.h"
19
+
20
+ #include <memory>
21
+
22
+ using std::unique_ptr;
23
+ using std::vector;
24
+
25
+ using EdgeType = S2Builder::EdgeType;
26
+ using Graph = S2Builder::Graph;
27
+ using GraphOptions = S2Builder::GraphOptions;
28
+ using Label = S2Builder::Label;
29
+
30
+ using DegenerateEdges = GraphOptions::DegenerateEdges;
31
+ using DuplicateEdges = GraphOptions::DuplicateEdges;
32
+ using SiblingPairs = GraphOptions::SiblingPairs;
33
+
34
+ using EdgeId = Graph::EdgeId;
35
+
36
+ namespace s2builderutil {
37
+
38
+ S2PolylineVectorLayer::S2PolylineVectorLayer(
39
+ vector<unique_ptr<S2Polyline>>* polylines,
40
+ const S2PolylineVectorLayer::Options& options) {
41
+ Init(polylines, nullptr, nullptr, options);
42
+ }
43
+
44
+ S2PolylineVectorLayer::S2PolylineVectorLayer(
45
+ vector<unique_ptr<S2Polyline>>* polylines, LabelSetIds* label_set_ids,
46
+ IdSetLexicon* label_set_lexicon, const Options& options) {
47
+ Init(polylines, label_set_ids, label_set_lexicon, options);
48
+ }
49
+
50
+ void S2PolylineVectorLayer::Init(vector<unique_ptr<S2Polyline>>* polylines,
51
+ LabelSetIds* label_set_ids,
52
+ IdSetLexicon* label_set_lexicon,
53
+ const Options& options) {
54
+ S2_DCHECK_EQ(label_set_ids == nullptr, label_set_lexicon == nullptr);
55
+ polylines_ = polylines;
56
+ label_set_ids_ = label_set_ids;
57
+ label_set_lexicon_ = label_set_lexicon;
58
+ options_ = options;
59
+ }
60
+
61
+ GraphOptions S2PolylineVectorLayer::graph_options() const {
62
+ return GraphOptions(options_.edge_type(), DegenerateEdges::DISCARD,
63
+ options_.duplicate_edges(), options_.sibling_pairs());
64
+ }
65
+
66
+ void S2PolylineVectorLayer::Build(const Graph& g, S2Error* error) {
67
+ vector<Graph::EdgePolyline> edge_polylines = g.GetPolylines(
68
+ options_.polyline_type());
69
+ polylines_->reserve(edge_polylines.size());
70
+ if (label_set_ids_) label_set_ids_->reserve(edge_polylines.size());
71
+ vector<S2Point> vertices; // Temporary storage for vertices.
72
+ vector<Label> labels; // Temporary storage for labels.
73
+ for (const auto& edge_polyline : edge_polylines) {
74
+ vertices.push_back(g.vertex(g.edge(edge_polyline[0]).first));
75
+ for (EdgeId e : edge_polyline) {
76
+ vertices.push_back(g.vertex(g.edge(e).second));
77
+ }
78
+ S2Polyline* polyline = new S2Polyline(vertices,
79
+ options_.s2debug_override());
80
+ vertices.clear();
81
+ if (options_.validate()) {
82
+ polyline->FindValidationError(error);
83
+ }
84
+ polylines_->emplace_back(polyline);
85
+ if (label_set_ids_) {
86
+ Graph::LabelFetcher fetcher(g, options_.edge_type());
87
+ vector<LabelSetId> polyline_labels;
88
+ polyline_labels.reserve(edge_polyline.size());
89
+ for (EdgeId e : edge_polyline) {
90
+ fetcher.Fetch(e, &labels);
91
+ polyline_labels.push_back(label_set_lexicon_->Add(labels));
92
+ }
93
+ label_set_ids_->push_back(std::move(polyline_labels));
94
+ }
95
+ }
96
+ }
97
+
98
+ } // namespace s2builderutil
@@ -0,0 +1,292 @@
1
+ // Copyright 2016 Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS-IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+
16
+ // Author: ericv@google.com (Eric Veach)
17
+
18
+ #ifndef S2_S2BUILDERUTIL_S2POLYLINE_VECTOR_LAYER_H_
19
+ #define S2_S2BUILDERUTIL_S2POLYLINE_VECTOR_LAYER_H_
20
+
21
+ #include <memory>
22
+ #include <vector>
23
+ #include "s2/base/logging.h"
24
+ #include "s2/third_party/absl/memory/memory.h"
25
+ #include "s2/id_set_lexicon.h"
26
+ #include "s2/mutable_s2shape_index.h"
27
+ #include "s2/s2builder.h"
28
+ #include "s2/s2builder_graph.h"
29
+ #include "s2/s2builder_layer.h"
30
+ #include "s2/s2debug.h"
31
+ #include "s2/s2error.h"
32
+ #include "s2/s2polyline.h"
33
+
34
+ namespace s2builderutil {
35
+
36
+ // A layer type that assembles edges (directed or undirected) into multiple
37
+ // S2Polylines. Returns an error if S2Builder found any problem with the
38
+ // input edges; this layer type does not generate any errors of its own.
39
+ //
40
+ // Duplicate edges are handled correctly (e.g., if a polyline backtracks on
41
+ // itself, or loops around and retraces some of its previous edges.) The
42
+ // implementation attempts to preserve the order of the input edges whenever
43
+ // possible, so that if the input is a polyline and it is not modified by
44
+ // S2Builder, then the output will be the same polyline even if the polyline
45
+ // forms a loop. However, note that this is not guaranteed when undirected
46
+ // edges are used: for example, if the input consists of a single undirected
47
+ // edge, then either directed edge may be returned.
48
+ class S2PolylineVectorLayer : public S2Builder::Layer {
49
+ public:
50
+ class Options {
51
+ public:
52
+ // Constructor that uses the default options (listed below).
53
+ Options();
54
+
55
+ // Constructor that specifies the edge type.
56
+ explicit Options(S2Builder::EdgeType edge_type);
57
+
58
+ // Indicates whether the input edges provided to S2Builder are directed or
59
+ // undirected.
60
+ //
61
+ // Directed edges should be used whenever possible to avoid ambiguity.
62
+ // The implementation attempts to preserve the structure of directed input
63
+ // edges whenever possible, so that if the input is a vector of disjoint
64
+ // polylines and none of them need to be modified then the output will be
65
+ // the same polylines in the same order. With undirected edges, there are
66
+ // no such guarantees.
67
+ //
68
+ // DEFAULT: S2Builder::EdgeType::DIRECTED
69
+ S2Builder::EdgeType edge_type() const;
70
+ void set_edge_type(S2Builder::EdgeType edge_type);
71
+
72
+ // Indicates whether polylines should be "paths" (which don't allow
73
+ // duplicate vertices, except possibly the first and last vertex) or
74
+ // "walks" (which allow duplicate vertices and edges).
75
+ //
76
+ // If your input consists of polylines, and you want to split them into
77
+ // separate pieces whenever they self-intersect or cross each other, then
78
+ // use PolylineType::PATH (and probably use split_crossing_edges()). If
79
+ // you don't mind if your polylines backtrack or contain loops, then use
80
+ // PolylineType::WALK.
81
+ //
82
+ // DEFAULT: PolylineType::PATH
83
+ using PolylineType = S2Builder::Graph::PolylineType;
84
+ PolylineType polyline_type() const;
85
+ void set_polyline_type(PolylineType polyline_type);
86
+
87
+ // Indicates whether duplicate edges in the input should be kept (KEEP) or
88
+ // merged together (MERGE). Note you can use edge labels to determine
89
+ // which input edges were merged into a given output edge.
90
+ //
91
+ // DEFAULT: DuplicateEdges::KEEP
92
+ using DuplicateEdges = GraphOptions::DuplicateEdges;
93
+ DuplicateEdges duplicate_edges() const;
94
+ void set_duplicate_edges(DuplicateEdges duplicate_edges);
95
+
96
+ // Indicates whether sibling edge pairs (i.e., pairs consisting of an edge
97
+ // and its reverse edge) should be kept (KEEP) or discarded (DISCARD).
98
+ // For example, if a polyline backtracks on itself, the DISCARD option
99
+ // would cause this section of the polyline to be removed. Note that this
100
+ // option may cause a single polyline to split into several pieces (e.g.,
101
+ // if a polyline has a "lollipop" shape).
102
+ //
103
+ // REQUIRES: sibling_pairs == { DISCARD, KEEP }
104
+ // (the CREATE and REQUIRE options are not allowed)
105
+ //
106
+ // DEFAULT: SiblingPairs::KEEP
107
+ using SiblingPairs = GraphOptions::SiblingPairs;
108
+ SiblingPairs sibling_pairs() const;
109
+ void set_sibling_pairs(SiblingPairs sibling_pairs);
110
+
111
+ // If true, calls FindValidationError() on each output polyline. If any
112
+ // error is found, it will be returned by S2Builder::Build().
113
+ //
114
+ // Note that this option calls set_s2debug_override(S2Debug::DISABLE) in
115
+ // order to turn off the default error checking in debug builds.
116
+ //
117
+ // DEFAULT: false
118
+ bool validate() const;
119
+ void set_validate(bool validate);
120
+
121
+ // This method can turn off the automatic validity checks triggered by the
122
+ // --s2debug flag (which is on by default in debug builds). The main
123
+ // reason to do this is if your code already does its own error checking,
124
+ // or if you need to work with invalid geometry for some reason.
125
+ //
126
+ // In any case, polylines have very few restrictions so they are unlikely
127
+ // to have errors. Errors include vertices that aren't unit length (which
128
+ // can only happen if they are present in the input data), or adjacent
129
+ // vertices that are at antipodal points on the sphere (unlikely with real
130
+ // data). The other possible error is adjacent identical vertices, but
131
+ // this can't happen because S2Builder does not generate such polylines.
132
+ //
133
+ // DEFAULT: S2Debug::ALLOW
134
+ S2Debug s2debug_override() const;
135
+ void set_s2debug_override(S2Debug override);
136
+
137
+ private:
138
+ S2Builder::EdgeType edge_type_;
139
+ PolylineType polyline_type_;
140
+ DuplicateEdges duplicate_edges_;
141
+ SiblingPairs sibling_pairs_;
142
+ bool validate_;
143
+ S2Debug s2debug_override_;
144
+ };
145
+
146
+ // Specifies that a vector of polylines should be constructed using the
147
+ // given options.
148
+ explicit S2PolylineVectorLayer(
149
+ std::vector<std::unique_ptr<S2Polyline>>* polylines,
150
+ const Options& options = Options());
151
+
152
+ // Specifies that a vector of polylines should be constructed using the
153
+ // given options, and that any labels attached to the input edges should be
154
+ // returned in "label_set_ids" and "label_set_lexicion".
155
+ //
156
+ // The labels associated with the edge "polyline[i].vertex({j, j+1})" can be
157
+ // retrieved as follows:
158
+ //
159
+ // for (int32 label : label_set_lexicon.id_set(label_set_ids[i][j])) {...}
160
+ using LabelSetIds = std::vector<std::vector<LabelSetId>>;
161
+ S2PolylineVectorLayer(std::vector<std::unique_ptr<S2Polyline>>* polylines,
162
+ LabelSetIds* label_set_ids,
163
+ IdSetLexicon* label_set_lexicon,
164
+ const Options& options = Options());
165
+
166
+ // Layer interface:
167
+ GraphOptions graph_options() const override;
168
+ void Build(const Graph& g, S2Error* error) override;
169
+
170
+ private:
171
+ void Init(std::vector<std::unique_ptr<S2Polyline>>* polylines,
172
+ LabelSetIds* label_set_ids, IdSetLexicon* label_set_lexicon,
173
+ const Options& options);
174
+
175
+ std::vector<std::unique_ptr<S2Polyline>>* polylines_;
176
+ LabelSetIds* label_set_ids_;
177
+ IdSetLexicon* label_set_lexicon_;
178
+ Options options_;
179
+ };
180
+
181
+ // Like S2PolylineVectorLayer, but adds the polylines to a MutableS2ShapeIndex.
182
+ class IndexedS2PolylineVectorLayer : public S2Builder::Layer {
183
+ public:
184
+ using Options = S2PolylineVectorLayer::Options;
185
+ explicit IndexedS2PolylineVectorLayer(MutableS2ShapeIndex* index,
186
+ const Options& options = Options())
187
+ : index_(index), layer_(&polylines_, options) {}
188
+
189
+ GraphOptions graph_options() const override {
190
+ return layer_.graph_options();
191
+ }
192
+
193
+ void Build(const Graph& g, S2Error* error) override {
194
+ layer_.Build(g, error);
195
+ if (error->ok()) {
196
+ for (auto& polyline : polylines_) {
197
+ index_->Add(
198
+ absl::make_unique<S2Polyline::OwningShape>(std::move(polyline)));
199
+ }
200
+ }
201
+ }
202
+
203
+ private:
204
+ MutableS2ShapeIndex* index_;
205
+ std::vector<std::unique_ptr<S2Polyline>> polylines_;
206
+ S2PolylineVectorLayer layer_;
207
+ };
208
+
209
+
210
+ ////////////////// Implementation details follow ////////////////////
211
+
212
+
213
+ inline S2PolylineVectorLayer::Options::Options()
214
+ : edge_type_(S2Builder::EdgeType::DIRECTED),
215
+ polyline_type_(PolylineType::PATH),
216
+ duplicate_edges_(DuplicateEdges::KEEP),
217
+ sibling_pairs_(SiblingPairs::KEEP),
218
+ validate_(false),
219
+ s2debug_override_(S2Debug::ALLOW) {
220
+ }
221
+
222
+ inline S2PolylineVectorLayer::Options::Options(S2Builder::EdgeType edge_type)
223
+ : edge_type_(edge_type),
224
+ polyline_type_(PolylineType::PATH),
225
+ duplicate_edges_(DuplicateEdges::KEEP),
226
+ sibling_pairs_(SiblingPairs::KEEP),
227
+ validate_(false),
228
+ s2debug_override_(S2Debug::ALLOW) {
229
+ }
230
+
231
+ inline S2Builder::EdgeType S2PolylineVectorLayer::Options::edge_type() const {
232
+ return edge_type_;
233
+ }
234
+
235
+ inline void S2PolylineVectorLayer::Options::set_edge_type(
236
+ S2Builder::EdgeType edge_type) {
237
+ edge_type_ = edge_type;
238
+ }
239
+
240
+ inline S2PolylineVectorLayer::Options::PolylineType
241
+ S2PolylineVectorLayer::Options::polyline_type() const {
242
+ return polyline_type_;
243
+ }
244
+
245
+ inline void S2PolylineVectorLayer::Options::set_polyline_type(
246
+ PolylineType polyline_type) {
247
+ polyline_type_ = polyline_type;
248
+ }
249
+
250
+ inline S2PolylineVectorLayer::Options::DuplicateEdges
251
+ S2PolylineVectorLayer::Options::duplicate_edges() const {
252
+ return duplicate_edges_;
253
+ }
254
+
255
+ inline void S2PolylineVectorLayer::Options::set_duplicate_edges(
256
+ DuplicateEdges duplicate_edges) {
257
+ duplicate_edges_ = duplicate_edges;
258
+ }
259
+
260
+ inline S2PolylineVectorLayer::Options::SiblingPairs
261
+ S2PolylineVectorLayer::Options::sibling_pairs() const {
262
+ return sibling_pairs_;
263
+ }
264
+
265
+ inline void S2PolylineVectorLayer::Options::set_sibling_pairs(
266
+ SiblingPairs sibling_pairs) {
267
+ S2_DCHECK(sibling_pairs == SiblingPairs::KEEP ||
268
+ sibling_pairs == SiblingPairs::DISCARD);
269
+ sibling_pairs_ = sibling_pairs;
270
+ }
271
+
272
+ inline bool S2PolylineVectorLayer::Options::validate() const {
273
+ return validate_;
274
+ }
275
+
276
+ inline void S2PolylineVectorLayer::Options::set_validate(bool validate) {
277
+ validate_ = validate;
278
+ set_s2debug_override(S2Debug::DISABLE);
279
+ }
280
+
281
+ inline S2Debug S2PolylineVectorLayer::Options::s2debug_override() const {
282
+ return s2debug_override_;
283
+ }
284
+
285
+ inline void S2PolylineVectorLayer::Options::set_s2debug_override(
286
+ S2Debug s2debug_override) {
287
+ s2debug_override_ = s2debug_override;
288
+ }
289
+
290
+ } // namespace s2builderutil
291
+
292
+ #endif // S2_S2BUILDERUTIL_S2POLYLINE_VECTOR_LAYER_H_