@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,356 @@
|
|
|
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_S2REGION_COVERER_H_
|
|
19
|
+
#define S2_S2REGION_COVERER_H_
|
|
20
|
+
|
|
21
|
+
#include <cstddef>
|
|
22
|
+
#include <new>
|
|
23
|
+
#include <queue>
|
|
24
|
+
#include <utility>
|
|
25
|
+
#include <vector>
|
|
26
|
+
|
|
27
|
+
#include "s2/third_party/absl/base/macros.h"
|
|
28
|
+
#include "s2/_fp_contract_off.h"
|
|
29
|
+
#include "s2/s2cell.h"
|
|
30
|
+
#include "s2/s2cell_id.h"
|
|
31
|
+
#include "s2/s2cell_union.h"
|
|
32
|
+
|
|
33
|
+
class S2Region;
|
|
34
|
+
|
|
35
|
+
// An S2RegionCoverer is a class that allows arbitrary regions to be
|
|
36
|
+
// approximated as unions of cells (S2CellUnion). This is useful for
|
|
37
|
+
// implementing various sorts of search and precomputation operations.
|
|
38
|
+
//
|
|
39
|
+
// Typical usage:
|
|
40
|
+
//
|
|
41
|
+
// S2RegionCoverer::Options options;
|
|
42
|
+
// options.set_max_cells(5);
|
|
43
|
+
// S2RegionCoverer coverer(options);
|
|
44
|
+
// S2Cap cap(center, radius);
|
|
45
|
+
// S2CellUnion covering = coverer.GetCovering(cap);
|
|
46
|
+
//
|
|
47
|
+
// This yields a vector of at most 5 cells that is guaranteed to cover the
|
|
48
|
+
// given cap (a disc-shaped region on the sphere).
|
|
49
|
+
//
|
|
50
|
+
// The approximation algorithm is not optimal but does a pretty good job in
|
|
51
|
+
// practice. The output does not always use the maximum number of cells
|
|
52
|
+
// allowed, both because this would not always yield a better approximation,
|
|
53
|
+
// and because max_cells() is a limit on how much work is done exploring the
|
|
54
|
+
// possible covering as well as a limit on the final output size.
|
|
55
|
+
//
|
|
56
|
+
// Because it is an approximation algorithm, one should not rely on the
|
|
57
|
+
// stability of the output. In particular, the output of the covering algorithm
|
|
58
|
+
// may change across different versions of the library.
|
|
59
|
+
//
|
|
60
|
+
// One can also generate interior coverings, which are sets of cells which
|
|
61
|
+
// are entirely contained within a region. Interior coverings can be
|
|
62
|
+
// empty, even for non-empty regions, if there are no cells that satisfy
|
|
63
|
+
// the provided constraints and are contained by the region. Note that for
|
|
64
|
+
// performance reasons, it is wise to specify a max_level when computing
|
|
65
|
+
// interior coverings - otherwise for regions with small or zero area, the
|
|
66
|
+
// algorithm may spend a lot of time subdividing cells all the way to leaf
|
|
67
|
+
// level to try to find contained cells.
|
|
68
|
+
class S2RegionCoverer {
|
|
69
|
+
public:
|
|
70
|
+
#ifndef SWIG
|
|
71
|
+
class Options {
|
|
72
|
+
public:
|
|
73
|
+
// Sets the desired maximum number of cells in the approximation. Note
|
|
74
|
+
// the following:
|
|
75
|
+
//
|
|
76
|
+
// - For any setting of max_cells(), up to 6 cells may be returned if
|
|
77
|
+
// that is the minimum number required (e.g. if the region intersects
|
|
78
|
+
// all six cube faces). Even for very tiny regions, up to 3 cells may
|
|
79
|
+
// be returned if they happen to be located at the intersection of
|
|
80
|
+
// three cube faces.
|
|
81
|
+
//
|
|
82
|
+
// - min_level() takes priority over max_cells(), i.e. cells below the
|
|
83
|
+
// given level will never be used even if this causes a large number of
|
|
84
|
+
// cells to be returned.
|
|
85
|
+
//
|
|
86
|
+
// - If max_cells() is less than 4, the area of the covering may be
|
|
87
|
+
// arbitrarily large compared to the area of the original region even
|
|
88
|
+
// if the region is convex (e.g. an S2Cap or S2LatLngRect).
|
|
89
|
+
//
|
|
90
|
+
// Accuracy is measured by dividing the area of the covering by the area
|
|
91
|
+
// of the original region. The following table shows the median and worst
|
|
92
|
+
// case values for this area ratio on a test case consisting of 100,000
|
|
93
|
+
// spherical caps of random size (generated using s2region_coverer_test):
|
|
94
|
+
//
|
|
95
|
+
// max_cells: 3 4 5 6 8 12 20 100 1000
|
|
96
|
+
// median ratio: 5.33 3.32 2.73 2.34 1.98 1.66 1.42 1.11 1.01
|
|
97
|
+
// worst case: 215518 14.41 9.72 5.26 3.91 2.75 1.92 1.20 1.02
|
|
98
|
+
//
|
|
99
|
+
// The default value of 8 gives a reasonable tradeoff between the number
|
|
100
|
+
// of cells used and the accuracy of the approximation.
|
|
101
|
+
//
|
|
102
|
+
// DEFAULT: kDefaultMaxCells
|
|
103
|
+
static constexpr int kDefaultMaxCells = 8;
|
|
104
|
+
int max_cells() const { return max_cells_; }
|
|
105
|
+
void set_max_cells(int max_cells);
|
|
106
|
+
|
|
107
|
+
// Sets the minimum and maximum cell levels to be used. The default is to
|
|
108
|
+
// use all cell levels.
|
|
109
|
+
//
|
|
110
|
+
// To find the cell level corresponding to a given physical distance, use
|
|
111
|
+
// the S2Cell metrics defined in s2metrics.h. For example, to find the
|
|
112
|
+
// cell level that corresponds to an average edge length of 10km, use:
|
|
113
|
+
//
|
|
114
|
+
// int level =
|
|
115
|
+
// S2::kAvgEdge.GetClosestLevel(S2Earth::KmToRadians(length_km));
|
|
116
|
+
//
|
|
117
|
+
// Note that min_level() takes priority over max_cells(), i.e. cells below
|
|
118
|
+
// the given level will never be used even if this causes a large number
|
|
119
|
+
// of cells to be returned. (This doesn't apply to interior coverings,
|
|
120
|
+
// since interior coverings make no completeness guarantees -- the result
|
|
121
|
+
// is simply a set of cells that covers as much of the interior as
|
|
122
|
+
// possible while satisfying the given restrictions.)
|
|
123
|
+
//
|
|
124
|
+
// REQUIRES: min_level() <= max_level()
|
|
125
|
+
// DEFAULT: 0
|
|
126
|
+
int min_level() const { return min_level_; }
|
|
127
|
+
void set_min_level(int min_level);
|
|
128
|
+
|
|
129
|
+
// REQUIRES: min_level() <= max_level()
|
|
130
|
+
// DEFAULT: S2CellId::kMaxLevel
|
|
131
|
+
int max_level() const { return max_level_; }
|
|
132
|
+
void set_max_level(int max_level);
|
|
133
|
+
|
|
134
|
+
// Convenience function that sets both the maximum and minimum cell levels.
|
|
135
|
+
void set_fixed_level(int level);
|
|
136
|
+
|
|
137
|
+
// If specified, then only cells where (level - min_level) is a multiple
|
|
138
|
+
// of "level_mod" will be used (default 1). This effectively allows the
|
|
139
|
+
// branching factor of the S2CellId hierarchy to be increased. Currently
|
|
140
|
+
// the only parameter values allowed are 1, 2, or 3, corresponding to
|
|
141
|
+
// branching factors of 4, 16, and 64 respectively.
|
|
142
|
+
//
|
|
143
|
+
// DEFAULT: 1
|
|
144
|
+
int level_mod() const { return level_mod_; }
|
|
145
|
+
void set_level_mod(int level_mod);
|
|
146
|
+
|
|
147
|
+
// Convenience function that returns the maximum level such that
|
|
148
|
+
//
|
|
149
|
+
// (level <= max_level()) && (level - min_level()) % level_mod() == 0.
|
|
150
|
+
//
|
|
151
|
+
// This is the maximum level that will actually be used in coverings.
|
|
152
|
+
int true_max_level() const;
|
|
153
|
+
|
|
154
|
+
protected:
|
|
155
|
+
int max_cells_ = kDefaultMaxCells;
|
|
156
|
+
int min_level_ = 0;
|
|
157
|
+
int max_level_ = S2CellId::kMaxLevel;
|
|
158
|
+
int level_mod_ = 1;
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
// Constructs an S2RegionCoverer with the given options.
|
|
162
|
+
explicit S2RegionCoverer(const Options& options);
|
|
163
|
+
|
|
164
|
+
// S2RegionCoverer is movable but not copyable.
|
|
165
|
+
S2RegionCoverer(const S2RegionCoverer&) = delete;
|
|
166
|
+
S2RegionCoverer& operator=(const S2RegionCoverer&) = delete;
|
|
167
|
+
S2RegionCoverer(S2RegionCoverer&&);
|
|
168
|
+
S2RegionCoverer& operator=(S2RegionCoverer&&);
|
|
169
|
+
#endif // SWIG
|
|
170
|
+
|
|
171
|
+
// Default constructor. Options can be set using mutable_options().
|
|
172
|
+
S2RegionCoverer();
|
|
173
|
+
~S2RegionCoverer();
|
|
174
|
+
|
|
175
|
+
// Returns the current options. Options can be modifed between calls.
|
|
176
|
+
const Options& options() const { return options_; }
|
|
177
|
+
Options* mutable_options() { return &options_; }
|
|
178
|
+
|
|
179
|
+
// Returns an S2CellUnion that covers (GetCovering) or is contained within
|
|
180
|
+
// (GetInteriorCovering) the given region and satisfies the current options.
|
|
181
|
+
//
|
|
182
|
+
// Note that if options().min_level() > 0 or options().level_mod() > 1, the
|
|
183
|
+
// by definition the S2CellUnion may not be normalized, i.e. there may be
|
|
184
|
+
// groups of four child cells that can be replaced by their parent cell.
|
|
185
|
+
S2CellUnion GetCovering(const S2Region& region);
|
|
186
|
+
S2CellUnion GetInteriorCovering(const S2Region& region);
|
|
187
|
+
|
|
188
|
+
// Like the methods above, but works directly with a vector of S2CellIds.
|
|
189
|
+
// This version can be more efficient when this method is called many times,
|
|
190
|
+
// since it does not require allocating a new vector on each call.
|
|
191
|
+
void GetCovering(const S2Region& region, std::vector<S2CellId>* covering);
|
|
192
|
+
void GetInteriorCovering(const S2Region& region,
|
|
193
|
+
std::vector<S2CellId>* interior);
|
|
194
|
+
|
|
195
|
+
// Like GetCovering(), except that this method is much faster and the
|
|
196
|
+
// coverings are not as tight. All of the usual parameters are respected
|
|
197
|
+
// (max_cells, min_level, max_level, and level_mod), except that the
|
|
198
|
+
// implementation makes no attempt to take advantage of large values of
|
|
199
|
+
// max_cells(). (A small number of cells will always be returned.)
|
|
200
|
+
//
|
|
201
|
+
// This function is useful as a starting point for algorithms that
|
|
202
|
+
// recursively subdivide cells.
|
|
203
|
+
void GetFastCovering(const S2Region& region, std::vector<S2CellId>* covering);
|
|
204
|
+
|
|
205
|
+
// Given a connected region and a starting point on the boundary or inside the
|
|
206
|
+
// region, returns a set of cells at the given level that cover the region.
|
|
207
|
+
// The output cells are returned in arbitrary order.
|
|
208
|
+
//
|
|
209
|
+
// Note that this method is *not* faster than the regular GetCovering()
|
|
210
|
+
// method for most region types, such as S2Cap or S2Polygon, and in fact it
|
|
211
|
+
// can be much slower when the output consists of a large number of cells.
|
|
212
|
+
// Currently it can be faster at generating coverings of long narrow regions
|
|
213
|
+
// such as polylines, but this may change in the future, in which case this
|
|
214
|
+
// method will most likely be removed.
|
|
215
|
+
static void GetSimpleCovering(const S2Region& region, const S2Point& start,
|
|
216
|
+
int level, std::vector<S2CellId>* output);
|
|
217
|
+
|
|
218
|
+
// Like GetSimpleCovering(), but accepts a starting S2CellId rather than a
|
|
219
|
+
// starting point and cell level. Returns all edge-connected cells at the
|
|
220
|
+
// same level as "start" that intersect "region", in arbitrary order.
|
|
221
|
+
static void FloodFill(const S2Region& region, S2CellId start,
|
|
222
|
+
std::vector<S2CellId>* output);
|
|
223
|
+
|
|
224
|
+
// Returns true if the given S2CellId vector represents a valid covering
|
|
225
|
+
// that conforms to the current covering parameters. In particular:
|
|
226
|
+
//
|
|
227
|
+
// - All S2CellIds must be valid.
|
|
228
|
+
//
|
|
229
|
+
// - S2CellIds must be sorted and non-overlapping.
|
|
230
|
+
//
|
|
231
|
+
// - S2CellId levels must satisfy min_level(), max_level(), and level_mod().
|
|
232
|
+
//
|
|
233
|
+
// - If covering.size() > max_cells(), there must be no two cells with
|
|
234
|
+
// a common ancestor at min_level() or higher.
|
|
235
|
+
//
|
|
236
|
+
// - There must be no sequence of cells that could be replaced by an
|
|
237
|
+
// ancestor (i.e. with level_mod() == 1, the 4 child cells of a parent).
|
|
238
|
+
bool IsCanonical(const S2CellUnion& covering) const;
|
|
239
|
+
bool IsCanonical(const std::vector<S2CellId>& covering) const;
|
|
240
|
+
|
|
241
|
+
// Modify "covering" if necessary so that it conforms to the current
|
|
242
|
+
// covering parameters (max_cells, min_level, max_level, and level_mod).
|
|
243
|
+
// There are no restrictions on the input S2CellIds (they may be unsorted,
|
|
244
|
+
// overlapping, etc).
|
|
245
|
+
S2CellUnion CanonicalizeCovering(const S2CellUnion& covering);
|
|
246
|
+
void CanonicalizeCovering(std::vector<S2CellId>* covering);
|
|
247
|
+
|
|
248
|
+
private:
|
|
249
|
+
struct Candidate {
|
|
250
|
+
void* operator new(std::size_t size, std::size_t max_children) {
|
|
251
|
+
return ::operator new (size + max_children * sizeof(Candidate *));
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
void operator delete(void* p) {
|
|
255
|
+
::operator delete (p);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
Candidate(const S2Cell& cell, const std::size_t max_children)
|
|
259
|
+
: cell(cell), is_terminal(max_children == 0) {
|
|
260
|
+
std::fill_n(&children[0], max_children,
|
|
261
|
+
absl::implicit_cast<Candidate*>(nullptr));
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// Default destructor is fine; Candidate* is trivially destructible.
|
|
265
|
+
// children must be deleted by DeleteCandidate.
|
|
266
|
+
~Candidate() = default;
|
|
267
|
+
|
|
268
|
+
S2Cell cell;
|
|
269
|
+
bool is_terminal; // Cell should not be expanded further.
|
|
270
|
+
int num_children = 0; // Number of children that intersect the region.
|
|
271
|
+
Candidate* children[0]; // Actual size may be 0, 4, 16, or 64 elements.
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
// If the cell intersects the given region, return a new candidate with no
|
|
275
|
+
// children, otherwise return nullptr. Also marks the candidate as "terminal"
|
|
276
|
+
// if it should not be expanded further.
|
|
277
|
+
Candidate* NewCandidate(const S2Cell& cell);
|
|
278
|
+
|
|
279
|
+
// Returns the log base 2 of the maximum number of children of a candidate.
|
|
280
|
+
int max_children_shift() const { return 2 * options().level_mod(); }
|
|
281
|
+
|
|
282
|
+
// Frees the memory associated with a candidate.
|
|
283
|
+
static void DeleteCandidate(Candidate* candidate, bool delete_children);
|
|
284
|
+
|
|
285
|
+
// Processes a candidate by either adding it to the result_ vector or
|
|
286
|
+
// expanding its children and inserting it into the priority queue.
|
|
287
|
+
// Passing an argument of nullptr does nothing.
|
|
288
|
+
void AddCandidate(Candidate* candidate);
|
|
289
|
+
|
|
290
|
+
// Populates the children of "candidate" by expanding the given number of
|
|
291
|
+
// levels from the given cell. Returns the number of children that were
|
|
292
|
+
// marked "terminal".
|
|
293
|
+
int ExpandChildren(Candidate* candidate, const S2Cell& cell, int num_levels);
|
|
294
|
+
|
|
295
|
+
// Computes a set of initial candidates that cover the given region.
|
|
296
|
+
void GetInitialCandidates();
|
|
297
|
+
|
|
298
|
+
// Generates a covering and stores it in result_.
|
|
299
|
+
void GetCoveringInternal(const S2Region& region);
|
|
300
|
+
|
|
301
|
+
// If level > min_level(), then reduces "level" if necessary so that it also
|
|
302
|
+
// satisfies level_mod(). Levels smaller than min_level() are not affected
|
|
303
|
+
// (since cells at these levels are eventually expanded).
|
|
304
|
+
int AdjustLevel(int level) const;
|
|
305
|
+
|
|
306
|
+
// Ensures that all cells with level > min_level() also satisfy level_mod(),
|
|
307
|
+
// by replacing them with an ancestor if necessary. Cell levels smaller
|
|
308
|
+
// than min_level() are not modified (see AdjustLevel). The output is
|
|
309
|
+
// then normalized to ensure that no redundant cells are present.
|
|
310
|
+
void AdjustCellLevels(std::vector<S2CellId>* cells) const;
|
|
311
|
+
|
|
312
|
+
// Returns true if "covering" contains all children of "id" at level
|
|
313
|
+
// (id.level() + options_.level_mod()).
|
|
314
|
+
bool ContainsAllChildren(const std::vector<S2CellId>& covering,
|
|
315
|
+
S2CellId id) const;
|
|
316
|
+
|
|
317
|
+
// Replaces all descendants of "id" in "covering" with "id".
|
|
318
|
+
// REQUIRES: "covering" contains at least one descendant of "id".
|
|
319
|
+
void ReplaceCellsWithAncestor(std::vector<S2CellId>* covering,
|
|
320
|
+
S2CellId id) const;
|
|
321
|
+
|
|
322
|
+
Options options_;
|
|
323
|
+
|
|
324
|
+
// We save a temporary copy of the pointer passed to GetCovering() in order
|
|
325
|
+
// to avoid passing this parameter around internally. It is only used (and
|
|
326
|
+
// only valid) for the duration of a single GetCovering() call.
|
|
327
|
+
const S2Region* region_ = nullptr;
|
|
328
|
+
|
|
329
|
+
// The set of S2CellIds that have been added to the covering so far.
|
|
330
|
+
std::vector<S2CellId> result_;
|
|
331
|
+
|
|
332
|
+
// We keep the candidates in a priority queue. We specify a vector to hold
|
|
333
|
+
// the queue entries since for some reason priority_queue<> uses a deque by
|
|
334
|
+
// default. We define our own own comparison function on QueueEntries in
|
|
335
|
+
// order to make the results deterministic. (Using the default
|
|
336
|
+
// less<QueueEntry>, entries of equal priority would be sorted according to
|
|
337
|
+
// the memory address of the candidate.)
|
|
338
|
+
|
|
339
|
+
typedef std::pair<int, Candidate*> QueueEntry;
|
|
340
|
+
struct CompareQueueEntries {
|
|
341
|
+
bool operator()(const QueueEntry& x, const QueueEntry& y) const {
|
|
342
|
+
return x.first < y.first;
|
|
343
|
+
}
|
|
344
|
+
};
|
|
345
|
+
typedef std::priority_queue<QueueEntry, std::vector<QueueEntry>,
|
|
346
|
+
CompareQueueEntries> CandidateQueue;
|
|
347
|
+
CandidateQueue pq_;
|
|
348
|
+
|
|
349
|
+
// True if we're computing an interior covering.
|
|
350
|
+
bool interior_covering_;
|
|
351
|
+
|
|
352
|
+
// Counter of number of candidates created, for performance evaluation.
|
|
353
|
+
int candidates_created_counter_;
|
|
354
|
+
};
|
|
355
|
+
|
|
356
|
+
#endif // S2_S2REGION_COVERER_H_
|