@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,69 @@
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
+ // The S2 library defines extra validity checks throughout the code that can
19
+ // optionally be enabled or disabled. By default, these validity checks are
20
+ // enabled in debug-mode builds (including fastbuild) and disabled in
21
+ // optimized builds.
22
+ //
23
+ // There are two ways to change the default behavior:
24
+ //
25
+ // - The command line --s2debug flag, which changes the global default.
26
+ //
27
+ // - The S2Debug enum, which allows validity checks to be enabled or disabled
28
+ // for specific objects (e.g., an S2Polygon).
29
+ //
30
+ // If you want to intentionally create invalid geometry (e.g., in a test), the
31
+ // S2Debug enum is preferable. For example, to create an invalid S2Polygon,
32
+ // you can do this:
33
+ //
34
+ // S2Polygon invalid;
35
+ // invalid.set_s2debug_override(S2Debug::DISABLE);
36
+ //
37
+ // There is also a convenience constructor:
38
+ //
39
+ // vector<unique_ptr<S2Loop>> loops = ...;
40
+ // S2Polygon invalid(loops, S2Debug::DISABLE);
41
+ //
42
+ // There are a few checks that cannot be disabled this way (e.g., internal
43
+ // functions that require S2Points to be unit length). If you absolutely need
44
+ // to disable these checks, you can set FLAGS_s2debug for the duration of a
45
+ // specific test like this:
46
+ //
47
+ // TEST(MyClass, InvalidGeometry) {
48
+ // FLAGS_s2debug = false; // Automatically restored between tests
49
+ // ...
50
+ // }
51
+
52
+ #ifndef S2_S2DEBUG_H_
53
+ #define S2_S2DEBUG_H_
54
+
55
+ #include "s2/base/commandlineflags.h"
56
+ #include "s2/base/integral_types.h"
57
+
58
+ // Command line flag that enables extra validity checking throughout the S2
59
+ // code. It is turned on by default in debug-mode builds.
60
+ S2_DECLARE_bool(s2debug);
61
+
62
+ // Class that allows the --s2debug validity checks to be enabled or disabled
63
+ // for specific objects (e.g., see S2Polygon).
64
+ enum class S2Debug : uint8 {
65
+ ALLOW, // Validity checks are controlled by --s2debug
66
+ DISABLE // No validity checks even when --s2debug is true
67
+ };
68
+
69
+ #endif // S2_S2DEBUG_H_
@@ -0,0 +1,165 @@
1
+ // Copyright 2017 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_S2DISTANCE_TARGET_H_
19
+ #define S2_S2DISTANCE_TARGET_H_
20
+
21
+ #include "s2/s2cap.h"
22
+ #include "s2/s2cell.h"
23
+ #include "s2/s2shape_index.h"
24
+
25
+ // S2DistanceTarget represents a geometric object to which distances are
26
+ // measured. For example, there are subtypes for measuring distances to a
27
+ // point, an edge, or to an S2ShapeIndex (an arbitrary collection of
28
+ // geometry). S2DistanceTarget objects are provided for the benefit of
29
+ // classes that measure distances and/or find nearby geometry, such as
30
+ // S2ClosestEdgeQuery, S2ClosestPointQuery, and S2ClosestCellQuery.
31
+ //
32
+ // Implementations do *not* need to be thread-safe. They may cache data or
33
+ // allocate temporary data structures in order to improve performance. For
34
+ // this reason, S2DistanceTarget objects are typically passed as pointers
35
+ // rather than as const references.
36
+ //
37
+ // The Distance template argument is used to represent distances. Usually
38
+ // this type is a thin wrapper around S1ChordAngle, but another distance type
39
+ // may be substituted as long as it implements the API below. This can be
40
+ // used to change the comparison function (e.g., to find the furthest edges
41
+ // from the target), to get more accuracy, or to measure non-spheroidal
42
+ // distances (e.g., using the WGS84 ellipsoid).
43
+ //
44
+ // The Distance concept is as follows:
45
+ //
46
+ // class Distance {
47
+ // public:
48
+ // // Default and copy constructors, assignment operator:
49
+ // Distance();
50
+ // Distance(const Distance&);
51
+ // Distance& operator=(const Distance&);
52
+ //
53
+ // // Factory methods:
54
+ // static Distance Zero(); // Returns a zero distance.
55
+ // static Distance Infinity(); // Larger than any valid distance.
56
+ // static Distance Negative(); // Smaller than any valid distance.
57
+ //
58
+ // // Comparison operators:
59
+ // friend bool operator==(Distance x, Distance y);
60
+ // friend bool operator<(Distance x, Distance y);
61
+ //
62
+ // // Delta represents the positive difference between two distances.
63
+ // // It is used together with operator-() to implement Options::max_error().
64
+ // // Typically Distance::Delta is simply S1ChordAngle.
65
+ // class Delta {
66
+ // public:
67
+ // Delta();
68
+ // Delta(const Delta&);
69
+ // Delta& operator=(const Delta&);
70
+ // friend bool operator==(Delta x, Delta y);
71
+ // static Delta Zero();
72
+ // };
73
+ //
74
+ // // Subtraction operator. Note that the second argument represents a
75
+ // // delta between two distances. This distinction is important for
76
+ // // classes that compute maximum distances (e.g., S2FurthestEdgeQuery).
77
+ // friend Distance operator-(Distance x, Delta delta);
78
+ //
79
+ // // Method that returns an upper bound on the S1ChordAngle corresponding
80
+ // // to this Distance (needed to implement Options::max_distance
81
+ // // efficiently). For example, if Distance measures WGS84 ellipsoid
82
+ // // distance then the corresponding angle needs to be 0.56% larger.
83
+ // S1ChordAngle GetChordAngleBound() const;
84
+ // };
85
+ template <class Distance>
86
+ class S2DistanceTarget {
87
+ public:
88
+ using Delta = typename Distance::Delta;
89
+
90
+ virtual ~S2DistanceTarget() {}
91
+
92
+ // Returns an S2Cap that bounds the set of points whose distance to the
93
+ // target is Distance::Zero().
94
+ virtual S2Cap GetCapBound() = 0;
95
+
96
+ // If the distance to the point "p" "min_dist", then updates "min_dist" and
97
+ // returns true. Otherwise returns false.
98
+ virtual bool UpdateMinDistance(const S2Point& p, Distance* min_dist) = 0;
99
+
100
+ // If the distance to the edge (v0, v1) is less than "min_dist", then
101
+ // updates "min_dist" and returns true. Otherwise returns false.
102
+ virtual bool UpdateMinDistance(const S2Point& v0, const S2Point& v1,
103
+ Distance* min_dist) = 0;
104
+
105
+ // If the distance to the given S2Cell (including its interior) is less
106
+ // than "min_dist", then updates "min_dist" and returns true. Otherwise
107
+ // returns false.
108
+ virtual bool UpdateMinDistance(const S2Cell& cell, Distance* min_dist) = 0;
109
+
110
+ // Finds all polygons in the given "query_index" that completely contain a
111
+ // connected component of the target geometry. (For example, if the
112
+ // target consists of 10 points, this method finds polygons that contain
113
+ // any of those 10 points.) For each such polygon, "visitor" is called
114
+ // with the S2Shape of the polygon along with a point of the target
115
+ // geometry that is contained by that polygon.
116
+ //
117
+ // Optionally, any polygon that intersects the target geometry may also be
118
+ // returned. In other words, this method returns all polygons that
119
+ // contain any connected component of the target, along with an arbitrary
120
+ // subset of the polygons that intersect the target.
121
+ //
122
+ // For example, suppose that "query_index" contains two abutting polygons
123
+ // A and B. If the target consists of two points "a" contained by A and
124
+ // "b" contained by B, then both A and B are returned. But if the target
125
+ // consists of the edge "ab", then any subset of {A, B} could be returned
126
+ // (because both polygons intersect the target but neither one contains
127
+ // the edge "ab").
128
+ //
129
+ // If "visitor" returns false, this method terminates early and returns
130
+ // false as well. Otherwise returns true.
131
+ //
132
+ // NOTE(ericv): This method exists only for the purpose of implementing
133
+ // S2ClosestEdgeQuery::Options::include_interiors() efficiently. Its API is
134
+ // unlikely to be useful for other purposes.
135
+ using ShapeVisitor = std::function<bool (S2Shape* containing_shape,
136
+ const S2Point& target_point)>;
137
+ virtual bool VisitContainingShapes(const S2ShapeIndex& query_index,
138
+ const ShapeVisitor& visitor) = 0;
139
+
140
+ // Specifies that whenever one of the UpdateMinDistance() methods above
141
+ // returns "true", the returned distance is allowed to be up to "max_error"
142
+ // larger than the true minimum distance. In other words, it gives this
143
+ // target object permission to terminate its distance calculation as soon as
144
+ // it has determined that (1) the minimum distance is less than "min_dist"
145
+ // and (2) the best possible further improvement is less than "max_error".
146
+ //
147
+ // If the target takes advantage of "max_error" to optimize its distance
148
+ // calculation, this method must return "true". (Most target types can use
149
+ // the default implementation which simply returns false.)
150
+ virtual bool set_max_error(const Delta& max_error) { return false; }
151
+
152
+ // The following method is provided as a convenience for classes that
153
+ // compute distances to a collection of indexed geometry, such as
154
+ // S2ClosestPointQuery, S2ClosestEdgeQuery, and S2ClosestCellQuery. It
155
+ // returns the maximum number of indexed objects for which it is faster to
156
+ // compute the distance by brute force (e.g., by testing every edge) rather
157
+ // than by using an index. (The appropriate value is different for each
158
+ // index type and can be estimated for a given (distance target, index type)
159
+ // pair by running benchmarks.)
160
+ //
161
+ // By default this method returns -1, indicating that it is not implemented.
162
+ virtual int max_brute_force_index_size() const { return -1; }
163
+ };
164
+
165
+ #endif // S2_S2DISTANCE_TARGET_H_
@@ -0,0 +1,52 @@
1
+ // Copyright 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
+ #include "s2/s2earth.h"
17
+
18
+ #include <cmath>
19
+ #include <algorithm>
20
+
21
+ namespace {
22
+
23
+ // http://en.wikipedia.org/wiki/Haversine_formula
24
+ // Haversine(x) has very good numerical stability around zero.
25
+ // Haversine(x) == (1-cos(x))/2 == sin(x/2)^2; must be implemented with the
26
+ // second form to reap the numerical benefits.
27
+ double Haversine(const double radians) {
28
+ const double sinHalf = sin(radians / 2);
29
+ return sinHalf * sinHalf;
30
+ }
31
+
32
+ } // namespace
33
+
34
+ double S2Earth::ToLongitudeRadians(const util::units::Meters& distance,
35
+ double latitude_radians) {
36
+ double scalar = cos(latitude_radians);
37
+ if (scalar == 0) return M_PI * 2;
38
+ return std::min(ToRadians(distance) / scalar, M_PI * 2);
39
+ }
40
+
41
+ // Sourced from http://www.movable-type.co.uk/scripts/latlong.html.
42
+ S1Angle S2Earth::GetInitialBearing(const S2LatLng& a, const S2LatLng& b) {
43
+ const double lat1 = a.lat().radians();
44
+ const double cosLat2 = cos(b.lat().radians());
45
+ const double lat_diff = b.lat().radians() - a.lat().radians();
46
+ const double lng_diff = b.lng().radians() - a.lng().radians();
47
+
48
+ const double x =
49
+ sin(lat_diff) + sin(lat1) * cosLat2 * 2 * Haversine(lng_diff);
50
+ const double y = sin(lng_diff) * cosLat2;
51
+ return S1Angle::Radians(atan2(y, x));
52
+ }
@@ -0,0 +1,268 @@
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
+ // The earth modeled as a sphere. There are lots of convenience
19
+ // functions so that it doesn't take 2 lines of code just to do
20
+ // a single conversion.
21
+
22
+ #ifndef S2_S2EARTH_H_
23
+ #define S2_S2EARTH_H_
24
+
25
+ #include "s2/s1angle.h"
26
+ #include "s2/s1chord_angle.h"
27
+ #include "s2/s2latlng.h"
28
+ #include "s2/s2point.h"
29
+ #include "s2/util/units/length-units.h"
30
+
31
+ class S2Earth {
32
+ public:
33
+ // These functions convert between distances on the unit sphere
34
+ // (expressed as angles subtended from the sphere's center) and
35
+ // distances on the Earth's surface. This is possible only because
36
+ // the Earth is modeled as a sphere; otherwise a given angle would
37
+ // correspond to a range of distances depending on where the
38
+ // corresponding line segment was located.
39
+ //
40
+ // Note that you will lose precision if you use the ToDistance() method,
41
+ // since Meters is a single-precision type. If you need more precision,
42
+ // use one of the direct conversion methods below.
43
+ inline static S1Angle ToAngle(const util::units::Meters& distance);
44
+ inline static S1ChordAngle ToChordAngle(const util::units::Meters& distance);
45
+ inline static util::units::Meters ToDistance(const S1Angle& angle);
46
+ inline static util::units::Meters ToDistance(const S1ChordAngle& cangle);
47
+
48
+ // Convenience functions. These methods also return a double-precision
49
+ // result, unlike the generic ToDistance() method.
50
+ inline static double ToRadians(const util::units::Meters& distance);
51
+ inline static double ToMeters(const S1Angle& angle);
52
+ inline static double ToMeters(const S1ChordAngle& cangle);
53
+ inline static double ToKm(const S1Angle& angle);
54
+ inline static double ToKm(const S1ChordAngle& cangle);
55
+ inline static double KmToRadians(double km);
56
+ inline static double RadiansToKm(double radians);
57
+ inline static double MetersToRadians(double meters);
58
+ inline static double RadiansToMeters(double radians);
59
+
60
+ // These functions convert between areas on the unit sphere
61
+ // (as returned by the S2 library) and areas on the Earth's surface.
62
+ // Note that the area of a region on the unit sphere is equal to the
63
+ // solid angle it subtends from the sphere's center (measured in steradians).
64
+ inline static double SquareKmToSteradians(double km2);
65
+ inline static double SquareMetersToSteradians(double m2);
66
+ inline static double SteradiansToSquareKm(double steradians);
67
+ inline static double SteradiansToSquareMeters(double steradians);
68
+
69
+ // Convenience function for the frequent case where you need to call
70
+ // ToRadians in order to convert an east-west distance on the globe to
71
+ // radians. The output is a function of how close to the poles you are
72
+ // (i.e. at the bulge at the equator, one unit of longitude represents a
73
+ // much farther distance). The function will never return more than 2*PI
74
+ // radians, even if you're trying to go 100 million miles west at the north
75
+ // pole.
76
+ static double ToLongitudeRadians(const util::units::Meters& distance,
77
+ double latitude_radians);
78
+
79
+ // Computes the initial bearing from a to b. This is the bearing an observer
80
+ // at point a has when facing point b. A bearing of 0 degrees is north, and it
81
+ // increases clockwise (90 degrees is east, etc).
82
+ // If a == b, a == -b, or a is one of the Earths' poles, the return value is
83
+ // undefined.
84
+ static S1Angle GetInitialBearing(const S2LatLng& a, const S2LatLng& b);
85
+
86
+ // Returns the distance between two points. Example:
87
+ // double miles = Miles(geostore::S2Earth::GetDistance(a, b)).value();
88
+ //
89
+ // Note that these methods only have single-precision accuracy, since
90
+ // Meters is a single-precision type. If you ned more precision, use one
91
+ // of the methods below.
92
+ inline static util::units::Meters GetDistance(const S2Point& a,
93
+ const S2Point& b);
94
+ inline static util::units::Meters GetDistance(const S2LatLng& a,
95
+ const S2LatLng& b);
96
+
97
+ // Convenience functions. These methods also return a double-precision
98
+ // result, unlike the generic GetDistance() method.
99
+ inline static double GetDistanceKm(const S2Point& a, const S2Point& b);
100
+ inline static double GetDistanceKm(const S2LatLng& a, const S2LatLng& b);
101
+ inline static double GetDistanceMeters(const S2Point& a, const S2Point& b);
102
+ inline static double GetDistanceMeters(const S2LatLng& a, const S2LatLng& b);
103
+
104
+ // Returns the Earth's mean radius, which is the radius of the equivalent
105
+ // sphere with the same surface area. According to NASA, this value is
106
+ // 6371.01 +/- 0.02 km. The equatorial radius is 6378.136 km, and the polar
107
+ // radius is 6356.752 km. They differ by one part in 298.257.
108
+ //
109
+ // Reference: http://ssd.jpl.nasa.gov/phys_props_earth.html, which quotes
110
+ // Yoder, C.F. 1995. "Astrometric and Geodetic Properties of Earth and the
111
+ // Solar System" in Global Earth Physics, A Handbook of Physical Constants,
112
+ // AGU Reference Shelf 1, American Geophysical Union, Table 2.
113
+ inline static util::units::Meters Radius();
114
+
115
+ // Convenience functions.
116
+ inline static double RadiusKm();
117
+ inline static double RadiusMeters();
118
+
119
+ // Returns the altitude of the lowest known point on Earth. The lowest known
120
+ // point on Earth is the Challenger Deep with an altitude of -10898 meters
121
+ // above the surface of the spherical earth.
122
+ inline static util::units::Meters LowestAltitude();
123
+
124
+ // Convenience functions.
125
+ inline static double LowestAltitudeKm();
126
+ inline static double LowestAltitudeMeters();
127
+
128
+ // Returns the altitude of the highest known point on Earth. The highest
129
+ // known point on Earth is Mount Everest with an altitude of 8846 meters
130
+ // above the surface of the spherical earth.
131
+ inline static util::units::Meters HighestAltitude();
132
+
133
+ // Convenience functions.
134
+ inline static double HighestAltitudeKm();
135
+ inline static double HighestAltitudeMeters();
136
+ };
137
+
138
+ inline S1Angle S2Earth::ToAngle(const util::units::Meters& distance) {
139
+ return S1Angle::Radians(ToRadians(distance));
140
+ }
141
+
142
+ inline S1ChordAngle S2Earth::ToChordAngle(const util::units::Meters& distance) {
143
+ return S1ChordAngle(ToAngle(distance));
144
+ }
145
+
146
+ inline util::units::Meters S2Earth::ToDistance(const S1Angle& angle) {
147
+ return util::units::Meters(ToMeters(angle));
148
+ }
149
+
150
+ inline util::units::Meters S2Earth::ToDistance(const S1ChordAngle& cangle) {
151
+ return util::units::Meters(ToMeters(cangle));
152
+ }
153
+
154
+ inline double S2Earth::ToRadians(const util::units::Meters& distance) {
155
+ return distance.value() / RadiusMeters();
156
+ }
157
+
158
+ inline double S2Earth::ToMeters(const S1Angle& angle) {
159
+ return angle.radians() * RadiusMeters();
160
+ }
161
+
162
+ inline double S2Earth::ToKm(const S1Angle& angle) {
163
+ return angle.radians() * RadiusKm();
164
+ }
165
+
166
+ inline double S2Earth::ToMeters(const S1ChordAngle& cangle) {
167
+ return ToMeters(cangle.ToAngle());
168
+ }
169
+
170
+ inline double S2Earth::ToKm(const S1ChordAngle& cangle) {
171
+ return ToKm(cangle.ToAngle());
172
+ }
173
+
174
+ inline double S2Earth::KmToRadians(double km) {
175
+ return km / RadiusKm();
176
+ }
177
+
178
+ inline double S2Earth::RadiansToKm(double radians) {
179
+ return radians * RadiusKm();
180
+ }
181
+
182
+ inline double S2Earth::MetersToRadians(double meters) {
183
+ return meters / RadiusMeters();
184
+ }
185
+
186
+ inline double S2Earth::RadiansToMeters(double radians) {
187
+ return radians * RadiusMeters();
188
+ }
189
+
190
+ inline double S2Earth::SquareKmToSteradians(double km2) {
191
+ return km2 / (RadiusKm() * RadiusKm());
192
+ }
193
+
194
+ inline double S2Earth::SquareMetersToSteradians(double m2) {
195
+ return m2 / (RadiusMeters() * RadiusMeters());
196
+ }
197
+
198
+ inline double S2Earth::SteradiansToSquareKm(double steradians) {
199
+ return steradians * RadiusKm() * RadiusKm();
200
+ }
201
+
202
+ inline double S2Earth::SteradiansToSquareMeters(double steradians) {
203
+ return steradians * RadiusMeters() * RadiusMeters();
204
+ }
205
+
206
+ inline util::units::Meters S2Earth::GetDistance(const S2Point& a,
207
+ const S2Point& b) {
208
+ return ToDistance(S1Angle(a, b));
209
+ }
210
+
211
+ inline util::units::Meters S2Earth::GetDistance(const S2LatLng& a,
212
+ const S2LatLng& b) {
213
+ return ToDistance(a.GetDistance(b));
214
+ }
215
+
216
+ inline double S2Earth::GetDistanceKm(const S2Point& a, const S2Point& b) {
217
+ return RadiansToKm(a.Angle(b));
218
+ }
219
+
220
+ inline double S2Earth::GetDistanceKm(const S2LatLng& a, const S2LatLng& b) {
221
+ return ToKm(a.GetDistance(b));
222
+ }
223
+
224
+ inline double S2Earth::GetDistanceMeters(const S2Point& a, const S2Point& b) {
225
+ return RadiansToMeters(a.Angle(b));
226
+ }
227
+
228
+ inline double S2Earth::GetDistanceMeters(const S2LatLng& a, const S2LatLng& b) {
229
+ return ToMeters(a.GetDistance(b));
230
+ }
231
+
232
+ inline util::units::Meters S2Earth::Radius() {
233
+ return util::units::Meters(RadiusMeters());
234
+ }
235
+
236
+ inline double S2Earth::RadiusKm() {
237
+ return 0.001 * RadiusMeters();
238
+ }
239
+
240
+ inline double S2Earth::RadiusMeters() {
241
+ return 6371010.0;
242
+ }
243
+
244
+ inline util::units::Meters S2Earth::LowestAltitude() {
245
+ return util::units::Meters(LowestAltitudeMeters());
246
+ }
247
+
248
+ inline double S2Earth::LowestAltitudeKm() {
249
+ return 0.001 * LowestAltitudeMeters();
250
+ }
251
+
252
+ inline double S2Earth::LowestAltitudeMeters() {
253
+ return -10898;
254
+ }
255
+
256
+ inline util::units::Meters S2Earth::HighestAltitude() {
257
+ return util::units::Meters(HighestAltitudeMeters());
258
+ }
259
+
260
+ inline double S2Earth::HighestAltitudeKm() {
261
+ return 0.001 * HighestAltitudeMeters();
262
+ }
263
+
264
+ inline double S2Earth::HighestAltitudeMeters() {
265
+ return 8846;
266
+ }
267
+
268
+ #endif // S2_S2EARTH_H_