@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,434 @@
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
+ #ifndef S2_S2LATLNG_RECT_H_
19
+ #define S2_S2LATLNG_RECT_H_
20
+
21
+ #include <cmath>
22
+ #include <iosfwd>
23
+ #include <iostream>
24
+
25
+ #include "s2/base/logging.h"
26
+ #include "s2/_fp_contract_off.h"
27
+ #include "s2/r1interval.h"
28
+ #include "s2/s1angle.h"
29
+ #include "s2/s1interval.h"
30
+ #include "s2/s2latlng.h"
31
+ #include "s2/s2region.h"
32
+
33
+ class Decoder;
34
+ class Encoder;
35
+ class S2Cap;
36
+ class S2Cell;
37
+
38
+ // An S2LatLngRect represents a closed latitude-longitude rectangle. It is
39
+ // capable of representing the empty and full rectangles as well as single
40
+ // points. Note that the latitude-longitude space is considered to have a
41
+ // *cylindrical* topology rather than a spherical one, i.e. the poles have
42
+ // multiple lat/lng representations. An S2LatLngRect may be defined so that
43
+ // includes some representations of a pole but not others. Use the
44
+ // PolarClosure() method if you want to expand a rectangle so that it contains
45
+ // all possible representations of any contained poles.
46
+ //
47
+ // Because S2LatLngRect uses S1Interval to store the longitude range,
48
+ // longitudes of -180 degrees are treated specially. Except for empty
49
+ // and full longitude spans, -180 degree longitudes will turn into +180
50
+ // degrees. This sign flip causes lng_lo() to be greater than lng_hi(),
51
+ // indicating that the rectangle will wrap around through -180 instead of
52
+ // through +179. Thus the math is consistent within the library, but the sign
53
+ // flip can be surprising, especially when working with map projections where
54
+ // -180 and +180 are at opposite ends of the flattened map. See the comments
55
+ // on S1Interval for more details.
56
+ //
57
+ // This class is intended to be copied by value as desired. It uses
58
+ // the default copy constructor and assignment operator, however it is
59
+ // not a "plain old datatype" (POD) because it has virtual functions.
60
+ class S2LatLngRect final : public S2Region {
61
+ public:
62
+ // Construct a rectangle from minimum and maximum latitudes and longitudes.
63
+ // If lo.lng() > hi.lng(), the rectangle spans the 180 degree longitude
64
+ // line. Both points must be normalized, with lo.lat() <= hi.lat().
65
+ // The rectangle contains all the points p such that 'lo' <= p <= 'hi',
66
+ // where '<=' is defined in the obvious way.
67
+ S2LatLngRect(const S2LatLng& lo, const S2LatLng& hi);
68
+
69
+ // Construct a rectangle from latitude and longitude intervals. The two
70
+ // intervals must either be both empty or both non-empty, and the latitude
71
+ // interval must not extend outside [-90, +90] degrees.
72
+ // Note that both intervals (and hence the rectangle) are closed.
73
+ S2LatLngRect(const R1Interval& lat, const S1Interval& lng);
74
+
75
+ // The default constructor creates an empty S2LatLngRect.
76
+ S2LatLngRect();
77
+
78
+ // Construct a rectangle of the given size centered around the given point.
79
+ // "center" needs to be normalized, but "size" does not. The latitude
80
+ // interval of the result is clamped to [-90,90] degrees, and the longitude
81
+ // interval of the result is Full() if and only if the longitude size is
82
+ // 360 degrees or more. Examples of clamping (in degrees):
83
+ //
84
+ // center=(80,170), size=(40,60) -> lat=[60,90], lng=[140,-160]
85
+ // center=(10,40), size=(210,400) -> lat=[-90,90], lng=[-180,180]
86
+ // center=(-90,180), size=(20,50) -> lat=[-90,-80], lng=[155,-155]
87
+ static S2LatLngRect FromCenterSize(const S2LatLng& center,
88
+ const S2LatLng& size);
89
+
90
+ // Construct a rectangle containing a single (normalized) point.
91
+ static S2LatLngRect FromPoint(const S2LatLng& p);
92
+
93
+ // Construct the minimal bounding rectangle containing the two given
94
+ // normalized points. This is equivalent to starting with an empty
95
+ // rectangle and calling AddPoint() twice. Note that it is different than
96
+ // the S2LatLngRect(lo, hi) constructor, where the first point is always
97
+ // used as the lower-left corner of the resulting rectangle.
98
+ static S2LatLngRect FromPointPair(const S2LatLng& p1, const S2LatLng& p2);
99
+
100
+ // Accessor methods.
101
+ S1Angle lat_lo() const { return S1Angle::Radians(lat_.lo()); }
102
+ S1Angle lat_hi() const { return S1Angle::Radians(lat_.hi()); }
103
+ S1Angle lng_lo() const { return S1Angle::Radians(lng_.lo()); }
104
+ S1Angle lng_hi() const { return S1Angle::Radians(lng_.hi()); }
105
+ const R1Interval& lat() const { return lat_; }
106
+ const S1Interval& lng() const { return lng_; }
107
+ R1Interval *mutable_lat() { return &lat_; }
108
+ S1Interval *mutable_lng() { return &lng_; }
109
+ S2LatLng lo() const { return S2LatLng(lat_lo(), lng_lo()); }
110
+ S2LatLng hi() const { return S2LatLng(lat_hi(), lng_hi()); }
111
+
112
+ // The canonical empty and full rectangles, as derived from the Empty
113
+ // and Full R1 and S1 Intervals.
114
+ // Empty: lat_lo=1, lat_hi=0, lng_lo=Pi, lng_hi=-Pi (radians)
115
+ static S2LatLngRect Empty();
116
+ // Full: lat_lo=-Pi/2, lat_hi=Pi/2, lng_lo=-Pi, lng_hi=Pi (radians)
117
+ static S2LatLngRect Full();
118
+
119
+ // The full allowable range of latitudes and longitudes.
120
+ static R1Interval FullLat() { return R1Interval(-M_PI_2, M_PI_2); }
121
+ static S1Interval FullLng() { return S1Interval::Full(); }
122
+
123
+ // Returns true if the rectangle is valid, which essentially just means
124
+ // that the latitude bounds do not exceed Pi/2 in absolute value and
125
+ // the longitude bounds do not exceed Pi in absolute value. Also, if
126
+ // either the latitude or longitude bound is empty then both must be.
127
+ bool is_valid() const;
128
+
129
+ // Returns true if the rectangle is empty, i.e. it contains no points at all.
130
+ bool is_empty() const;
131
+
132
+ // Returns true if the rectangle is full, i.e. it contains all points.
133
+ bool is_full() const;
134
+
135
+ // Returns true if the rectangle is a point, i.e. lo() == hi()
136
+ bool is_point() const;
137
+
138
+ // Returns true if lng_.lo() > lng_.hi(), i.e. the rectangle crosses
139
+ // the 180 degree longitude line.
140
+ bool is_inverted() const { return lng_.is_inverted(); }
141
+
142
+ // Returns the k-th vertex of the rectangle (k = 0,1,2,3) in CCW order
143
+ // (lower left, lower right, upper right, upper left). For convenience, the
144
+ // argument is reduced modulo 4 to the range [0..3].
145
+ S2LatLng GetVertex(int k) const;
146
+
147
+ // Returns the center of the rectangle in latitude-longitude space
148
+ // (in general this is not the center of the region on the sphere).
149
+ S2LatLng GetCenter() const;
150
+
151
+ // Returns the width and height of this rectangle in latitude-longitude
152
+ // space. Empty rectangles have a negative width and height.
153
+ S2LatLng GetSize() const;
154
+
155
+ // Returns the surface area of this rectangle on the unit sphere.
156
+ double Area() const;
157
+
158
+ // Returns the true centroid of the rectangle multiplied by its surface area
159
+ // (see s2centroids.h for details on centroids). The result is not unit
160
+ // length, so you may want to normalize it. Note that in general the
161
+ // centroid is *not* at the center of the rectangle, and in fact it may not
162
+ // even be contained by the rectangle. (It is the "center of mass" of the
163
+ // rectangle viewed as subset of the unit sphere, i.e. it is the point in
164
+ // space about which this curved shape would rotate.)
165
+ //
166
+ // The reason for multiplying the result by the rectangle area is to make it
167
+ // easier to compute the centroid of more complicated shapes. The centroid
168
+ // of a union of disjoint regions can be computed simply by adding their
169
+ // GetCentroid() results.
170
+ S2Point GetCentroid() const;
171
+
172
+ // More efficient version of Contains() that accepts a S2LatLng rather than
173
+ // an S2Point. The argument must be normalized.
174
+ bool Contains(const S2LatLng& ll) const;
175
+
176
+ // Returns true if and only if the given point is contained in the interior
177
+ // of the region (i.e. the region excluding its boundary). The point 'p'
178
+ // does not need to be normalized.
179
+ bool InteriorContains(const S2Point& p) const;
180
+
181
+ // More efficient version of InteriorContains() that accepts a S2LatLng
182
+ // rather than an S2Point. The argument must be normalized.
183
+ bool InteriorContains(const S2LatLng& ll) const;
184
+
185
+ // Returns true if and only if the rectangle contains the given other
186
+ // rectangle.
187
+ bool Contains(const S2LatLngRect& other) const;
188
+
189
+ // Returns true if and only if the interior of this rectangle contains all
190
+ // points of the given other rectangle (including its boundary).
191
+ bool InteriorContains(const S2LatLngRect& other) const;
192
+
193
+ // Returns true if this rectangle and the given other rectangle have any
194
+ // points in common.
195
+ bool Intersects(const S2LatLngRect& other) const;
196
+
197
+ // Returns true if this rectangle intersects the given cell. (This is an
198
+ // exact test and may be fairly expensive, see also MayIntersect below.)
199
+ bool Intersects(const S2Cell& cell) const;
200
+
201
+ // Returns true if and only if the interior of this rectangle intersects
202
+ // any point (including the boundary) of the given other rectangle.
203
+ bool InteriorIntersects(const S2LatLngRect& other) const;
204
+
205
+ // Returns true if the boundary of this rectangle intersects the given
206
+ // geodesic edge (v0, v1).
207
+ bool BoundaryIntersects(const S2Point& v0, const S2Point& v1) const;
208
+
209
+ // Increase the size of the bounding rectangle to include the given point.
210
+ // The rectangle is expanded by the minimum amount possible. The S2LatLng
211
+ // argument must be normalized.
212
+ void AddPoint(const S2Point& p);
213
+ void AddPoint(const S2LatLng& ll);
214
+
215
+ // Returns a rectangle that has been expanded by margin.lat() on each side in
216
+ // the latitude direction, and by margin.lng() on each side in the longitude
217
+ // direction. If either margin is negative, then shrinks the rectangle on
218
+ // the corresponding sides instead. The resulting rectangle may be empty.
219
+ //
220
+ // As noted above, the latitude-longitude space has the topology of a
221
+ // cylinder. Longitudes "wrap around" at +/-180 degrees, while latitudes
222
+ // are clamped to range [-90, 90]. This means that any expansion (positive
223
+ // or negative) of the full longitude range remains full (since the
224
+ // "rectangle" is actually a continuous band around the cylinder), while
225
+ // expansion of the full latitude range remains full only if the margin is
226
+ // positive.
227
+ //
228
+ // If either the latitude or longitude interval becomes empty after
229
+ // expansion by a negative margin, the result is empty.
230
+ //
231
+ // Note that if an expanded rectangle contains a pole, it may not contain
232
+ // all possible lat/lng representations of that pole (see header above).
233
+ // Use the PolarClosure() method if you do not want this behavior.
234
+ //
235
+ // If you are trying to grow a rectangle by a certain *distance* on the
236
+ // sphere (e.g. 5km), use the ExpandedByDistance() method instead.
237
+ S2LatLngRect Expanded(const S2LatLng& margin) const;
238
+
239
+ // If the rectangle does not include either pole, returns it unmodified.
240
+ // Otherwise expands the longitude range to Full() so that the rectangle
241
+ // contains all possible representations of the contained pole(s).
242
+ S2LatLngRect PolarClosure() const;
243
+
244
+ // Returns the smallest rectangle containing the union of this rectangle and
245
+ // the given rectangle.
246
+ S2LatLngRect Union(const S2LatLngRect& other) const;
247
+
248
+ // Returns the smallest rectangle containing the intersection of this
249
+ // rectangle and the given rectangle. Note that the region of intersection
250
+ // may consist of two disjoint rectangles, in which case a single rectangle
251
+ // spanning both of them is returned.
252
+ S2LatLngRect Intersection(const S2LatLngRect& other) const;
253
+
254
+ // Expands this rectangle so that it contains all points within the given
255
+ // distance of the boundary, and return the smallest such rectangle. If the
256
+ // distance is negative, then instead shrinks this rectangle so that it
257
+ // excludes all points within the given absolute distance of the boundary,
258
+ // and returns the largest such rectangle.
259
+ //
260
+ // Unlike Expanded(), this method treats the rectangle as a set of points on
261
+ // the sphere, and measures distances on the sphere. For example, you can
262
+ // use this method to find a rectangle that contains all points within 5km
263
+ // of a given rectangle. Because this method uses the topology of the
264
+ // sphere, note the following:
265
+ //
266
+ // - The full and empty rectangles have no boundary on the sphere. Any
267
+ // expansion (positive or negative) of these rectangles leaves them
268
+ // unchanged.
269
+ //
270
+ // - Any rectangle that covers the full longitude range does not have an
271
+ // east or west boundary, therefore no expansion (positive or negative)
272
+ // will occur in that direction.
273
+ //
274
+ // - Any rectangle that covers the full longitude range and also includes
275
+ // a pole will not be expanded or contracted at that pole, because it
276
+ // does not have a boundary there.
277
+ //
278
+ // - If a rectangle is within the given distance of a pole, the result will
279
+ // include the full longitude range (because all longitudes are present
280
+ // at the poles).
281
+ //
282
+ // Expansion and contraction are defined such that they are inverses whenver
283
+ // possible, i.e.
284
+ //
285
+ // rect.ExpandedByDistance(x).ExpandedByDistance(-x) == rect
286
+ //
287
+ // (approximately), so long as the first operation does not cause a
288
+ // rectangle boundary to disappear (i.e., the longitude range newly becomes
289
+ // full or empty, or the latitude range expands to include a pole).
290
+ S2LatLngRect ExpandedByDistance(S1Angle distance) const;
291
+
292
+ // Returns the minimum distance (measured along the surface of the sphere) to
293
+ // the given S2LatLngRect. Both S2LatLngRects must be non-empty.
294
+ S1Angle GetDistance(const S2LatLngRect& other) const;
295
+
296
+ // Returns the minimum distance (measured along the surface of the sphere)
297
+ // from a given point to the rectangle (both its boundary and its interior).
298
+ // The latlng must be valid.
299
+ S1Angle GetDistance(const S2LatLng& p) const;
300
+
301
+ // Returns the (directed or undirected) Hausdorff distance (measured along the
302
+ // surface of the sphere) to the given S2LatLngRect. The directed Hausdorff
303
+ // distance from rectangle A to rectangle B is given by
304
+ // h(A, B) = max_{p in A} min_{q in B} d(p, q).
305
+ // The Hausdorff distance between rectangle A and rectangle B is given by
306
+ // H(A, B) = max{h(A, B), h(B, A)}.
307
+ S1Angle GetDirectedHausdorffDistance(const S2LatLngRect& other) const;
308
+ S1Angle GetHausdorffDistance(const S2LatLngRect& other) const;
309
+
310
+ // Returns true if two rectangles contains the same set of points.
311
+ bool operator==(const S2LatLngRect& other) const;
312
+
313
+ // Returns the opposite of what operator == returns.
314
+ bool operator!=(const S2LatLngRect& other) const;
315
+
316
+ // Returns true if the latitude and longitude intervals of the two rectangles
317
+ // are the same up to the given tolerance (see r1interval.h and s1interval.h
318
+ // for details).
319
+ bool ApproxEquals(const S2LatLngRect& other,
320
+ S1Angle max_error = S1Angle::Radians(1e-15)) const;
321
+
322
+ // ApproxEquals() with separate tolerances for latitude and longitude.
323
+ bool ApproxEquals(const S2LatLngRect& other, const S2LatLng& max_error) const;
324
+
325
+ ////////////////////////////////////////////////////////////////////////
326
+ // S2Region interface (see s2region.h for details):
327
+
328
+ S2LatLngRect* Clone() const override;
329
+ S2Cap GetCapBound() const override;
330
+ S2LatLngRect GetRectBound() const override;
331
+ bool Contains(const S2Cell& cell) const override;
332
+
333
+ // This test is cheap but is NOT exact. Use Intersects() if you want a more
334
+ // accurate and more expensive test. Note that when this method is used by
335
+ // an S2RegionCoverer, the accuracy isn't all that important since if a cell
336
+ // may intersect the region then it is subdivided, and the accuracy of this
337
+ // method goes up as the cells get smaller.
338
+ bool MayIntersect(const S2Cell& cell) const override;
339
+
340
+ // The point 'p' does not need to be normalized.
341
+ bool Contains(const S2Point& p) const override;
342
+
343
+ // Appends a serialized representation of the S2LatLngRect to "encoder".
344
+ //
345
+ // REQUIRES: "encoder" uses the default constructor, so that its buffer
346
+ // can be enlarged as necessary by calling Ensure(int).
347
+ void Encode(Encoder* const encoder) const;
348
+
349
+ // Decodes an S2LatLngRect encoded with Encode(). Returns true on success.
350
+ bool Decode(Decoder* const decoder);
351
+
352
+ // Returns true if the edge AB intersects the given edge of constant
353
+ // longitude.
354
+ static bool IntersectsLngEdge(const S2Point& a, const S2Point& b,
355
+ const R1Interval& lat, double lng);
356
+
357
+ // Returns true if the edge AB intersects the given edge of constant
358
+ // latitude. Requires the vectors to have unit length.
359
+ static bool IntersectsLatEdge(const S2Point& a, const S2Point& b,
360
+ double lat, const S1Interval& lng);
361
+
362
+ private:
363
+ // Helper function. See .cc for description.
364
+ static S1Angle GetDirectedHausdorffDistance(double lng_diff,
365
+ const R1Interval& a_lat,
366
+ const R1Interval& b_lat);
367
+
368
+ // Helper function. See .cc for description.
369
+ static S1Angle GetInteriorMaxDistance(const R1Interval& a_lat,
370
+ const S2Point& b);
371
+
372
+ // Helper function. See .cc for description.
373
+ static S2Point GetBisectorIntersection(const R1Interval& lat, double lng);
374
+
375
+ R1Interval lat_;
376
+ S1Interval lng_;
377
+ };
378
+
379
+ inline S2LatLngRect::S2LatLngRect(const S2LatLng& lo, const S2LatLng& hi)
380
+ : lat_(lo.lat().radians(), hi.lat().radians()),
381
+ lng_(lo.lng().radians(), hi.lng().radians()) {
382
+ S2_DLOG_IF(ERROR, !is_valid())
383
+ << "Invalid rect: " << lo << ", " << hi;
384
+ }
385
+
386
+ inline S2LatLngRect::S2LatLngRect(const R1Interval& lat, const S1Interval& lng)
387
+ : lat_(lat), lng_(lng) {
388
+ S2_DLOG_IF(ERROR, !is_valid())
389
+ << "Invalid rect: " << lat << ", " << lng;
390
+ }
391
+
392
+ inline S2LatLngRect::S2LatLngRect()
393
+ : lat_(R1Interval::Empty()), lng_(S1Interval::Empty()) {
394
+ }
395
+
396
+ inline S2LatLngRect S2LatLngRect::Empty() {
397
+ return S2LatLngRect();
398
+ }
399
+
400
+ inline S2LatLngRect S2LatLngRect::Full() {
401
+ return S2LatLngRect(FullLat(), FullLng());
402
+ }
403
+
404
+ inline bool S2LatLngRect::is_valid() const {
405
+ // The lat/lng ranges must either be both empty or both non-empty.
406
+ return (std::fabs(lat_.lo()) <= M_PI_2 &&
407
+ std::fabs(lat_.hi()) <= M_PI_2 &&
408
+ lng_.is_valid() &&
409
+ lat_.is_empty() == lng_.is_empty());
410
+ }
411
+
412
+ inline bool S2LatLngRect::is_empty() const {
413
+ return lat_.is_empty();
414
+ }
415
+
416
+ inline bool S2LatLngRect::is_full() const {
417
+ return lat_ == FullLat() && lng_.is_full();
418
+ }
419
+
420
+ inline bool S2LatLngRect::is_point() const {
421
+ return lat_.lo() == lat_.hi() && lng_.lo() == lng_.hi();
422
+ }
423
+
424
+ inline bool S2LatLngRect::operator==(const S2LatLngRect& other) const {
425
+ return lat() == other.lat() && lng() == other.lng();
426
+ }
427
+
428
+ inline bool S2LatLngRect::operator!=(const S2LatLngRect& other) const {
429
+ return !operator==(other);
430
+ }
431
+
432
+ std::ostream& operator<<(std::ostream& os, const S2LatLngRect& r);
433
+
434
+ #endif // S2_S2LATLNG_RECT_H_