@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.
- package/.circleci/config.yml +45 -0
- package/.dockerignore +1 -0
- package/.gitmodules +3 -0
- package/CHANGELOG.md +33 -0
- package/LICENSE +201 -0
- package/README.md +147 -0
- package/binding.gyp +170 -0
- package/docker/Dockerfile.node20.test +8 -0
- package/docker/Dockerfile.node22.test +8 -0
- package/docker/Dockerfile.node24.test +8 -0
- package/index.d.ts +117 -0
- package/index.js +6 -0
- package/jest.config.js +184 -0
- package/package.json +43 -0
- package/publish-linux.sh +18 -0
- package/publish-osx.sh +19 -0
- package/src/builder.cc +84 -0
- package/src/builder.h +29 -0
- package/src/cell.cc +71 -0
- package/src/cell.h +26 -0
- package/src/cell_id.cc +210 -0
- package/src/cell_id.h +44 -0
- package/src/cell_union.cc +237 -0
- package/src/cell_union.h +34 -0
- package/src/earth.cc +185 -0
- package/src/earth.h +33 -0
- package/src/latlng.cc +132 -0
- package/src/latlng.h +28 -0
- package/src/loop.cc +51 -0
- package/src/loop.h +21 -0
- package/src/point.cc +69 -0
- package/src/point.h +23 -0
- package/src/polygon.cc +36 -0
- package/src/polygon.h +20 -0
- package/src/polyline.cc +186 -0
- package/src/polyline.h +34 -0
- package/src/region_coverer.cc +450 -0
- package/src/region_coverer.h +56 -0
- package/src/s2.cc +27 -0
- package/test/Cell.test.js +37 -0
- package/test/CellId.test.js +135 -0
- package/test/CellUnion.test.js +150 -0
- package/test/Earth.test.js +62 -0
- package/test/LatLng.test.js +45 -0
- package/test/Point.test.js +14 -0
- package/test/Polyline.test.js +78 -0
- package/test/RegionCoverer.test.js +301 -0
- package/test.sh +16 -0
- package/third_party/s2geometry/.travis.yml +163 -0
- package/third_party/s2geometry/AUTHORS +13 -0
- package/third_party/s2geometry/CONTRIBUTING.md +65 -0
- package/third_party/s2geometry/CONTRIBUTORS +30 -0
- package/third_party/s2geometry/LICENSE +202 -0
- package/third_party/s2geometry/NOTICE +5 -0
- package/third_party/s2geometry/README.md +127 -0
- package/third_party/s2geometry/doc/examples/point_index.cc +44 -0
- package/third_party/s2geometry/doc/examples/term_index.cc +99 -0
- package/third_party/s2geometry/doc/examples/term_index.py +101 -0
- package/third_party/s2geometry/src/python/coder.i +125 -0
- package/third_party/s2geometry/src/python/pywraps2_test.py +786 -0
- package/third_party/s2geometry/src/python/s2.i +37 -0
- package/third_party/s2geometry/src/python/s2_common.i +756 -0
- package/third_party/s2geometry/src/s2/_fp_contract_off.h +60 -0
- package/third_party/s2geometry/src/s2/base/casts.h +318 -0
- package/third_party/s2geometry/src/s2/base/commandlineflags.h +67 -0
- package/third_party/s2geometry/src/s2/base/integral_types.h +31 -0
- package/third_party/s2geometry/src/s2/base/log_severity.h +40 -0
- package/third_party/s2geometry/src/s2/base/logging.h +173 -0
- package/third_party/s2geometry/src/s2/base/mutex.h +61 -0
- package/third_party/s2geometry/src/s2/base/port.h +999 -0
- package/third_party/s2geometry/src/s2/base/spinlock.h +60 -0
- package/third_party/s2geometry/src/s2/base/stringprintf.cc +107 -0
- package/third_party/s2geometry/src/s2/base/stringprintf.h +53 -0
- package/third_party/s2geometry/src/s2/base/strtoint.cc +65 -0
- package/third_party/s2geometry/src/s2/base/strtoint.h +106 -0
- package/third_party/s2geometry/src/s2/base/timer.h +50 -0
- package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector.cc +164 -0
- package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector.h +110 -0
- package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector_test.cc +232 -0
- package/third_party/s2geometry/src/s2/encoded_s2point_vector.cc +838 -0
- package/third_party/s2geometry/src/s2/encoded_s2point_vector.h +140 -0
- package/third_party/s2geometry/src/s2/encoded_s2point_vector_test.cc +344 -0
- package/third_party/s2geometry/src/s2/encoded_s2shape_index.cc +181 -0
- package/third_party/s2geometry/src/s2/encoded_s2shape_index.h +276 -0
- package/third_party/s2geometry/src/s2/encoded_s2shape_index_test.cc +244 -0
- package/third_party/s2geometry/src/s2/encoded_string_vector.cc +66 -0
- package/third_party/s2geometry/src/s2/encoded_string_vector.h +164 -0
- package/third_party/s2geometry/src/s2/encoded_string_vector_test.cc +69 -0
- package/third_party/s2geometry/src/s2/encoded_uint_vector.h +299 -0
- package/third_party/s2geometry/src/s2/encoded_uint_vector_test.cc +124 -0
- package/third_party/s2geometry/src/s2/id_set_lexicon.cc +81 -0
- package/third_party/s2geometry/src/s2/id_set_lexicon.h +199 -0
- package/third_party/s2geometry/src/s2/id_set_lexicon_test.cc +70 -0
- package/third_party/s2geometry/src/s2/mutable_s2shape_index.cc +1585 -0
- package/third_party/s2geometry/src/s2/mutable_s2shape_index.h +600 -0
- package/third_party/s2geometry/src/s2/mutable_s2shape_index_test.cc +589 -0
- package/third_party/s2geometry/src/s2/r1interval.h +220 -0
- package/third_party/s2geometry/src/s2/r1interval_test.cc +185 -0
- package/third_party/s2geometry/src/s2/r2.h +26 -0
- package/third_party/s2geometry/src/s2/r2rect.cc +93 -0
- package/third_party/s2geometry/src/s2/r2rect.h +234 -0
- package/third_party/s2geometry/src/s2/r2rect_test.cc +228 -0
- package/third_party/s2geometry/src/s2/s1angle.cc +54 -0
- package/third_party/s2geometry/src/s2/s1angle.h +336 -0
- package/third_party/s2geometry/src/s2/s1angle_test.cc +185 -0
- package/third_party/s2geometry/src/s2/s1chord_angle.cc +159 -0
- package/third_party/s2geometry/src/s2/s1chord_angle.h +369 -0
- package/third_party/s2geometry/src/s2/s1chord_angle_test.cc +207 -0
- package/third_party/s2geometry/src/s2/s1interval.cc +296 -0
- package/third_party/s2geometry/src/s2/s1interval.h +266 -0
- package/third_party/s2geometry/src/s2/s1interval_test.cc +469 -0
- package/third_party/s2geometry/src/s2/s2boolean_operation.cc +2391 -0
- package/third_party/s2geometry/src/s2/s2boolean_operation.h +501 -0
- package/third_party/s2geometry/src/s2/s2boolean_operation_test.cc +1400 -0
- package/third_party/s2geometry/src/s2/s2builder.cc +1828 -0
- package/third_party/s2geometry/src/s2/s2builder.h +1057 -0
- package/third_party/s2geometry/src/s2/s2builder_graph.cc +1084 -0
- package/third_party/s2geometry/src/s2/s2builder_graph.h +799 -0
- package/third_party/s2geometry/src/s2/s2builder_graph_test.cc +462 -0
- package/third_party/s2geometry/src/s2/s2builder_layer.h +50 -0
- package/third_party/s2geometry/src/s2/s2builder_test.cc +1329 -0
- package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer.cc +313 -0
- package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer.h +221 -0
- package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer_test.cc +261 -0
- package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies.cc +392 -0
- package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies.h +86 -0
- package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies_test.cc +182 -0
- package/third_party/s2geometry/src/s2/s2builderutil_graph_shape.h +57 -0
- package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer.cc +212 -0
- package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer.h +218 -0
- package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer_test.cc +367 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer.cc +74 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer.h +122 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer_test.cc +167 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer.cc +191 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer.h +211 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer_test.cc +312 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer.cc +105 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer.h +174 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer_test.cc +220 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer.cc +98 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer.h +292 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer_test.cc +233 -0
- package/third_party/s2geometry/src/s2/s2builderutil_snap_functions.cc +354 -0
- package/third_party/s2geometry/src/s2/s2builderutil_snap_functions.h +239 -0
- package/third_party/s2geometry/src/s2/s2builderutil_snap_functions_test.cc +716 -0
- package/third_party/s2geometry/src/s2/s2builderutil_testing.cc +37 -0
- package/third_party/s2geometry/src/s2/s2builderutil_testing.h +100 -0
- package/third_party/s2geometry/src/s2/s2builderutil_testing_test.cc +85 -0
- package/third_party/s2geometry/src/s2/s2cap.cc +347 -0
- package/third_party/s2geometry/src/s2/s2cap.h +286 -0
- package/third_party/s2geometry/src/s2/s2cap_test.cc +379 -0
- package/third_party/s2geometry/src/s2/s2cell.cc +552 -0
- package/third_party/s2geometry/src/s2/s2cell.h +249 -0
- package/third_party/s2geometry/src/s2/s2cell_id.cc +619 -0
- package/third_party/s2geometry/src/s2/s2cell_id.h +705 -0
- package/third_party/s2geometry/src/s2/s2cell_id_test.cc +633 -0
- package/third_party/s2geometry/src/s2/s2cell_index.cc +149 -0
- package/third_party/s2geometry/src/s2/s2cell_index.h +660 -0
- package/third_party/s2geometry/src/s2/s2cell_index_test.cc +411 -0
- package/third_party/s2geometry/src/s2/s2cell_test.cc +687 -0
- package/third_party/s2geometry/src/s2/s2cell_union.cc +515 -0
- package/third_party/s2geometry/src/s2/s2cell_union.h +399 -0
- package/third_party/s2geometry/src/s2/s2cell_union_test.cc +598 -0
- package/third_party/s2geometry/src/s2/s2centroids.cc +84 -0
- package/third_party/s2geometry/src/s2/s2centroids.h +87 -0
- package/third_party/s2geometry/src/s2/s2centroids_test.cc +82 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query.cc +123 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query.h +385 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query_base.h +841 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query_base_test.cc +63 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query_test.cc +412 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query.cc +106 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query.h +421 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query_base.h +946 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query_base_test.cc +59 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query_test.cc +505 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query_testing.h +91 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query.cc +66 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query.h +465 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query_base.h +767 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query_base_test.cc +63 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query_test.cc +312 -0
- package/third_party/s2geometry/src/s2/s2contains_point_query.h +328 -0
- package/third_party/s2geometry/src/s2/s2contains_point_query_test.cc +159 -0
- package/third_party/s2geometry/src/s2/s2contains_vertex_query.cc +39 -0
- package/third_party/s2geometry/src/s2/s2contains_vertex_query.h +66 -0
- package/third_party/s2geometry/src/s2/s2contains_vertex_query_test.cc +67 -0
- package/third_party/s2geometry/src/s2/s2convex_hull_query.cc +198 -0
- package/third_party/s2geometry/src/s2/s2convex_hull_query.h +110 -0
- package/third_party/s2geometry/src/s2/s2convex_hull_query_test.cc +208 -0
- package/third_party/s2geometry/src/s2/s2coords.cc +146 -0
- package/third_party/s2geometry/src/s2/s2coords.h +459 -0
- package/third_party/s2geometry/src/s2/s2coords_internal.h +71 -0
- package/third_party/s2geometry/src/s2/s2coords_test.cc +218 -0
- package/third_party/s2geometry/src/s2/s2crossing_edge_query.cc +380 -0
- package/third_party/s2geometry/src/s2/s2crossing_edge_query.h +220 -0
- package/third_party/s2geometry/src/s2/s2crossing_edge_query_test.cc +382 -0
- package/third_party/s2geometry/src/s2/s2debug.cc +23 -0
- package/third_party/s2geometry/src/s2/s2debug.h +69 -0
- package/third_party/s2geometry/src/s2/s2distance_target.h +165 -0
- package/third_party/s2geometry/src/s2/s2earth.cc +52 -0
- package/third_party/s2geometry/src/s2/s2earth.h +268 -0
- package/third_party/s2geometry/src/s2/s2earth_test.cc +146 -0
- package/third_party/s2geometry/src/s2/s2edge_clipping.cc +462 -0
- package/third_party/s2geometry/src/s2/s2edge_clipping.h +183 -0
- package/third_party/s2geometry/src/s2/s2edge_clipping_test.cc +335 -0
- package/third_party/s2geometry/src/s2/s2edge_crosser.cc +85 -0
- package/third_party/s2geometry/src/s2/s2edge_crosser.h +343 -0
- package/third_party/s2geometry/src/s2/s2edge_crosser_test.cc +264 -0
- package/third_party/s2geometry/src/s2/s2edge_crossings.cc +515 -0
- package/third_party/s2geometry/src/s2/s2edge_crossings.h +138 -0
- package/third_party/s2geometry/src/s2/s2edge_crossings_internal.h +59 -0
- package/third_party/s2geometry/src/s2/s2edge_crossings_test.cc +246 -0
- package/third_party/s2geometry/src/s2/s2edge_distances.cc +419 -0
- package/third_party/s2geometry/src/s2/s2edge_distances.h +192 -0
- package/third_party/s2geometry/src/s2/s2edge_distances_test.cc +539 -0
- package/third_party/s2geometry/src/s2/s2edge_tessellator.cc +276 -0
- package/third_party/s2geometry/src/s2/s2edge_tessellator.h +101 -0
- package/third_party/s2geometry/src/s2/s2edge_tessellator_test.cc +492 -0
- package/third_party/s2geometry/src/s2/s2edge_vector_shape.h +85 -0
- package/third_party/s2geometry/src/s2/s2edge_vector_shape_test.cc +66 -0
- package/third_party/s2geometry/src/s2/s2error.cc +29 -0
- package/third_party/s2geometry/src/s2/s2error.h +147 -0
- package/third_party/s2geometry/src/s2/s2error_test.cc +31 -0
- package/third_party/s2geometry/src/s2/s2furthest_edge_query.cc +117 -0
- package/third_party/s2geometry/src/s2/s2furthest_edge_query.h +439 -0
- package/third_party/s2geometry/src/s2/s2furthest_edge_query_test.cc +487 -0
- package/third_party/s2geometry/src/s2/s2latlng.cc +90 -0
- package/third_party/s2geometry/src/s2/s2latlng.h +234 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect.cc +727 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect.h +434 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect_bounder.cc +344 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect_bounder.h +89 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect_bounder_test.cc +306 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect_test.cc +1030 -0
- package/third_party/s2geometry/src/s2/s2latlng_test.cc +165 -0
- package/third_party/s2geometry/src/s2/s2lax_loop_shape.cc +104 -0
- package/third_party/s2geometry/src/s2/s2lax_loop_shape.h +153 -0
- package/third_party/s2geometry/src/s2/s2lax_loop_shape_test.cc +101 -0
- package/third_party/s2geometry/src/s2/s2lax_polygon_shape.cc +348 -0
- package/third_party/s2geometry/src/s2/s2lax_polygon_shape.h +183 -0
- package/third_party/s2geometry/src/s2/s2lax_polygon_shape_test.cc +234 -0
- package/third_party/s2geometry/src/s2/s2lax_polyline_shape.cc +118 -0
- package/third_party/s2geometry/src/s2/s2lax_polyline_shape.h +124 -0
- package/third_party/s2geometry/src/s2/s2lax_polyline_shape_test.cc +62 -0
- package/third_party/s2geometry/src/s2/s2loop.cc +1509 -0
- package/third_party/s2geometry/src/s2/s2loop.h +711 -0
- package/third_party/s2geometry/src/s2/s2loop_measures.cc +313 -0
- package/third_party/s2geometry/src/s2/s2loop_measures.h +280 -0
- package/third_party/s2geometry/src/s2/s2loop_measures_test.cc +367 -0
- package/third_party/s2geometry/src/s2/s2loop_test.cc +1371 -0
- package/third_party/s2geometry/src/s2/s2max_distance_targets.cc +265 -0
- package/third_party/s2geometry/src/s2/s2max_distance_targets.h +241 -0
- package/third_party/s2geometry/src/s2/s2max_distance_targets_test.cc +367 -0
- package/third_party/s2geometry/src/s2/s2measures.cc +128 -0
- package/third_party/s2geometry/src/s2/s2measures.h +78 -0
- package/third_party/s2geometry/src/s2/s2measures_test.cc +135 -0
- package/third_party/s2geometry/src/s2/s2metrics.cc +122 -0
- package/third_party/s2geometry/src/s2/s2metrics.h +199 -0
- package/third_party/s2geometry/src/s2/s2metrics_test.cc +127 -0
- package/third_party/s2geometry/src/s2/s2min_distance_targets.cc +295 -0
- package/third_party/s2geometry/src/s2/s2min_distance_targets.h +273 -0
- package/third_party/s2geometry/src/s2/s2min_distance_targets_test.cc +239 -0
- package/third_party/s2geometry/src/s2/s2padded_cell.cc +162 -0
- package/third_party/s2geometry/src/s2/s2padded_cell.h +108 -0
- package/third_party/s2geometry/src/s2/s2padded_cell_test.cc +138 -0
- package/third_party/s2geometry/src/s2/s2point.h +38 -0
- package/third_party/s2geometry/src/s2/s2point_compression.cc +388 -0
- package/third_party/s2geometry/src/s2/s2point_compression.h +78 -0
- package/third_party/s2geometry/src/s2/s2point_compression_test.cc +305 -0
- package/third_party/s2geometry/src/s2/s2point_index.h +345 -0
- package/third_party/s2geometry/src/s2/s2point_index_test.cc +147 -0
- package/third_party/s2geometry/src/s2/s2point_region.cc +72 -0
- package/third_party/s2geometry/src/s2/s2point_region.h +76 -0
- package/third_party/s2geometry/src/s2/s2point_region_test.cc +100 -0
- package/third_party/s2geometry/src/s2/s2point_span.h +57 -0
- package/third_party/s2geometry/src/s2/s2point_test.cc +47 -0
- package/third_party/s2geometry/src/s2/s2point_vector_shape.h +127 -0
- package/third_party/s2geometry/src/s2/s2point_vector_shape_test.cc +59 -0
- package/third_party/s2geometry/src/s2/s2pointutil.cc +131 -0
- package/third_party/s2geometry/src/s2/s2pointutil.h +138 -0
- package/third_party/s2geometry/src/s2/s2pointutil_test.cc +157 -0
- package/third_party/s2geometry/src/s2/s2polygon.cc +1569 -0
- package/third_party/s2geometry/src/s2/s2polygon.h +934 -0
- package/third_party/s2geometry/src/s2/s2polygon_test.cc +3025 -0
- package/third_party/s2geometry/src/s2/s2polyline.cc +645 -0
- package/third_party/s2geometry/src/s2/s2polyline.h +379 -0
- package/third_party/s2geometry/src/s2/s2polyline_alignment.cc +414 -0
- package/third_party/s2geometry/src/s2/s2polyline_alignment.h +245 -0
- package/third_party/s2geometry/src/s2/s2polyline_alignment_internal.h +158 -0
- package/third_party/s2geometry/src/s2/s2polyline_alignment_test.cc +610 -0
- package/third_party/s2geometry/src/s2/s2polyline_measures.cc +42 -0
- package/third_party/s2geometry/src/s2/s2polyline_measures.h +53 -0
- package/third_party/s2geometry/src/s2/s2polyline_measures_test.cc +57 -0
- package/third_party/s2geometry/src/s2/s2polyline_simplifier.cc +187 -0
- package/third_party/s2geometry/src/s2/s2polyline_simplifier.h +109 -0
- package/third_party/s2geometry/src/s2/s2polyline_simplifier_test.cc +165 -0
- package/third_party/s2geometry/src/s2/s2polyline_test.cc +554 -0
- package/third_party/s2geometry/src/s2/s2predicates.cc +1486 -0
- package/third_party/s2geometry/src/s2/s2predicates.h +282 -0
- package/third_party/s2geometry/src/s2/s2predicates_internal.h +135 -0
- package/third_party/s2geometry/src/s2/s2predicates_test.cc +1427 -0
- package/third_party/s2geometry/src/s2/s2projections.cc +109 -0
- package/third_party/s2geometry/src/s2/s2projections.h +161 -0
- package/third_party/s2geometry/src/s2/s2projections_test.cc +78 -0
- package/third_party/s2geometry/src/s2/s2r2rect.cc +88 -0
- package/third_party/s2geometry/src/s2/s2r2rect.h +292 -0
- package/third_party/s2geometry/src/s2/s2r2rect_test.cc +312 -0
- package/third_party/s2geometry/src/s2/s2region.cc +26 -0
- package/third_party/s2geometry/src/s2/s2region.h +142 -0
- package/third_party/s2geometry/src/s2/s2region_coverer.cc +514 -0
- package/third_party/s2geometry/src/s2/s2region_coverer.h +356 -0
- package/third_party/s2geometry/src/s2/s2region_coverer_test.cc +509 -0
- package/third_party/s2geometry/src/s2/s2region_intersection.cc +84 -0
- package/third_party/s2geometry/src/s2/s2region_intersection.h +79 -0
- package/third_party/s2geometry/src/s2/s2region_term_indexer.cc +270 -0
- package/third_party/s2geometry/src/s2/s2region_term_indexer.h +299 -0
- package/third_party/s2geometry/src/s2/s2region_term_indexer_test.cc +209 -0
- package/third_party/s2geometry/src/s2/s2region_test.cc +370 -0
- package/third_party/s2geometry/src/s2/s2region_union.cc +90 -0
- package/third_party/s2geometry/src/s2/s2region_union.h +83 -0
- package/third_party/s2geometry/src/s2/s2region_union_test.cc +89 -0
- package/third_party/s2geometry/src/s2/s2shape.h +283 -0
- package/third_party/s2geometry/src/s2/s2shape_index.cc +321 -0
- package/third_party/s2geometry/src/s2/s2shape_index.h +781 -0
- package/third_party/s2geometry/src/s2/s2shape_index_buffered_region.cc +113 -0
- package/third_party/s2geometry/src/s2/s2shape_index_buffered_region.h +135 -0
- package/third_party/s2geometry/src/s2/s2shape_index_buffered_region_test.cc +162 -0
- package/third_party/s2geometry/src/s2/s2shape_index_measures.cc +92 -0
- package/third_party/s2geometry/src/s2/s2shape_index_measures.h +100 -0
- package/third_party/s2geometry/src/s2/s2shape_index_measures_test.cc +136 -0
- package/third_party/s2geometry/src/s2/s2shape_index_region.h +350 -0
- package/third_party/s2geometry/src/s2/s2shape_index_region_test.cc +161 -0
- package/third_party/s2geometry/src/s2/s2shape_index_test.cc +24 -0
- package/third_party/s2geometry/src/s2/s2shape_measures.cc +138 -0
- package/third_party/s2geometry/src/s2/s2shape_measures.h +95 -0
- package/third_party/s2geometry/src/s2/s2shape_measures_test.cc +139 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries.cc +120 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries.h +66 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries_test.cc +170 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_coding.cc +253 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_coding.h +283 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_coding_test.cc +54 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force.cc +40 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force.h +41 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force_test.cc +55 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_count_edges.h +57 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_count_edges_test.cc +43 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator.cc +45 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator.h +72 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator_test.cc +116 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point.cc +107 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point.h +48 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point_test.cc +104 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator.cc +58 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator.h +65 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator_test.cc +61 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_shape_edge.h +58 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_shape_edge_id.h +97 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_testing.cc +104 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_testing.h +36 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs.cc +440 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs.h +72 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs_test.cc +184 -0
- package/third_party/s2geometry/src/s2/s2testing.cc +464 -0
- package/third_party/s2geometry/src/s2/s2testing.h +385 -0
- package/third_party/s2geometry/src/s2/s2testing_test.cc +166 -0
- package/third_party/s2geometry/src/s2/s2text_format.cc +506 -0
- package/third_party/s2geometry/src/s2/s2text_format.h +289 -0
- package/third_party/s2geometry/src/s2/s2text_format_test.cc +417 -0
- package/third_party/s2geometry/src/s2/s2wedge_relations.cc +80 -0
- package/third_party/s2geometry/src/s2/s2wedge_relations.h +64 -0
- package/third_party/s2geometry/src/s2/s2wedge_relations_test.cc +89 -0
- package/third_party/s2geometry/src/s2/sequence_lexicon.h +296 -0
- package/third_party/s2geometry/src/s2/sequence_lexicon_test.cc +113 -0
- package/third_party/s2geometry/src/s2/strings/ostringstream.cc +35 -0
- package/third_party/s2geometry/src/s2/strings/ostringstream.h +105 -0
- package/third_party/s2geometry/src/s2/strings/serialize.cc +46 -0
- package/third_party/s2geometry/src/s2/strings/serialize.h +40 -0
- package/third_party/s2geometry/src/s2/third_party/absl/algorithm/algorithm.h +187 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/attributes.h +666 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/casts.h +189 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/config.h +462 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/dynamic_annotations.cc +129 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/dynamic_annotations.h +394 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/atomic_hook.h +168 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/identity.h +33 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/inline_variable.h +117 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/invoke.h +188 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/raw_logging.cc +254 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/raw_logging.h +205 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/throw_delegate.cc +106 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/throw_delegate.h +71 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/unaligned_access.h +322 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/log_severity.h +77 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/macros.h +236 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/optimization.h +177 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/policy_checks.h +124 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/port.h +97 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/thread_annotations.h +277 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/fixed_array.h +523 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/inlined_vector.h +1453 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/internal/compressed_tuple.h +191 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/internal/container_memory.h +424 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/internal/layout.h +739 -0
- package/third_party/s2geometry/src/s2/third_party/absl/memory/memory.h +755 -0
- package/third_party/s2geometry/src/s2/third_party/absl/meta/type_traits.h +436 -0
- package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128.cc +232 -0
- package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128.h +656 -0
- package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128_have_intrinsic.inc +3 -0
- package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128_no_intrinsic.inc +3 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii.cc +198 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii.h +239 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii_ctype.h +66 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/bits.h +53 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/memutil.cc +110 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/memutil.h +146 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/resize_uninitialized.h +72 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/match.cc +38 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/match.h +89 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/numbers.cc +909 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/numbers.h +187 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_cat.cc +240 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_cat.h +398 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_join.h +22 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_split.cc +47 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_split.h +43 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/string_view.cc +245 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/string_view.h +602 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/strip.cc +42 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/strip.h +130 -0
- package/third_party/s2geometry/src/s2/third_party/absl/types/span.h +793 -0
- package/third_party/s2geometry/src/s2/third_party/absl/utility/utility.h +299 -0
- package/third_party/s2geometry/src/s2/util/bits/bit-interleave.cc +274 -0
- package/third_party/s2geometry/src/s2/util/bits/bit-interleave.h +53 -0
- package/third_party/s2geometry/src/s2/util/bits/bits.cc +155 -0
- package/third_party/s2geometry/src/s2/util/bits/bits.h +745 -0
- package/third_party/s2geometry/src/s2/util/coding/coder.cc +83 -0
- package/third_party/s2geometry/src/s2/util/coding/coder.h +553 -0
- package/third_party/s2geometry/src/s2/util/coding/nth-derivative.h +134 -0
- package/third_party/s2geometry/src/s2/util/coding/transforms.h +62 -0
- package/third_party/s2geometry/src/s2/util/coding/varint.cc +289 -0
- package/third_party/s2geometry/src/s2/util/coding/varint.h +476 -0
- package/third_party/s2geometry/src/s2/util/endian/endian.h +859 -0
- package/third_party/s2geometry/src/s2/util/gtl/btree.h +2471 -0
- package/third_party/s2geometry/src/s2/util/gtl/btree_container.h +411 -0
- package/third_party/s2geometry/src/s2/util/gtl/btree_map.h +79 -0
- package/third_party/s2geometry/src/s2/util/gtl/btree_set.h +73 -0
- package/third_party/s2geometry/src/s2/util/gtl/compact_array.h +653 -0
- package/third_party/s2geometry/src/s2/util/gtl/container_logging.h +291 -0
- package/third_party/s2geometry/src/s2/util/gtl/dense_hash_set.h +358 -0
- package/third_party/s2geometry/src/s2/util/gtl/densehashtable.h +1493 -0
- package/third_party/s2geometry/src/s2/util/gtl/hashtable_common.h +253 -0
- package/third_party/s2geometry/src/s2/util/gtl/layout.h +28 -0
- package/third_party/s2geometry/src/s2/util/gtl/legacy_random_shuffle.h +77 -0
- package/third_party/s2geometry/src/s2/util/hash/mix.h +76 -0
- package/third_party/s2geometry/src/s2/util/math/exactfloat/exactfloat.cc +832 -0
- package/third_party/s2geometry/src/s2/util/math/exactfloat/exactfloat.h +646 -0
- package/third_party/s2geometry/src/s2/util/math/mathutil.cc +75 -0
- package/third_party/s2geometry/src/s2/util/math/mathutil.h +189 -0
- package/third_party/s2geometry/src/s2/util/math/matrix3x3.h +574 -0
- package/third_party/s2geometry/src/s2/util/math/vector.h +569 -0
- package/third_party/s2geometry/src/s2/util/math/vector3_hash.h +54 -0
- package/third_party/s2geometry/src/s2/util/units/length-units.cc +21 -0
- package/third_party/s2geometry/src/s2/util/units/length-units.h +135 -0
- package/third_party/s2geometry/src/s2/util/units/physical-units.h +313 -0
- package/third_party/s2geometry/src/s2/value_lexicon.h +234 -0
- package/third_party/s2geometry/src/s2/value_lexicon_test.cc +121 -0
- package/third_party/s2geometry/third_party/cmake/FindGFlags.cmake +48 -0
- package/third_party/s2geometry/third_party/cmake/FindGlog.cmake +48 -0
|
@@ -0,0 +1,399 @@
|
|
|
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_S2CELL_UNION_H_
|
|
19
|
+
#define S2_S2CELL_UNION_H_
|
|
20
|
+
|
|
21
|
+
#include <vector>
|
|
22
|
+
|
|
23
|
+
#include "s2/base/commandlineflags.h"
|
|
24
|
+
#include "s2/base/integral_types.h"
|
|
25
|
+
#include "s2/base/logging.h"
|
|
26
|
+
#include "s2/_fp_contract_off.h"
|
|
27
|
+
#include "s2/s2cell_id.h"
|
|
28
|
+
#include "s2/s2region.h"
|
|
29
|
+
#include "s2/third_party/absl/base/macros.h"
|
|
30
|
+
|
|
31
|
+
class Decoder;
|
|
32
|
+
class Encoder;
|
|
33
|
+
class S1Angle;
|
|
34
|
+
class S2Cap;
|
|
35
|
+
class S2Cell;
|
|
36
|
+
class S2LatLngRect;
|
|
37
|
+
|
|
38
|
+
S2_DECLARE_bool(s2debug);
|
|
39
|
+
S2_DECLARE_int32(s2cell_union_decode_max_num_cells);
|
|
40
|
+
|
|
41
|
+
// An S2CellUnion is a region consisting of cells of various sizes. Typically
|
|
42
|
+
// a cell union is used to approximate some other shape. There is a tradeoff
|
|
43
|
+
// between the accuracy of the approximation and how many cells are used.
|
|
44
|
+
// Unlike polygons, cells have a fixed hierarchical structure. This makes
|
|
45
|
+
// them more suitable for optimizations based on preprocessing.
|
|
46
|
+
//
|
|
47
|
+
// An S2CellUnion is represented as a vector of sorted, non-overlapping
|
|
48
|
+
// S2CellIds. By default the vector is also "normalized", meaning that groups
|
|
49
|
+
// of 4 child cells have been replaced by their parent cell whenever possible.
|
|
50
|
+
// S2CellUnions are not required to be normalized, but certain operations will
|
|
51
|
+
// return different results if they are not (e.g., Contains(S2CellUnion).)
|
|
52
|
+
//
|
|
53
|
+
// S2CellUnion is movable and copyable.
|
|
54
|
+
class S2CellUnion final : public S2Region {
|
|
55
|
+
public:
|
|
56
|
+
// Creates an empty cell union.
|
|
57
|
+
S2CellUnion() {}
|
|
58
|
+
|
|
59
|
+
// Constructs a cell union with the given S2CellIds, then calls Normalize()
|
|
60
|
+
// to sort them, remove duplicates, and merge cells when possible. (See
|
|
61
|
+
// FromNormalized if your vector is already normalized.)
|
|
62
|
+
//
|
|
63
|
+
// The argument is passed by value, so if you are passing a named variable
|
|
64
|
+
// and have no further use for it, consider using std::move().
|
|
65
|
+
//
|
|
66
|
+
// A cell union containing a single S2CellId may be constructed like this:
|
|
67
|
+
//
|
|
68
|
+
// S2CellUnion example({cell_id});
|
|
69
|
+
explicit S2CellUnion(std::vector<S2CellId> cell_ids);
|
|
70
|
+
|
|
71
|
+
// Convenience constructor that accepts a vector of uint64. Note that
|
|
72
|
+
// unlike the constructor above, this one makes a copy of "cell_ids".
|
|
73
|
+
explicit S2CellUnion(const std::vector<uint64>& cell_ids);
|
|
74
|
+
|
|
75
|
+
// Constructs a cell union for the whole sphere.
|
|
76
|
+
static S2CellUnion WholeSphere();
|
|
77
|
+
|
|
78
|
+
// Constructs a cell union from S2CellIds that have already been normalized
|
|
79
|
+
// (typically because they were extracted from another S2CellUnion).
|
|
80
|
+
//
|
|
81
|
+
// The argument is passed by value, so if you are passing a named variable
|
|
82
|
+
// and have no further use for it, consider using std::move().
|
|
83
|
+
//
|
|
84
|
+
// REQUIRES: "cell_ids" satisfies the requirements of IsNormalized().
|
|
85
|
+
static S2CellUnion FromNormalized(std::vector<S2CellId> cell_ids);
|
|
86
|
+
|
|
87
|
+
// Constructs a cell union from a vector of sorted, non-overlapping
|
|
88
|
+
// S2CellIds. Unlike the other constructors, FromVerbatim does not require
|
|
89
|
+
// that groups of 4 child cells have been replaced by their parent cell. In
|
|
90
|
+
// other words, "cell_ids" must satisfy the requirements of IsValid() but
|
|
91
|
+
// not necessarily IsNormalized().
|
|
92
|
+
//
|
|
93
|
+
// Note that if the cell union is not normalized, certain operations may
|
|
94
|
+
// return different results (e.g., Contains(S2CellUnion)).
|
|
95
|
+
//
|
|
96
|
+
// REQUIRES: "cell_ids" satisfies the requirements of IsValid().
|
|
97
|
+
static S2CellUnion FromVerbatim(std::vector<S2CellId> cell_ids);
|
|
98
|
+
|
|
99
|
+
// Constructs a cell union that corresponds to a continuous range of cell
|
|
100
|
+
// ids. The output is a normalized collection of cell ids that covers the
|
|
101
|
+
// leaf cells between "min_id" and "max_id" inclusive.
|
|
102
|
+
//
|
|
103
|
+
// REQUIRES: min_id.is_leaf(), max_id.is_leaf(), min_id <= max_id.
|
|
104
|
+
static S2CellUnion FromMinMax(S2CellId min_id, S2CellId max_id);
|
|
105
|
+
|
|
106
|
+
// Like FromMinMax() except that the union covers the range of leaf cells
|
|
107
|
+
// from "begin" (inclusive) to "end" (exclusive), as with Python ranges or
|
|
108
|
+
// STL iterator ranges. If (begin == end) the result is empty.
|
|
109
|
+
//
|
|
110
|
+
// REQUIRES: begin.is_leaf(), end.is_leaf(), begin <= end.
|
|
111
|
+
static S2CellUnion FromBeginEnd(S2CellId begin, S2CellId end);
|
|
112
|
+
|
|
113
|
+
// Init() methods corresponding to the constructors/factory methods above.
|
|
114
|
+
// TODO(ericv): Consider deprecating these methods in favor of using the
|
|
115
|
+
// constructors and move assignment operator.
|
|
116
|
+
void Init(std::vector<S2CellId> cell_ids);
|
|
117
|
+
void Init(const std::vector<uint64>& cell_ids);
|
|
118
|
+
void InitFromMinMax(S2CellId min_id, S2CellId max_id);
|
|
119
|
+
void InitFromBeginEnd(S2CellId begin, S2CellId end);
|
|
120
|
+
|
|
121
|
+
// Clears the contents of the cell union and minimizes memory usage.
|
|
122
|
+
void Clear();
|
|
123
|
+
|
|
124
|
+
// Gives ownership of the vector data to the client without copying, and
|
|
125
|
+
// clears the content of the cell union. The original data in cell_ids
|
|
126
|
+
// is lost if there was any.
|
|
127
|
+
std::vector<S2CellId> Release();
|
|
128
|
+
|
|
129
|
+
// Convenience methods for accessing the individual cell ids.
|
|
130
|
+
int num_cells() const { return static_cast<int>(cell_ids_.size()); }
|
|
131
|
+
S2CellId cell_id(int i) const { return cell_ids_[i]; }
|
|
132
|
+
|
|
133
|
+
// Vector-like methods for accessing the individual cell ids.
|
|
134
|
+
size_t size() const { return cell_ids_.size(); }
|
|
135
|
+
bool empty() const { return cell_ids_.empty(); }
|
|
136
|
+
S2CellId operator[](int i) const { return cell_ids_[i]; }
|
|
137
|
+
|
|
138
|
+
// Standard begin/end methods, to allow range-based for loops:
|
|
139
|
+
//
|
|
140
|
+
// for (S2CellId id : cell_union) { ... }
|
|
141
|
+
std::vector<S2CellId>::const_iterator begin() const;
|
|
142
|
+
std::vector<S2CellId>::const_iterator end() const;
|
|
143
|
+
|
|
144
|
+
// Direct access to the underlying vector for STL algorithms.
|
|
145
|
+
const std::vector<S2CellId>& cell_ids() const { return cell_ids_; }
|
|
146
|
+
|
|
147
|
+
// Returns true if the cell union is valid, meaning that the S2CellIds are
|
|
148
|
+
// valid, non-overlapping, and sorted in increasing order.
|
|
149
|
+
bool IsValid() const;
|
|
150
|
+
|
|
151
|
+
// Returns true if the cell union is normalized, meaning that it is
|
|
152
|
+
// satisfies IsValid() and that no four cells have a common parent.
|
|
153
|
+
// Certain operations such as Contains(S2CellUnion) will return a different
|
|
154
|
+
// result if the cell union is not normalized.
|
|
155
|
+
bool IsNormalized() const;
|
|
156
|
+
|
|
157
|
+
// Normalizes the cell union by discarding cells that are contained by other
|
|
158
|
+
// cells, replacing groups of 4 child cells by their parent cell whenever
|
|
159
|
+
// possible, and sorting all the cell ids in increasing order.
|
|
160
|
+
//
|
|
161
|
+
// Returns true if the number of cells was reduced.
|
|
162
|
+
// TODO(ericv): Change this method to return void.
|
|
163
|
+
bool Normalize();
|
|
164
|
+
|
|
165
|
+
// Replaces "output" with an expanded version of the cell union where any
|
|
166
|
+
// cells whose level is less than "min_level" or where (level - min_level)
|
|
167
|
+
// is not a multiple of "level_mod" are replaced by their children, until
|
|
168
|
+
// either both of these conditions are satisfied or the maximum level is
|
|
169
|
+
// reached.
|
|
170
|
+
//
|
|
171
|
+
// This method allows a covering generated by S2RegionCoverer using
|
|
172
|
+
// min_level() or level_mod() constraints to be stored as a normalized cell
|
|
173
|
+
// union (which allows various geometric computations to be done) and then
|
|
174
|
+
// converted back to the original list of cell ids that satisfies the
|
|
175
|
+
// desired constraints.
|
|
176
|
+
void Denormalize(int min_level, int level_mod,
|
|
177
|
+
std::vector<S2CellId>* output) const;
|
|
178
|
+
|
|
179
|
+
// If there are more than "excess" elements of the cell_ids() vector that
|
|
180
|
+
// are allocated but unused, reallocates the array to eliminate the excess
|
|
181
|
+
// space. This reduces memory usage when many cell unions need to be held
|
|
182
|
+
// in memory at once.
|
|
183
|
+
void Pack(int excess = 0);
|
|
184
|
+
|
|
185
|
+
// Returns true if the cell union contains the given cell id. Containment
|
|
186
|
+
// is defined with respect to regions, e.g. a cell contains its 4 children.
|
|
187
|
+
// This is a fast operation (logarithmic in the size of the cell union).
|
|
188
|
+
//
|
|
189
|
+
// CAVEAT: If you have constructed a non-normalized S2CellUnion using
|
|
190
|
+
// FromVerbatim, note that groups of 4 child cells are *not* considered to
|
|
191
|
+
// contain their parent cell. To get this behavior you must use one of the
|
|
192
|
+
// other constructors or call Normalize() explicitly.
|
|
193
|
+
bool Contains(S2CellId id) const;
|
|
194
|
+
|
|
195
|
+
// Returns true if the cell union intersects the given cell id.
|
|
196
|
+
// This is a fast operation (logarithmic in the size of the cell union).
|
|
197
|
+
bool Intersects(S2CellId id) const;
|
|
198
|
+
|
|
199
|
+
// Returns true if this cell union contains the given other cell union.
|
|
200
|
+
//
|
|
201
|
+
// CAVEAT: If you have constructed a non-normalized S2CellUnion using
|
|
202
|
+
// FromVerbatim, note that groups of 4 child cells are *not* considered to
|
|
203
|
+
// contain their parent cell. To get this behavior you must use one of the
|
|
204
|
+
// other constructors or call Normalize() explicitly.
|
|
205
|
+
bool Contains(const S2CellUnion& y) const;
|
|
206
|
+
|
|
207
|
+
// Returns true if this cell union intersects the given other cell union.
|
|
208
|
+
bool Intersects(const S2CellUnion& y) const;
|
|
209
|
+
|
|
210
|
+
// Returns the union of the two given cell unions.
|
|
211
|
+
S2CellUnion Union(const S2CellUnion& y) const;
|
|
212
|
+
|
|
213
|
+
// Returns the intersection of the two given cell unions.
|
|
214
|
+
S2CellUnion Intersection(const S2CellUnion& y) const;
|
|
215
|
+
|
|
216
|
+
// Specialized version of GetIntersection() that returns the intersection of
|
|
217
|
+
// a cell union with an S2CellId. This can be useful for splitting a cell
|
|
218
|
+
// union into pieces.
|
|
219
|
+
S2CellUnion Intersection(S2CellId id) const;
|
|
220
|
+
|
|
221
|
+
// Returns the difference of the two given cell unions.
|
|
222
|
+
S2CellUnion Difference(const S2CellUnion& y) const;
|
|
223
|
+
|
|
224
|
+
// Expands the cell union by adding a buffer of cells at "expand_level"
|
|
225
|
+
// around the union boundary.
|
|
226
|
+
//
|
|
227
|
+
// For each cell "c" in the union, we add all neighboring cells at level
|
|
228
|
+
// "expand_level" that are adjacent to "c". Note that there can be many
|
|
229
|
+
// such cells if "c" is large compared to "expand_level". If "c" is smaller
|
|
230
|
+
// than "expand_level", we first add the parent of "c" at "expand_level" and
|
|
231
|
+
// then add all the neighbors of that cell.
|
|
232
|
+
//
|
|
233
|
+
// Note that the size of the output is exponential in "expand_level". For
|
|
234
|
+
// example, if expand_level == 20 and the input has a cell at level 10,
|
|
235
|
+
// there will be on the order of 4000 adjacent cells in the output. For
|
|
236
|
+
// most applications the Expand(min_radius, max_level_diff) method below is
|
|
237
|
+
// easier to use.
|
|
238
|
+
void Expand(int expand_level);
|
|
239
|
+
|
|
240
|
+
// Expands the cell union such that it contains all points whose distance to
|
|
241
|
+
// the cell union is at most "min_radius", but do not use cells that are
|
|
242
|
+
// more than "max_level_diff" levels higher than the largest cell in the
|
|
243
|
+
// input. The second parameter controls the tradeoff between accuracy and
|
|
244
|
+
// output size when a large region is being expanded by a small amount
|
|
245
|
+
// (e.g. expanding Canada by 1km). For example, if max_level_diff == 4 the
|
|
246
|
+
// region will always be expanded by approximately 1/16 the width of its
|
|
247
|
+
// largest cell. Note that in the worst case, the number of cells in the
|
|
248
|
+
// output can be up to 4 * (1 + 2 ** max_level_diff) times larger than the
|
|
249
|
+
// number of cells in the input.
|
|
250
|
+
void Expand(S1Angle min_radius, int max_level_diff);
|
|
251
|
+
|
|
252
|
+
// The number of leaf cells covered by the union.
|
|
253
|
+
// This will be no more than 6*2^60 for the whole sphere.
|
|
254
|
+
uint64 LeafCellsCovered() const;
|
|
255
|
+
|
|
256
|
+
// Approximates this cell union's area in steradians by summing the average
|
|
257
|
+
// area of each contained cell's average area, using the AverageArea method
|
|
258
|
+
// from the S2Cell class. This is equivalent to the number of leaves covered,
|
|
259
|
+
// multiplied by the average area of a leaf. Note that AverageArea does not
|
|
260
|
+
// take into account distortion of cell, and thus may be off by up to a
|
|
261
|
+
// factor of up to 1.7.
|
|
262
|
+
//
|
|
263
|
+
// NOTE: Since this is proportional to LeafCellsCovered(), it is
|
|
264
|
+
// always better to use that function if all you care about is
|
|
265
|
+
// the relative average area between objects.
|
|
266
|
+
double AverageBasedArea() const;
|
|
267
|
+
|
|
268
|
+
// Calculates this cell union's area in steradians by summing the approximate
|
|
269
|
+
// area for each contained cell, using the ApproxArea method from the S2Cell
|
|
270
|
+
// class.
|
|
271
|
+
double ApproxArea() const;
|
|
272
|
+
|
|
273
|
+
// Calculates this cell union's area in steradians by summing the exact area
|
|
274
|
+
// for each contained cell, using the Exact method from the S2Cell class.
|
|
275
|
+
double ExactArea() const;
|
|
276
|
+
|
|
277
|
+
// Return true if two cell unions are identical.
|
|
278
|
+
friend bool operator==(const S2CellUnion& x, const S2CellUnion& y);
|
|
279
|
+
|
|
280
|
+
// Return true if two cell unions are different.
|
|
281
|
+
friend bool operator!=(const S2CellUnion& x, const S2CellUnion& y);
|
|
282
|
+
|
|
283
|
+
////////////////////////////////////////////////////////////////////////
|
|
284
|
+
// S2Region interface (see s2region.h for details):
|
|
285
|
+
|
|
286
|
+
S2CellUnion* Clone() const override;
|
|
287
|
+
S2Cap GetCapBound() const override;
|
|
288
|
+
S2LatLngRect GetRectBound() const override;
|
|
289
|
+
|
|
290
|
+
// This is a fast operation (logarithmic in the size of the cell union).
|
|
291
|
+
bool Contains(const S2Cell& cell) const override;
|
|
292
|
+
|
|
293
|
+
// This is a fast operation (logarithmic in the size of the cell union).
|
|
294
|
+
bool MayIntersect(const S2Cell& cell) const override;
|
|
295
|
+
|
|
296
|
+
// The point 'p' does not need to be normalized.
|
|
297
|
+
// This is a fast operation (logarithmic in the size of the cell union).
|
|
298
|
+
bool Contains(const S2Point& p) const override;
|
|
299
|
+
|
|
300
|
+
// Appends a serialized representation of the S2CellUnion to "encoder".
|
|
301
|
+
//
|
|
302
|
+
// REQUIRES: "encoder" uses the default constructor, so that its buffer
|
|
303
|
+
// can be enlarged as necessary by calling Ensure(int).
|
|
304
|
+
void Encode(Encoder* const encoder) const;
|
|
305
|
+
|
|
306
|
+
// Decodes an S2CellUnion encoded with Encode(). Returns true on success.
|
|
307
|
+
bool Decode(Decoder* const decoder);
|
|
308
|
+
|
|
309
|
+
////////////////////////////////////////////////////////////////////////
|
|
310
|
+
// Static methods intended for high-performance clients that prefer to
|
|
311
|
+
// manage their own storage.
|
|
312
|
+
|
|
313
|
+
// Like Normalize(), but works with a vector of S2CellIds.
|
|
314
|
+
// Equivalent to:
|
|
315
|
+
// *cell_ids = S2CellUnion(std::move(*cell_ids)).Release();
|
|
316
|
+
static bool Normalize(std::vector<S2CellId>* cell_ids);
|
|
317
|
+
|
|
318
|
+
// Like Denormalize(), but works with a vector of S2CellIds.
|
|
319
|
+
// REQUIRES: out != &in
|
|
320
|
+
static void Denormalize(const std::vector<S2CellId>& in,
|
|
321
|
+
int min_level, int level_mod,
|
|
322
|
+
std::vector<S2CellId>* out);
|
|
323
|
+
|
|
324
|
+
// Like GetIntersection(), but works directly with vectors of S2CellIds,
|
|
325
|
+
// Equivalent to:
|
|
326
|
+
//
|
|
327
|
+
// *out = S2CellUnion(x).Intersection(S2CellUnion(y)).Release()
|
|
328
|
+
//
|
|
329
|
+
// except that this method has slightly more relaxed normalization
|
|
330
|
+
// requirements: the input vectors may contain groups of 4 child cells that
|
|
331
|
+
// all have the same parent. (In a normalized S2CellUnion, such groups are
|
|
332
|
+
// always replaced by the parent cell.)
|
|
333
|
+
static void GetIntersection(const std::vector<S2CellId>& x,
|
|
334
|
+
const std::vector<S2CellId>& y,
|
|
335
|
+
std::vector<S2CellId>* out);
|
|
336
|
+
|
|
337
|
+
private:
|
|
338
|
+
friend class S2CellUnionTestPeer; // For creating invalid S2CellUnions.
|
|
339
|
+
|
|
340
|
+
// Internal constructor that does not check "cell_ids" for validity.
|
|
341
|
+
enum VerbatimFlag { VERBATIM };
|
|
342
|
+
S2CellUnion(std::vector<S2CellId> cell_ids, VerbatimFlag verbatim)
|
|
343
|
+
: cell_ids_(std::move(cell_ids)) {}
|
|
344
|
+
|
|
345
|
+
// Converts a vector of uint64 to a vector of S2CellIds.
|
|
346
|
+
static std::vector<S2CellId> ToS2CellIds(const std::vector<uint64>& ids);
|
|
347
|
+
|
|
348
|
+
std::vector<S2CellId> cell_ids_;
|
|
349
|
+
};
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
////////////////// Implementation details follow ////////////////////
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
inline S2CellUnion::S2CellUnion(std::vector<S2CellId> cell_ids)
|
|
356
|
+
: cell_ids_(std::move(cell_ids)) {
|
|
357
|
+
Normalize();
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
inline S2CellUnion S2CellUnion::FromNormalized(std::vector<S2CellId> cell_ids) {
|
|
361
|
+
S2CellUnion result(std::move(cell_ids), VERBATIM);
|
|
362
|
+
S2_DCHECK(result.IsNormalized());
|
|
363
|
+
return result;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
inline S2CellUnion S2CellUnion::FromVerbatim(std::vector<S2CellId> cell_ids) {
|
|
367
|
+
S2CellUnion result(std::move(cell_ids), VERBATIM);
|
|
368
|
+
S2_DCHECK(!FLAGS_s2debug || result.IsValid());
|
|
369
|
+
return result;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
inline void S2CellUnion::Init(std::vector<S2CellId> cell_ids) {
|
|
373
|
+
cell_ids_ = std::move(cell_ids);
|
|
374
|
+
Normalize();
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
inline void S2CellUnion::Clear() {
|
|
378
|
+
// swap() guarantees to reduce the RHS vector's size and capacity
|
|
379
|
+
// to zero (as opposed to clear(), shrink_to_fit() sequence).
|
|
380
|
+
std::vector<S2CellId>().swap(cell_ids_);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
inline std::vector<S2CellId> S2CellUnion::Release() {
|
|
384
|
+
// vector's rvalue reference constructor does not necessarily leave
|
|
385
|
+
// moved-from value in empty state, so swap instead.
|
|
386
|
+
std::vector<S2CellId> cell_ids;
|
|
387
|
+
cell_ids_.swap(cell_ids);
|
|
388
|
+
return cell_ids;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
inline std::vector<S2CellId>::const_iterator S2CellUnion::begin() const {
|
|
392
|
+
return cell_ids_.begin();
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
inline std::vector<S2CellId>::const_iterator S2CellUnion::end() const {
|
|
396
|
+
return cell_ids_.end();
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
#endif // S2_S2CELL_UNION_H_
|