@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,122 @@
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_S2POINT_VECTOR_LAYER_H_
19
+ #define S2_S2BUILDERUTIL_S2POINT_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/s2error.h"
31
+ #include "s2/s2point_vector_shape.h"
32
+
33
+ namespace s2builderutil {
34
+
35
+ // A layer type that collects degenerate edges as points.
36
+ // This layer expects all edges to be degenerate. In case of finding
37
+ // non-degenerate edges it sets S2Error but it still generates the
38
+ // output with degenerate edges.
39
+ class S2PointVectorLayer : public S2Builder::Layer {
40
+ public:
41
+ class Options {
42
+ public:
43
+ using DuplicateEdges = GraphOptions::DuplicateEdges;
44
+ Options();
45
+ explicit Options(DuplicateEdges duplicate_edges);
46
+
47
+ // DEFAULT: DuplicateEdges::MERGE
48
+ DuplicateEdges duplicate_edges() const;
49
+ void set_duplicate_edges(DuplicateEdges duplicate_edges);
50
+
51
+ private:
52
+ DuplicateEdges duplicate_edges_;
53
+ };
54
+
55
+ explicit S2PointVectorLayer(std::vector<S2Point>* points,
56
+ const Options& options = Options());
57
+
58
+ using LabelSetIds = std::vector<LabelSetId>;
59
+ S2PointVectorLayer(std::vector<S2Point>* points, LabelSetIds* label_set_ids,
60
+ IdSetLexicon* label_set_lexicon,
61
+ const Options& options = Options());
62
+
63
+ // Layer interface:
64
+ GraphOptions graph_options() const override;
65
+ void Build(const Graph& g, S2Error* error) override;
66
+
67
+ private:
68
+ std::vector<S2Point>* points_;
69
+ LabelSetIds* label_set_ids_;
70
+ IdSetLexicon* label_set_lexicon_;
71
+ Options options_;
72
+ };
73
+
74
+ // Like S2PointVectorLayer, but adds the points to a MutableS2ShapeIndex (if
75
+ // the point vector is non-empty).
76
+ class IndexedS2PointVectorLayer : public S2Builder::Layer {
77
+ public:
78
+ using Options = S2PointVectorLayer::Options;
79
+ explicit IndexedS2PointVectorLayer(MutableS2ShapeIndex* index,
80
+ const Options& options = Options())
81
+ : index_(index), layer_(&points_, options) {}
82
+
83
+ GraphOptions graph_options() const override {
84
+ return layer_.graph_options();
85
+ }
86
+
87
+ void Build(const Graph& g, S2Error* error) override {
88
+ layer_.Build(g, error);
89
+ if (error->ok() && !points_.empty()) {
90
+ index_->Add(absl::make_unique<S2PointVectorShape>(std::move(points_)));
91
+ }
92
+ }
93
+
94
+ private:
95
+ MutableS2ShapeIndex* index_;
96
+ std::vector<S2Point> points_;
97
+ S2PointVectorLayer layer_;
98
+ };
99
+
100
+
101
+ ////////////////// Implementation details follow ////////////////////
102
+
103
+
104
+ inline S2PointVectorLayer::Options::Options()
105
+ : duplicate_edges_(DuplicateEdges::MERGE) {}
106
+
107
+ inline S2PointVectorLayer::Options::Options(DuplicateEdges duplicate_edges)
108
+ : duplicate_edges_(duplicate_edges) {}
109
+
110
+ inline S2Builder::GraphOptions::DuplicateEdges
111
+ S2PointVectorLayer::Options::duplicate_edges() const {
112
+ return duplicate_edges_;
113
+ }
114
+
115
+ inline void S2PointVectorLayer::Options::set_duplicate_edges(
116
+ S2Builder::GraphOptions::DuplicateEdges duplicate_edges) {
117
+ duplicate_edges_ = duplicate_edges;
118
+ }
119
+
120
+ } // namespace s2builderutil
121
+
122
+ #endif // S2_S2BUILDERUTIL_S2POINT_VECTOR_LAYER_H_
@@ -0,0 +1,167 @@
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_s2point_vector_layer.h"
19
+
20
+ #include <memory>
21
+ #include <string>
22
+ #include "s2/base/casts.h"
23
+ #include "s2/base/integral_types.h"
24
+ #include <gtest/gtest.h>
25
+ #include "s2/third_party/absl/memory/memory.h"
26
+ #include "s2/mutable_s2shape_index.h"
27
+ #include "s2/s2text_format.h"
28
+
29
+ using absl::make_unique;
30
+ using s2builderutil::IndexedS2PointVectorLayer;
31
+ using s2builderutil::S2PointVectorLayer;
32
+ using s2textformat::MakePointOrDie;
33
+ using std::vector;
34
+
35
+ using EdgeType = S2Builder::EdgeType;
36
+
37
+ namespace {
38
+
39
+ void VerifyS2PointVectorLayerResults(
40
+ const S2PointVectorLayer::LabelSetIds& label_set_ids,
41
+ const IdSetLexicon& label_set_lexicon, const vector<S2Point>& output,
42
+ const string& str_expected_points,
43
+ const vector<vector<int32>>& expected_labels) {
44
+ vector<S2Point> expected_points =
45
+ s2textformat::ParsePoints(str_expected_points);
46
+
47
+ ASSERT_EQ(expected_labels.size(), label_set_ids.size());
48
+ for (int i = 0; i < output.size(); ++i) {
49
+ EXPECT_EQ(expected_points[i], output[i]);
50
+ ASSERT_EQ(expected_labels[i].size(),
51
+ label_set_lexicon.id_set(label_set_ids[i]).size());
52
+ int k = 0;
53
+ for (int32 label : label_set_lexicon.id_set(label_set_ids[i])) {
54
+ EXPECT_EQ(expected_labels[i][k++], label);
55
+ }
56
+ }
57
+ }
58
+
59
+ void AddPoint(S2Point p, S2Builder* builder) { builder->AddEdge(p, p); }
60
+
61
+ TEST(S2PointVectorLayer, MergeDuplicates) {
62
+ S2Builder builder{S2Builder::Options()};
63
+ vector<S2Point> output;
64
+ IdSetLexicon label_set_lexicon;
65
+ S2PointVectorLayer::LabelSetIds label_set_ids;
66
+ builder.StartLayer(make_unique<S2PointVectorLayer>(
67
+ &output, &label_set_ids, &label_set_lexicon,
68
+ S2PointVectorLayer::Options(
69
+ S2Builder::GraphOptions::DuplicateEdges::MERGE)));
70
+
71
+ builder.set_label(1);
72
+ AddPoint(MakePointOrDie("0:1"), &builder);
73
+ AddPoint(MakePointOrDie("0:2"), &builder);
74
+ builder.set_label(2);
75
+ AddPoint(MakePointOrDie("0:1"), &builder);
76
+ AddPoint(MakePointOrDie("0:4"), &builder);
77
+ AddPoint(MakePointOrDie("0:5"), &builder);
78
+ builder.clear_labels();
79
+ AddPoint(MakePointOrDie("0:5"), &builder);
80
+ AddPoint(MakePointOrDie("0:6"), &builder);
81
+ S2Error error;
82
+ ASSERT_TRUE(builder.Build(&error));
83
+
84
+ vector<vector<int32>> expected_labels = {{1, 2}, {1}, {2}, {2}, {}};
85
+ string expected_points = "0:1, 0:2, 0:4, 0:5, 0:6";
86
+
87
+ VerifyS2PointVectorLayerResults(label_set_ids, label_set_lexicon, output,
88
+ expected_points, expected_labels);
89
+ }
90
+
91
+ TEST(S2PointVectorLayer, KeepDuplicates) {
92
+ S2Builder builder{S2Builder::Options()};
93
+ vector<S2Point> output;
94
+ IdSetLexicon label_set_lexicon;
95
+ S2PointVectorLayer::LabelSetIds label_set_ids;
96
+ builder.StartLayer(make_unique<S2PointVectorLayer>(
97
+ &output, &label_set_ids, &label_set_lexicon,
98
+ S2PointVectorLayer::Options(
99
+ S2Builder::GraphOptions::DuplicateEdges::KEEP)));
100
+
101
+ builder.set_label(1);
102
+ AddPoint(MakePointOrDie("0:1"), &builder);
103
+ AddPoint(MakePointOrDie("0:2"), &builder);
104
+ builder.set_label(2);
105
+ AddPoint(MakePointOrDie("0:1"), &builder);
106
+ AddPoint(MakePointOrDie("0:4"), &builder);
107
+ AddPoint(MakePointOrDie("0:5"), &builder);
108
+ builder.clear_labels();
109
+ AddPoint(MakePointOrDie("0:5"), &builder);
110
+ AddPoint(MakePointOrDie("0:6"), &builder);
111
+ S2Error error;
112
+ ASSERT_TRUE(builder.Build(&error));
113
+
114
+ vector<vector<int32>> expected_labels = {{1}, {2}, {1}, {2}, {2}, {}, {}};
115
+ string expected_points = "0:1, 0:1, 0:2, 0:4, 0:5, 0:5, 0:6";
116
+
117
+ VerifyS2PointVectorLayerResults(label_set_ids, label_set_lexicon, output,
118
+ expected_points, expected_labels);
119
+ }
120
+
121
+ TEST(S2PointVectorLayer, Error) {
122
+ S2Builder builder{S2Builder::Options()};
123
+ vector<S2Point> output;
124
+ builder.StartLayer(make_unique<S2PointVectorLayer>(
125
+ &output, S2PointVectorLayer::Options(
126
+ S2Builder::GraphOptions::DuplicateEdges::KEEP)));
127
+
128
+ AddPoint(MakePointOrDie("0:1"), &builder);
129
+ builder.AddEdge(MakePointOrDie("0:3"), MakePointOrDie("0:4"));
130
+ AddPoint(MakePointOrDie("0:5"), &builder);
131
+ S2Error error;
132
+ EXPECT_FALSE(builder.Build(&error));
133
+ EXPECT_EQ(error.code(), S2Error::INVALID_ARGUMENT);
134
+ EXPECT_EQ(error.text(), "Found non-degenerate edges");
135
+
136
+ EXPECT_EQ(2, output.size());
137
+ EXPECT_EQ(MakePointOrDie("0:1"), output[0]);
138
+ EXPECT_EQ(MakePointOrDie("0:5"), output[1]);
139
+ }
140
+
141
+ TEST(IndexedS2PointVectorLayer, AddsShapes) {
142
+ S2Builder builder{S2Builder::Options()};
143
+ MutableS2ShapeIndex index;
144
+ builder.StartLayer(make_unique<IndexedS2PointVectorLayer>(&index));
145
+ string point0_str = "0:0";
146
+ string point1_str = "2:2";
147
+ builder.AddPoint(s2textformat::MakePointOrDie(point0_str));
148
+ builder.AddPoint(s2textformat::MakePointOrDie(point1_str));
149
+ S2Error error;
150
+ ASSERT_TRUE(builder.Build(&error));
151
+ EXPECT_EQ(1, index.num_shape_ids());
152
+ auto shape = down_cast<S2PointVectorShape*>(index.shape(0));
153
+ EXPECT_EQ(2, shape->num_points());
154
+ EXPECT_EQ(point0_str, s2textformat::ToString(shape->point(0)));
155
+ EXPECT_EQ(point1_str, s2textformat::ToString(shape->point(1)));
156
+ }
157
+
158
+ TEST(IndexedS2PointVectorLayer, AddsEmptyShape) {
159
+ S2Builder builder{S2Builder::Options()};
160
+ MutableS2ShapeIndex index;
161
+ builder.StartLayer(make_unique<IndexedS2PointVectorLayer>(&index));
162
+ S2Error error;
163
+ ASSERT_TRUE(builder.Build(&error));
164
+ EXPECT_EQ(0, index.num_shape_ids());
165
+ }
166
+
167
+ } // namespace
@@ -0,0 +1,191 @@
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_s2polygon_layer.h"
19
+
20
+ #include <algorithm>
21
+ #include <memory>
22
+ #include "s2/third_party/absl/memory/memory.h"
23
+ #include "s2/s2debug.h"
24
+
25
+ using absl::make_unique;
26
+ using std::make_pair;
27
+ using std::pair;
28
+ using std::unique_ptr;
29
+ using std::vector;
30
+
31
+ using EdgeType = S2Builder::EdgeType;
32
+ using Graph = S2Builder::Graph;
33
+ using GraphOptions = S2Builder::GraphOptions;
34
+ using Label = S2Builder::Label;
35
+
36
+ using DegenerateEdges = GraphOptions::DegenerateEdges;
37
+ using DuplicateEdges = GraphOptions::DuplicateEdges;
38
+ using SiblingPairs = GraphOptions::SiblingPairs;
39
+
40
+ using LoopType = Graph::LoopType;
41
+
42
+ namespace s2builderutil {
43
+
44
+ S2PolygonLayer::S2PolygonLayer(S2Polygon* polygon, const Options& options) {
45
+ Init(polygon, nullptr, nullptr, options);
46
+ }
47
+
48
+ S2PolygonLayer::S2PolygonLayer(
49
+ S2Polygon* polygon, LabelSetIds* label_set_ids,
50
+ IdSetLexicon* label_set_lexicon, const Options& options) {
51
+ Init(polygon, label_set_ids, label_set_lexicon, options);
52
+ }
53
+
54
+ void S2PolygonLayer::Init(
55
+ S2Polygon* polygon, LabelSetIds* label_set_ids,
56
+ IdSetLexicon* label_set_lexicon, const Options& options) {
57
+ S2_DCHECK_EQ(label_set_ids == nullptr, label_set_lexicon == nullptr);
58
+ polygon_ = polygon;
59
+ label_set_ids_ = label_set_ids;
60
+ label_set_lexicon_ = label_set_lexicon;
61
+ options_ = options;
62
+
63
+ if (options_.validate()) {
64
+ polygon_->set_s2debug_override(S2Debug::DISABLE);
65
+ }
66
+ }
67
+
68
+ GraphOptions S2PolygonLayer::graph_options() const {
69
+ // Prevent degenerate edges and sibling edge pairs. There should not be any
70
+ // duplicate edges if the input is valid, but if there are then we keep them
71
+ // since this tends to produce more comprehensible errors.
72
+ return GraphOptions(options_.edge_type(), DegenerateEdges::DISCARD,
73
+ DuplicateEdges::KEEP, SiblingPairs::DISCARD);
74
+ }
75
+
76
+ void S2PolygonLayer::AppendS2Loops(const Graph& g,
77
+ const vector<Graph::EdgeLoop>& edge_loops,
78
+ vector<unique_ptr<S2Loop>>* loops) const {
79
+ vector<S2Point> vertices;
80
+ for (const auto& edge_loop : edge_loops) {
81
+ vertices.reserve(edge_loop.size());
82
+ for (auto edge_id : edge_loop) {
83
+ vertices.push_back(g.vertex(g.edge(edge_id).first));
84
+ }
85
+ loops->push_back(
86
+ make_unique<S2Loop>(vertices, polygon_->s2debug_override()));
87
+ vertices.clear();
88
+ }
89
+ }
90
+
91
+ void S2PolygonLayer::AppendEdgeLabels(
92
+ const Graph& g,
93
+ const vector<Graph::EdgeLoop>& edge_loops) {
94
+ if (!label_set_ids_) return;
95
+
96
+ vector<Label> labels; // Temporary storage for labels.
97
+ Graph::LabelFetcher fetcher(g, options_.edge_type());
98
+ for (const auto& edge_loop : edge_loops) {
99
+ vector<LabelSetId> loop_label_set_ids;
100
+ loop_label_set_ids.reserve(edge_loop.size());
101
+ for (auto edge_id : edge_loop) {
102
+ fetcher.Fetch(edge_id, &labels);
103
+ loop_label_set_ids.push_back(label_set_lexicon_->Add(labels));
104
+ }
105
+ label_set_ids_->push_back(std::move(loop_label_set_ids));
106
+ }
107
+ }
108
+
109
+ void S2PolygonLayer::InitLoopMap(const vector<unique_ptr<S2Loop>>& loops,
110
+ LoopMap* loop_map) const {
111
+ if (!label_set_ids_) return;
112
+ for (const auto& loop : loops) {
113
+ (*loop_map)[&*loop] =
114
+ make_pair(&loop - &loops[0], loop->contains_origin());
115
+ }
116
+ }
117
+
118
+ void S2PolygonLayer::ReorderEdgeLabels(const LoopMap& loop_map) {
119
+ if (!label_set_ids_) return;
120
+ LabelSetIds new_ids(label_set_ids_->size());
121
+ for (int i = 0; i < polygon_->num_loops(); ++i) {
122
+ S2Loop* loop = polygon_->loop(i);
123
+ const pair<int, bool>& old = loop_map.find(loop)->second;
124
+ new_ids[i].swap((*label_set_ids_)[old.first]);
125
+ if (loop->contains_origin() != old.second) {
126
+ // S2Loop::Invert() reverses the order of the vertices, which leaves
127
+ // the last edge unchanged. For example, the loop ABCD (with edges
128
+ // AB, BC, CD, DA) becomes the loop DCBA (with edges DC, CB, BA, AD).
129
+ std::reverse(new_ids[i].begin(), new_ids[i].end() - 1);
130
+ }
131
+ }
132
+ label_set_ids_->swap(new_ids);
133
+ }
134
+
135
+ void S2PolygonLayer::Build(const Graph& g, S2Error* error) {
136
+ if (label_set_ids_) label_set_ids_->clear();
137
+
138
+ // It's tricky to compute the edge labels for S2Polygons because the
139
+ // S2Polygon::Init methods can reorder and/or invert the loops. We handle
140
+ // this by remembering the original vector index of each loop and whether or
141
+ // not the loop contained S2::Origin(). By comparing this with the final
142
+ // S2Polygon loops we can fix up the edge labels appropriately.
143
+ LoopMap loop_map;
144
+ if (g.num_edges() == 0) {
145
+ // The polygon is either full or empty.
146
+ if (g.IsFullPolygon(error)) {
147
+ polygon_->Init(make_unique<S2Loop>(S2Loop::kFull()));
148
+ } else {
149
+ polygon_->InitNested(vector<unique_ptr<S2Loop>>{});
150
+ }
151
+ } else if (g.options().edge_type() == EdgeType::DIRECTED) {
152
+ vector<Graph::EdgeLoop> edge_loops;
153
+ if (!g.GetDirectedLoops(LoopType::SIMPLE, &edge_loops, error)) {
154
+ return;
155
+ }
156
+ vector<unique_ptr<S2Loop>> loops;
157
+ AppendS2Loops(g, edge_loops, &loops);
158
+ AppendEdgeLabels(g, edge_loops);
159
+ vector<Graph::EdgeLoop>().swap(edge_loops); // Release memory
160
+ InitLoopMap(loops, &loop_map);
161
+ polygon_->InitOriented(std::move(loops));
162
+ } else {
163
+ vector<Graph::UndirectedComponent> components;
164
+ if (!g.GetUndirectedComponents(LoopType::SIMPLE, &components, error)) {
165
+ return;
166
+ }
167
+ // It doesn't really matter which complement of each component we use,
168
+ // since below we normalize all the loops so that they enclose at most
169
+ // half of the sphere (to ensure that the loops can always be nested).
170
+ //
171
+ // The only reason to prefer one over the other is that when there are
172
+ // multiple loops that touch, only one of the two complements matches the
173
+ // structure of the input loops. GetUndirectedComponents() tries to
174
+ // ensure that this is always complement 0 of each component.
175
+ vector<unique_ptr<S2Loop>> loops;
176
+ for (const auto& component : components) {
177
+ AppendS2Loops(g, component[0], &loops);
178
+ AppendEdgeLabels(g, component[0]);
179
+ }
180
+ vector<Graph::UndirectedComponent>().swap(components); // Release memory
181
+ InitLoopMap(loops, &loop_map);
182
+ for (const auto& loop : loops) loop->Normalize();
183
+ polygon_->InitNested(std::move(loops));
184
+ }
185
+ ReorderEdgeLabels(loop_map);
186
+ if (options_.validate()) {
187
+ polygon_->FindValidationError(error);
188
+ }
189
+ }
190
+
191
+ } // namespace s2builderutil
@@ -0,0 +1,211 @@
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
+ // Note that there are two supported output types for polygons: S2Polygon and
19
+ // S2LaxPolygonShape. Use S2Polygon if you need the full range of operations
20
+ // that S2Polygon implements. Use S2LaxPolygonShape if you want to represent
21
+ // polygons with zero-area degenerate regions, or if you need a type that has
22
+ // low memory overhead and fast initialization. However, be aware that to
23
+ // convert from a S2LaxPolygonShape to an S2Polygon you will need to use
24
+ // S2Builder again.
25
+ //
26
+ // Similarly, there are two supported output formats for polygon meshes:
27
+ // S2LaxPolygonShapeVector and S2PolygonMesh. Use S2PolygonMesh if you need
28
+ // to be able to determine which polygons are adjacent to each edge or vertex;
29
+ // otherwise use S2LaxPolygonShapeVector, which uses less memory and is faster
30
+ // to construct.
31
+
32
+ #ifndef S2_S2BUILDERUTIL_S2POLYGON_LAYER_H_
33
+ #define S2_S2BUILDERUTIL_S2POLYGON_LAYER_H_
34
+
35
+ #include <memory>
36
+ #include <utility>
37
+ #include <vector>
38
+ #include "s2/base/logging.h"
39
+ #include "s2/util/gtl/btree_map.h"
40
+ #include "s2/third_party/absl/memory/memory.h"
41
+ #include "s2/id_set_lexicon.h"
42
+ #include "s2/mutable_s2shape_index.h"
43
+ #include "s2/s2builder.h"
44
+ #include "s2/s2builder_graph.h"
45
+ #include "s2/s2builder_layer.h"
46
+ #include "s2/s2error.h"
47
+ #include "s2/s2loop.h"
48
+ #include "s2/s2polygon.h"
49
+
50
+ namespace s2builderutil {
51
+
52
+ // A layer type that assembles edges (directed or undirected) into an
53
+ // S2Polygon. Returns an error if the edges cannot be assembled into loops.
54
+ //
55
+ // If the input edges are directed, they must be oriented such that the
56
+ // polygon interior is to the left of all edges. Directed edges are always
57
+ // preferred (see S2Builder::EdgeType).
58
+ //
59
+ // Before the edges are assembled into loops, "sibling pairs" consisting of an
60
+ // edge and its reverse edge are automatically removed. Such edge pairs
61
+ // represent zero-area degenerate regions, which S2Polygon does not allow.
62
+ // (If you need to build polygons with degeneracies, use LaxPolygonLayer
63
+ // instead.)
64
+ //
65
+ // S2PolygonLayer is implemented such that if the input to S2Builder is a
66
+ // polygon and is not modified, then the output has the same cyclic ordering
67
+ // of loop vertices and the same loop ordering as the input polygon.
68
+ //
69
+ // If the polygon has no edges, then the graph's IsFullPolygonPredicate is
70
+ // called to determine whether the output polygon should be empty (containing
71
+ // no points) or full (containing all points). This predicate can be
72
+ // specified as part of the S2Builder input geometry.
73
+ class S2PolygonLayer : public S2Builder::Layer {
74
+ public:
75
+ class Options {
76
+ public:
77
+ // Constructor that uses the default options (listed below).
78
+ Options();
79
+
80
+ // Constructor that specifies the edge type.
81
+ explicit Options(S2Builder::EdgeType edge_type);
82
+
83
+ // Indicates whether the input edges provided to S2Builder are directed or
84
+ // undirected. Directed edges should be used whenever possible (see
85
+ // S2Builder::EdgeType for details).
86
+ //
87
+ // If the input edges are directed, they should be oriented so that the
88
+ // polygon interior is to the left of all edges. This means that for a
89
+ // polygon with holes, the outer loops ("shells") should be directed
90
+ // counter-clockwise while the inner loops ("holes") should be directed
91
+ // clockwise. Note that S2Builder::AddPolygon() does this automatically.
92
+ //
93
+ // DEFAULT: S2Builder::EdgeType::DIRECTED
94
+ S2Builder::EdgeType edge_type() const;
95
+ void set_edge_type(S2Builder::EdgeType edge_type);
96
+
97
+ // If true, calls FindValidationError() on the output polygon. If any
98
+ // error is found, it will be returned by S2Builder::Build().
99
+ //
100
+ // Note that this option calls set_s2debug_override(S2Debug::DISABLE) in
101
+ // order to turn off the default error checking in debug builds.
102
+ //
103
+ // DEFAULT: false
104
+ bool validate() const;
105
+ void set_validate(bool validate);
106
+
107
+ private:
108
+ S2Builder::EdgeType edge_type_;
109
+ bool validate_;
110
+ };
111
+
112
+ // Specifies that a polygon should be constructed using the given options.
113
+ explicit S2PolygonLayer(S2Polygon* polygon,
114
+ const Options& options = Options());
115
+
116
+ // Specifies that a polygon should be constructed using the given options,
117
+ // and that any labels attached to the input edges should be returned in
118
+ // "label_set_ids" and "label_set_lexicion".
119
+ //
120
+ // The labels associated with the edge "polygon.loop(i).vertex({j, j+1})"
121
+ // can be retrieved as follows:
122
+ //
123
+ // for (int32 label : label_set_lexicon.id_set(label_set_ids[i][j])) {...}
124
+ using LabelSetIds = std::vector<std::vector<LabelSetId>>;
125
+ S2PolygonLayer(S2Polygon* polygon, LabelSetIds* label_set_ids,
126
+ IdSetLexicon* label_set_lexicon,
127
+ const Options& options = Options());
128
+
129
+ // Layer interface:
130
+ GraphOptions graph_options() const override;
131
+ void Build(const Graph& g, S2Error* error) override;
132
+
133
+ private:
134
+ void Init(S2Polygon* polygon, LabelSetIds* label_set_ids,
135
+ IdSetLexicon* label_set_lexicon, const Options& options);
136
+ void AppendS2Loops(const Graph& g,
137
+ const std::vector<Graph::EdgeLoop>& edge_loops,
138
+ std::vector<std::unique_ptr<S2Loop>>* loops) const;
139
+ void AppendEdgeLabels(const Graph& g,
140
+ const std::vector<Graph::EdgeLoop>& edge_loops);
141
+ using LoopMap = gtl::btree_map<S2Loop*, std::pair<int, bool>>;
142
+ void InitLoopMap(const std::vector<std::unique_ptr<S2Loop>>& loops,
143
+ LoopMap* loop_map) const;
144
+ void ReorderEdgeLabels(const LoopMap& loop_map);
145
+
146
+ S2Polygon* polygon_;
147
+ LabelSetIds* label_set_ids_;
148
+ IdSetLexicon* label_set_lexicon_;
149
+ Options options_;
150
+ };
151
+
152
+ // Like S2PolygonLayer, but adds the polygon to a MutableS2ShapeIndex (if the
153
+ // polygon is non-empty).
154
+ class IndexedS2PolygonLayer : public S2Builder::Layer {
155
+ public:
156
+ using Options = S2PolygonLayer::Options;
157
+ explicit IndexedS2PolygonLayer(MutableS2ShapeIndex* index,
158
+ const Options& options = Options())
159
+ : index_(index), polygon_(new S2Polygon),
160
+ layer_(polygon_.get(), options) {}
161
+
162
+ GraphOptions graph_options() const override {
163
+ return layer_.graph_options();
164
+ }
165
+
166
+ void Build(const Graph& g, S2Error* error) override {
167
+ layer_.Build(g, error);
168
+ if (error->ok() && !polygon_->is_empty()) {
169
+ index_->Add(
170
+ absl::make_unique<S2Polygon::OwningShape>(std::move(polygon_)));
171
+ }
172
+ }
173
+
174
+ private:
175
+ MutableS2ShapeIndex* index_;
176
+ std::unique_ptr<S2Polygon> polygon_;
177
+ S2PolygonLayer layer_;
178
+ };
179
+
180
+
181
+ ////////////////// Implementation details follow ////////////////////
182
+
183
+
184
+ inline S2PolygonLayer::Options::Options()
185
+ : edge_type_(S2Builder::EdgeType::DIRECTED), validate_(false) {
186
+ }
187
+
188
+ inline S2PolygonLayer::Options::Options(S2Builder::EdgeType edge_type)
189
+ : edge_type_(edge_type), validate_(false) {
190
+ }
191
+
192
+ inline S2Builder::EdgeType S2PolygonLayer::Options::edge_type() const {
193
+ return edge_type_;
194
+ }
195
+
196
+ inline void S2PolygonLayer::Options::set_edge_type(
197
+ S2Builder::EdgeType edge_type) {
198
+ edge_type_ = edge_type;
199
+ }
200
+
201
+ inline bool S2PolygonLayer::Options::validate() const {
202
+ return validate_;
203
+ }
204
+
205
+ inline void S2PolygonLayer::Options::set_validate(bool validate) {
206
+ validate_ = validate;
207
+ }
208
+
209
+ } // namespace s2builderutil
210
+
211
+ #endif // S2_S2BUILDERUTIL_S2POLYGON_LAYER_H_