@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,459 @@
1
+ // Copyright 2005 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
+ // This file contains documentation of the various coordinate systems used
19
+ // throughout the library. Most importantly, S2 defines a framework for
20
+ // decomposing the unit sphere into a hierarchy of "cells". Each cell is a
21
+ // quadrilateral bounded by four geodesics. The top level of the hierarchy is
22
+ // obtained by projecting the six faces of a cube onto the unit sphere, and
23
+ // lower levels are obtained by subdividing each cell into four children
24
+ // recursively. Cells are numbered such that sequentially increasing cells
25
+ // follow a continuous space-filling curve over the entire sphere. The
26
+ // transformation is designed to make the cells at each level fairly uniform
27
+ // in size.
28
+ //
29
+ //
30
+ ////////////////////////// S2Cell Decomposition /////////////////////////
31
+ //
32
+ // The following methods define the cube-to-sphere projection used by
33
+ // the S2Cell decomposition.
34
+ //
35
+ // In the process of converting a latitude-longitude pair to a 64-bit cell
36
+ // id, the following coordinate systems are used:
37
+ //
38
+ // (id)
39
+ // An S2CellId is a 64-bit encoding of a face and a Hilbert curve position
40
+ // on that face. The Hilbert curve position implicitly encodes both the
41
+ // position of a cell and its subdivision level (see s2cell_id.h).
42
+ //
43
+ // (face, i, j)
44
+ // Leaf-cell coordinates. "i" and "j" are integers in the range
45
+ // [0,(2**30)-1] that identify a particular leaf cell on the given face.
46
+ // The (i, j) coordinate system is right-handed on each face, and the
47
+ // faces are oriented such that Hilbert curves connect continuously from
48
+ // one face to the next.
49
+ //
50
+ // (face, s, t)
51
+ // Cell-space coordinates. "s" and "t" are real numbers in the range
52
+ // [0,1] that identify a point on the given face. For example, the point
53
+ // (s, t) = (0.5, 0.5) corresponds to the center of the top-level face
54
+ // cell. This point is also a vertex of exactly four cells at each
55
+ // subdivision level greater than zero.
56
+ //
57
+ // (face, si, ti)
58
+ // Discrete cell-space coordinates. These are obtained by multiplying
59
+ // "s" and "t" by 2**31 and rounding to the nearest unsigned integer.
60
+ // Discrete coordinates lie in the range [0,2**31]. This coordinate
61
+ // system can represent the edge and center positions of all cells with
62
+ // no loss of precision (including non-leaf cells). In binary, each
63
+ // coordinate of a level-k cell center ends with a 1 followed by
64
+ // (30 - k) 0s. The coordinates of its edges end with (at least)
65
+ // (31 - k) 0s.
66
+ //
67
+ // (face, u, v)
68
+ // Cube-space coordinates in the range [-1,1]. To make the cells at each
69
+ // level more uniform in size after they are projected onto the sphere,
70
+ // we apply a nonlinear transformation of the form u=f(s), v=f(t).
71
+ // The (u, v) coordinates after this transformation give the actual
72
+ // coordinates on the cube face (modulo some 90 degree rotations) before
73
+ // it is projected onto the unit sphere.
74
+ //
75
+ // (face, u, v, w)
76
+ // Per-face coordinate frame. This is an extension of the (face, u, v)
77
+ // cube-space coordinates that adds a third axis "w" in the direction of
78
+ // the face normal. It is always a right-handed 3D coordinate system.
79
+ // Cube-space coordinates can be converted to this frame by setting w=1,
80
+ // while (u,v,w) coordinates can be projected onto the cube face by
81
+ // dividing by w, i.e. (face, u/w, v/w).
82
+ //
83
+ // (x, y, z)
84
+ // Direction vector (S2Point). Direction vectors are not necessarily unit
85
+ // length, and are often chosen to be points on the biunit cube
86
+ // [-1,+1]x[-1,+1]x[-1,+1]. They can be be normalized to obtain the
87
+ // corresponding point on the unit sphere.
88
+ //
89
+ // (lat, lng)
90
+ // Latitude and longitude (S2LatLng). Latitudes must be between -90 and
91
+ // 90 degrees inclusive, and longitudes must be between -180 and 180
92
+ // degrees inclusive.
93
+ //
94
+ // Note that the (i, j), (s, t), (si, ti), and (u, v) coordinate systems are
95
+ // right-handed on all six faces.
96
+
97
+ #ifndef S2_S2COORDS_H_
98
+ #define S2_S2COORDS_H_
99
+
100
+ #include <algorithm>
101
+ #include <cmath>
102
+
103
+ #include "s2/base/integral_types.h"
104
+ #include "s2/base/logging.h"
105
+ #include "s2/r2.h"
106
+ #include "s2/s2coords_internal.h"
107
+ #include "s2/s2point.h"
108
+ #include "s2/util/math/mathutil.h"
109
+
110
+ // S2 is a namespace for constants and simple utility functions that are used
111
+ // throughout the S2 library. The name "S2" is derived from the mathematical
112
+ // symbol for the two-dimensional unit sphere (note that the "2" refers to the
113
+ // dimension of the surface, not the space it is embedded in).
114
+ namespace S2 {
115
+
116
+ // This is the number of levels needed to specify a leaf cell. This
117
+ // constant is defined here so that the S2::Metric class and the conversion
118
+ // functions below can be implemented without including s2cell_id.h. Please
119
+ // see s2cell_id.h for other useful constants and conversion functions.
120
+ const int kMaxCellLevel = 30;
121
+
122
+ // The maximum index of a valid leaf cell plus one. The range of valid leaf
123
+ // cell indices is [0..kLimitIJ-1].
124
+ const int kLimitIJ = 1 << kMaxCellLevel; // == S2CellId::kMaxSize
125
+
126
+ // The maximum value of an si- or ti-coordinate. The range of valid (si,ti)
127
+ // values is [0..kMaxSiTi].
128
+ unsigned const int kMaxSiTi = 1U << (kMaxCellLevel + 1);
129
+
130
+ // Convert an s- or t-value to the corresponding u- or v-value. This is
131
+ // a non-linear transformation from [-1,1] to [-1,1] that attempts to
132
+ // make the cell sizes more uniform.
133
+ double STtoUV(double s);
134
+
135
+ // The inverse of the STtoUV transformation. Note that it is not always
136
+ // true that UVtoST(STtoUV(x)) == x due to numerical errors.
137
+ double UVtoST(double u);
138
+
139
+ // Convert the i- or j-index of a leaf cell to the minimum corresponding s-
140
+ // or t-value contained by that cell. The argument must be in the range
141
+ // [0..2**30], i.e. up to one position beyond the normal range of valid leaf
142
+ // cell indices.
143
+ double IJtoSTMin(int i);
144
+
145
+ // Return the i- or j-index of the leaf cell containing the given
146
+ // s- or t-value. If the argument is outside the range spanned by valid
147
+ // leaf cell indices, return the index of the closest valid leaf cell (i.e.,
148
+ // return values are clamped to the range of valid leaf cell indices).
149
+ int STtoIJ(double s);
150
+
151
+ // Convert an si- or ti-value to the corresponding s- or t-value.
152
+ double SiTitoST(unsigned int si);
153
+
154
+ // Return the si- or ti-coordinate that is nearest to the given s- or
155
+ // t-value. The result may be outside the range of valid (si,ti)-values.
156
+ unsigned int STtoSiTi(double s);
157
+
158
+ // Convert (face, u, v) coordinates to a direction vector (not
159
+ // necessarily unit length).
160
+ S2Point FaceUVtoXYZ(int face, double u, double v);
161
+ S2Point FaceUVtoXYZ(int face, const R2Point& uv);
162
+
163
+ // If the dot product of p with the given face normal is positive,
164
+ // set the corresponding u and v values (which may lie outside the range
165
+ // [-1,1]) and return true. Otherwise return false.
166
+ bool FaceXYZtoUV(int face, const S2Point& p,
167
+ double* pu, double* pv);
168
+ bool FaceXYZtoUV(int face, const S2Point& p, R2Point* puv);
169
+
170
+ // Given a *valid* face for the given point p (meaning that dot product
171
+ // of p with the face normal is positive), return the corresponding
172
+ // u and v values (which may lie outside the range [-1,1]).
173
+ void ValidFaceXYZtoUV(int face, const S2Point& p,
174
+ double* pu, double* pv);
175
+ void ValidFaceXYZtoUV(int face, const S2Point& p, R2Point* puv);
176
+
177
+ // Transform the given point P to the (u,v,w) coordinate frame of the given
178
+ // face (where the w-axis represents the face normal).
179
+ S2Point FaceXYZtoUVW(int face, const S2Point& p);
180
+
181
+ // Return the face containing the given direction vector. (For points on
182
+ // the boundary between faces, the result is arbitrary but repeatable.)
183
+ int GetFace(const S2Point& p);
184
+
185
+ // Convert a direction vector (not necessarily unit length) to
186
+ // (face, u, v) coordinates.
187
+ int XYZtoFaceUV(const S2Point& p, double* pu, double* pv);
188
+ int XYZtoFaceUV(const S2Point& p, R2Point* puv);
189
+
190
+ // Convert a direction vector (not necessarily unit length) to
191
+ // (face, si, ti) coordinates and, if p is exactly equal to the center of a
192
+ // cell, return the level of this cell (-1 otherwise).
193
+ int XYZtoFaceSiTi(const S2Point& p, int* face,
194
+ unsigned int* si, unsigned int* ti);
195
+
196
+ // Convert (face, si, ti) coordinates to a direction vector (not necessarily
197
+ // unit length).
198
+ S2Point FaceSiTitoXYZ(int face, unsigned int si, unsigned int ti);
199
+
200
+ // Return the right-handed normal (not necessarily unit length) for an
201
+ // edge in the direction of the positive v-axis at the given u-value on
202
+ // the given face. (This vector is perpendicular to the plane through
203
+ // the sphere origin that contains the given edge.)
204
+ S2Point GetUNorm(int face, double u);
205
+
206
+ // Return the right-handed normal (not necessarily unit length) for an
207
+ // edge in the direction of the positive u-axis at the given v-value on
208
+ // the given face.
209
+ S2Point GetVNorm(int face, double v);
210
+
211
+ // Return the unit-length normal, u-axis, or v-axis for the given face.
212
+ S2Point GetNorm(int face);
213
+ S2Point GetUAxis(int face);
214
+ S2Point GetVAxis(int face);
215
+
216
+ // Return the given axis of the given face (u=0, v=1, w=2).
217
+ S2Point GetUVWAxis(int face, int axis);
218
+
219
+ // With respect to the (u,v,w) coordinate system of a given face, return the
220
+ // face that lies in the given direction (negative=0, positive=1) of the
221
+ // given axis (u=0, v=1, w=2). For example, GetUVWFace(4, 0, 1) returns the
222
+ // face that is adjacent to face 4 in the positive u-axis direction.
223
+ int GetUVWFace(int face, int axis, int direction);
224
+
225
+
226
+ ////////////////// Implementation details follow ////////////////////
227
+
228
+
229
+ // We have implemented three different projections from cell-space (s,t) to
230
+ // cube-space (u,v): linear, quadratic, and tangent. They have the following
231
+ // tradeoffs:
232
+ //
233
+ // Linear - This is the fastest transformation, but also produces the least
234
+ // uniform cell sizes. Cell areas vary by a factor of about 5.2, with the
235
+ // largest cells at the center of each face and the smallest cells in
236
+ // the corners.
237
+ //
238
+ // Tangent - Transforming the coordinates via atan() makes the cell sizes
239
+ // more uniform. The areas vary by a maximum ratio of 1.4 as opposed to a
240
+ // maximum ratio of 5.2. However, each call to atan() is about as expensive
241
+ // as all of the other calculations combined when converting from points to
242
+ // cell ids, i.e. it reduces performance by a factor of 3.
243
+ //
244
+ // Quadratic - This is an approximation of the tangent projection that
245
+ // is much faster and produces cells that are almost as uniform in size.
246
+ // It is about 3 times faster than the tangent projection for converting
247
+ // cell ids to points or vice versa. Cell areas vary by a maximum ratio of
248
+ // about 2.1.
249
+ //
250
+ // Here is a table comparing the cell uniformity using each projection. "Area
251
+ // ratio" is the maximum ratio over all subdivision levels of the largest cell
252
+ // area to the smallest cell area at that level, "edge ratio" is the maximum
253
+ // ratio of the longest edge of any cell to the shortest edge of any cell at
254
+ // the same level, and "diag ratio" is the ratio of the longest diagonal of
255
+ // any cell to the shortest diagonal of any cell at the same level. "ToPoint"
256
+ // and "FromPoint" are the times in microseconds required to convert cell ids
257
+ // to and from points (unit vectors) respectively. "ToPointRaw" is the time
258
+ // to convert to a non-unit-length vector, which is all that is needed for
259
+ // some purposes.
260
+ //
261
+ // Area Edge Diag ToPointRaw ToPoint FromPoint
262
+ // Ratio Ratio Ratio (microseconds)
263
+ // -------------------------------------------------------------------
264
+ // Linear: 5.200 2.117 2.959 0.020 0.087 0.085
265
+ // Tangent: 1.414 1.414 1.704 0.237 0.299 0.258
266
+ // Quadratic: 2.082 1.802 1.932 0.033 0.096 0.108
267
+ //
268
+ // The worst-case cell aspect ratios are about the same with all three
269
+ // projections. The maximum ratio of the longest edge to the shortest edge
270
+ // within the same cell is about 1.4 and the maximum ratio of the diagonals
271
+ // within the same cell is about 1.7.
272
+ //
273
+ // This data was produced using s2cell_test and s2cell_id_test.
274
+
275
+ #define S2_LINEAR_PROJECTION 0
276
+ #define S2_TAN_PROJECTION 1
277
+ #define S2_QUADRATIC_PROJECTION 2
278
+
279
+ #define S2_PROJECTION S2_QUADRATIC_PROJECTION
280
+
281
+ #if S2_PROJECTION == S2_LINEAR_PROJECTION
282
+
283
+ inline double STtoUV(double s) {
284
+ return 2 * s - 1;
285
+ }
286
+
287
+ inline double UVtoST(double u) {
288
+ return 0.5 * (u + 1);
289
+ }
290
+
291
+ #elif S2_PROJECTION == S2_TAN_PROJECTION
292
+
293
+ inline double STtoUV(double s) {
294
+ // Unfortunately, tan(M_PI_4) is slightly less than 1.0. This isn't due to
295
+ // a flaw in the implementation of tan(), it's because the derivative of
296
+ // tan(x) at x=pi/4 is 2, and it happens that the two adjacent floating
297
+ // point numbers on either side of the infinite-precision value of pi/4 have
298
+ // tangents that are slightly below and slightly above 1.0 when rounded to
299
+ // the nearest double-precision result.
300
+
301
+ s = std::tan(M_PI_2 * s - M_PI_4);
302
+ return s + (1.0 / (int64{1} << 53)) * s;
303
+ }
304
+
305
+ inline double UVtoST(double u) {
306
+ volatile double a = std::atan(u);
307
+ return (2 * M_1_PI) * (a + M_PI_4);
308
+ }
309
+
310
+ #elif S2_PROJECTION == S2_QUADRATIC_PROJECTION
311
+
312
+ inline double STtoUV(double s) {
313
+ if (s >= 0.5) return (1/3.) * (4*s*s - 1);
314
+ else return (1/3.) * (1 - 4*(1-s)*(1-s));
315
+ }
316
+
317
+ inline double UVtoST(double u) {
318
+ if (u >= 0) return 0.5 * std::sqrt(1 + 3*u);
319
+ else return 1 - 0.5 * std::sqrt(1 - 3*u);
320
+ }
321
+
322
+ #else
323
+
324
+ #error Unknown value for S2_PROJECTION
325
+
326
+ #endif
327
+
328
+ inline double IJtoSTMin(int i) {
329
+ S2_DCHECK(i >= 0 && i <= kLimitIJ);
330
+ return (1.0 / kLimitIJ) * i;
331
+ }
332
+
333
+ inline int STtoIJ(double s) {
334
+ return std::max(0, std::min(kLimitIJ - 1,
335
+ MathUtil::FastIntRound(kLimitIJ * s - 0.5)));
336
+ }
337
+
338
+ inline double SiTitoST(unsigned int si) {
339
+ S2_DCHECK_LE(si, kMaxSiTi);
340
+ return (1.0 / kMaxSiTi) * si;
341
+ }
342
+
343
+ inline unsigned int STtoSiTi(double s) {
344
+ // kMaxSiTi == 2^31, so the result doesn't fit in an int32 when s == 1.
345
+ return static_cast<unsigned int>(MathUtil::FastInt64Round(s * kMaxSiTi));
346
+ }
347
+
348
+ inline S2Point FaceUVtoXYZ(int face, double u, double v) {
349
+ switch (face) {
350
+ case 0: return S2Point( 1, u, v);
351
+ case 1: return S2Point(-u, 1, v);
352
+ case 2: return S2Point(-u, -v, 1);
353
+ case 3: return S2Point(-1, -v, -u);
354
+ case 4: return S2Point( v, -1, -u);
355
+ default: return S2Point( v, u, -1);
356
+ }
357
+ }
358
+
359
+ inline S2Point FaceUVtoXYZ(int face, const R2Point& uv) {
360
+ return FaceUVtoXYZ(face, uv[0], uv[1]);
361
+ }
362
+
363
+ inline void ValidFaceXYZtoUV(int face, const S2Point& p,
364
+ double* pu, double* pv) {
365
+ S2_DCHECK_GT(p.DotProd(GetNorm(face)), 0);
366
+ switch (face) {
367
+ case 0: *pu = p[1] / p[0]; *pv = p[2] / p[0]; break;
368
+ case 1: *pu = -p[0] / p[1]; *pv = p[2] / p[1]; break;
369
+ case 2: *pu = -p[0] / p[2]; *pv = -p[1] / p[2]; break;
370
+ case 3: *pu = p[2] / p[0]; *pv = p[1] / p[0]; break;
371
+ case 4: *pu = p[2] / p[1]; *pv = -p[0] / p[1]; break;
372
+ default: *pu = -p[1] / p[2]; *pv = -p[0] / p[2]; break;
373
+ }
374
+ }
375
+
376
+ inline void ValidFaceXYZtoUV(int face, const S2Point& p, R2Point* puv) {
377
+ ValidFaceXYZtoUV(face, p, &(*puv)[0], &(*puv)[1]);
378
+ }
379
+
380
+ inline int GetFace(const S2Point& p) {
381
+ int face = p.LargestAbsComponent();
382
+ if (p[face] < 0) face += 3;
383
+ return face;
384
+ }
385
+
386
+ inline int XYZtoFaceUV(const S2Point& p, double* pu, double* pv) {
387
+ int face = GetFace(p);
388
+ ValidFaceXYZtoUV(face, p, pu, pv);
389
+ return face;
390
+ }
391
+
392
+ inline int XYZtoFaceUV(const S2Point& p, R2Point* puv) {
393
+ return XYZtoFaceUV(p, &(*puv)[0], &(*puv)[1]);
394
+ }
395
+
396
+ inline bool FaceXYZtoUV(int face, const S2Point& p,
397
+ double* pu, double* pv) {
398
+ if (face < 3) {
399
+ if (p[face] <= 0) return false;
400
+ } else {
401
+ if (p[face-3] >= 0) return false;
402
+ }
403
+ ValidFaceXYZtoUV(face, p, pu, pv);
404
+ return true;
405
+ }
406
+
407
+ inline bool FaceXYZtoUV(int face, const S2Point& p, R2Point* puv) {
408
+ return FaceXYZtoUV(face, p, &(*puv)[0], &(*puv)[1]);
409
+ }
410
+
411
+ inline S2Point GetUNorm(int face, double u) {
412
+ switch (face) {
413
+ case 0: return S2Point( u, -1, 0);
414
+ case 1: return S2Point( 1, u, 0);
415
+ case 2: return S2Point( 1, 0, u);
416
+ case 3: return S2Point(-u, 0, 1);
417
+ case 4: return S2Point( 0, -u, 1);
418
+ default: return S2Point( 0, -1, -u);
419
+ }
420
+ }
421
+
422
+ inline S2Point GetVNorm(int face, double v) {
423
+ switch (face) {
424
+ case 0: return S2Point(-v, 0, 1);
425
+ case 1: return S2Point( 0, -v, 1);
426
+ case 2: return S2Point( 0, -1, -v);
427
+ case 3: return S2Point( v, -1, 0);
428
+ case 4: return S2Point( 1, v, 0);
429
+ default: return S2Point( 1, 0, v);
430
+ }
431
+ }
432
+
433
+ inline S2Point GetNorm(int face) {
434
+ return GetUVWAxis(face, 2);
435
+ }
436
+
437
+ inline S2Point GetUAxis(int face) {
438
+ return GetUVWAxis(face, 0);
439
+ }
440
+
441
+ inline S2Point GetVAxis(int face) {
442
+ return GetUVWAxis(face, 1);
443
+ }
444
+
445
+ inline S2Point GetUVWAxis(int face, int axis) {
446
+ const double* p = internal::kFaceUVWAxes[face][axis];
447
+ return S2Point(p[0], p[1], p[2]);
448
+ }
449
+
450
+ inline int GetUVWFace(int face, int axis, int direction) {
451
+ S2_DCHECK(face >= 0 && face <= 5);
452
+ S2_DCHECK(axis >= 0 && axis <= 2);
453
+ S2_DCHECK(direction >= 0 && direction <= 1);
454
+ return internal::kFaceUVWFaces[face][axis][direction];
455
+ }
456
+
457
+ } // namespace S2
458
+
459
+ #endif // S2_S2COORDS_H_
@@ -0,0 +1,71 @@
1
+ // Copyright 2005 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
+ #ifndef S2_S2COORDS_INTERNAL_H_
17
+ #define S2_S2COORDS_INTERNAL_H_
18
+ // Author: ericv@google.com (Eric Veach)
19
+
20
+ namespace S2 {
21
+ namespace internal {
22
+
23
+ // The canonical Hilbert traversal order looks like an inverted 'U':
24
+ // the subcells are visited in the order (0,0), (0,1), (1,1), (1,0).
25
+ // The following tables encode the traversal order for various
26
+ // orientations of the Hilbert curve (axes swapped and/or directions
27
+ // of the axes reversed).
28
+
29
+ // Together these flags define a cell orientation. If 'kSwapMask'
30
+ // is true, then canonical traversal order is flipped around the
31
+ // diagonal (i.e. i and j are swapped with each other). If
32
+ // 'kInvertMask' is true, then the traversal order is rotated by 180
33
+ // degrees (i.e. the bits of i and j are inverted, or equivalently,
34
+ // the axis directions are reversed).
35
+ int constexpr kSwapMask = 0x01;
36
+ int constexpr kInvertMask = 0x02;
37
+
38
+ // kIJtoPos[orientation][ij] -> pos
39
+ //
40
+ // Given a cell orientation and the (i,j)-index of a subcell (0=(0,0),
41
+ // 1=(0,1), 2=(1,0), 3=(1,1)), return the order in which this subcell is
42
+ // visited by the Hilbert curve (a position in the range [0..3]).
43
+ extern const int kIJtoPos[4][4];
44
+
45
+ // kPosToIJ[orientation][pos] -> ij
46
+ //
47
+ // Return the (i,j) index of the subcell at the given position 'pos' in the
48
+ // Hilbert curve traversal order with the given orientation. This is the
49
+ // inverse of the previous table:
50
+ //
51
+ // kPosToIJ[r][kIJtoPos[r][ij]] == ij
52
+ extern const int kPosToIJ[4][4];
53
+
54
+ // kPosToOrientation[pos] -> orientation_modifier
55
+ //
56
+ // Return a modifier indicating how the orientation of the child subcell
57
+ // with the given traversal position [0..3] is related to the orientation
58
+ // of the parent cell. The modifier should be XOR-ed with the parent
59
+ // orientation to obtain the curve orientation in the child.
60
+ extern const int kPosToOrientation[4];
61
+
62
+ // The U,V,W axes for each face.
63
+ extern const double kFaceUVWAxes[6][3][3];
64
+
65
+ // The precomputed neighbors of each face (see GetUVWFace).
66
+ extern const int kFaceUVWFaces[6][3][2];
67
+
68
+ } // namespace internal
69
+ } // namespace S2
70
+
71
+ #endif // S2_S2COORDS_INTERNAL_H_