@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,66 @@
|
|
|
1
|
+
// Copyright 2013 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
|
+
#include "s2/s2closest_point_query.h"
|
|
19
|
+
|
|
20
|
+
void S2ClosestPointQueryOptions::set_conservative_max_distance(
|
|
21
|
+
S1ChordAngle max_distance) {
|
|
22
|
+
set_max_distance(Distance(max_distance.PlusError(
|
|
23
|
+
S2::GetUpdateMinDistanceMaxError(max_distance)).Successor()));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
void S2ClosestPointQueryOptions::set_conservative_max_distance(
|
|
27
|
+
S1Angle max_distance) {
|
|
28
|
+
set_conservative_max_distance(S1ChordAngle(max_distance));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
int S2ClosestPointQueryPointTarget::max_brute_force_index_size() const {
|
|
32
|
+
// Using BM_FindClosest (which finds the single closest point), the
|
|
33
|
+
// break-even points are approximately X, Y, and Z points for grid,
|
|
34
|
+
// fractal, and regular loop geometry respectively.
|
|
35
|
+
//
|
|
36
|
+
// TODO(ericv): Adjust using benchmarks.
|
|
37
|
+
return 150;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
int S2ClosestPointQueryEdgeTarget::max_brute_force_index_size() const {
|
|
41
|
+
// Using BM_FindClosestToEdge (which finds the single closest point), the
|
|
42
|
+
// break-even points are approximately X, Y, and Z points for grid,
|
|
43
|
+
// fractal, and regular loop geometry respectively.
|
|
44
|
+
//
|
|
45
|
+
// TODO(ericv): Adjust using benchmarks.
|
|
46
|
+
return 100;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
int S2ClosestPointQueryCellTarget::max_brute_force_index_size() const {
|
|
50
|
+
// Using BM_FindClosestToCell (which finds the single closest point), the
|
|
51
|
+
// break-even points are approximately X, Y, and Z points for grid,
|
|
52
|
+
// fractal, and regular loop geometry respectively.
|
|
53
|
+
//
|
|
54
|
+
// TODO(ericv): Adjust using benchmarks.
|
|
55
|
+
return 50;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
int S2ClosestPointQueryShapeIndexTarget::max_brute_force_index_size() const {
|
|
59
|
+
// For BM_FindClosestToSameSizeAbuttingIndex (which uses a nearby
|
|
60
|
+
// S2ShapeIndex target of similar complexity), the break-even points are
|
|
61
|
+
// approximately X, Y, and Z points for grid, fractal, and regular loop
|
|
62
|
+
// geometry respectively.
|
|
63
|
+
//
|
|
64
|
+
// TODO(ericv): Adjust using benchmarks.
|
|
65
|
+
return 30;
|
|
66
|
+
}
|
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
// Copyright 2013 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
|
+
// See S2ClosestPointQuery (defined below) for an overview.
|
|
19
|
+
|
|
20
|
+
#ifndef S2_S2CLOSEST_POINT_QUERY_H_
|
|
21
|
+
#define S2_S2CLOSEST_POINT_QUERY_H_
|
|
22
|
+
|
|
23
|
+
#include <vector>
|
|
24
|
+
|
|
25
|
+
#include "s2/base/logging.h"
|
|
26
|
+
#include "s2/s1angle.h"
|
|
27
|
+
#include "s2/s1chord_angle.h"
|
|
28
|
+
#include "s2/s2closest_point_query_base.h"
|
|
29
|
+
#include "s2/s2min_distance_targets.h"
|
|
30
|
+
#include "s2/s2point_index.h"
|
|
31
|
+
|
|
32
|
+
// Options that control the set of points returned. Note that by default
|
|
33
|
+
// *all* points are returned, so you will always want to set either the
|
|
34
|
+
// max_results() option or the max_distance() option (or both).
|
|
35
|
+
//
|
|
36
|
+
// This class is also available as S2ClosestPointQuery<Data>::Options.
|
|
37
|
+
// (It is defined here to avoid depending on the "Data" template argument.)
|
|
38
|
+
class S2ClosestPointQueryOptions :
|
|
39
|
+
public S2ClosestPointQueryBaseOptions<S2MinDistance> {
|
|
40
|
+
public:
|
|
41
|
+
using Distance = S2MinDistance;
|
|
42
|
+
using Base = S2ClosestPointQueryBaseOptions<Distance>;
|
|
43
|
+
|
|
44
|
+
// See S2ClosestPointQueryBaseOptions for the full set of options.
|
|
45
|
+
|
|
46
|
+
// Specifies that only points whose distance to the target is less than
|
|
47
|
+
// "max_distance" should be returned.
|
|
48
|
+
//
|
|
49
|
+
// Note that points whose distance is exactly equal to "max_distance" are
|
|
50
|
+
// not returned. Normally this doesn't matter, because distances are not
|
|
51
|
+
// computed exactly in the first place, but if such points are needed then
|
|
52
|
+
// see set_inclusive_max_distance() below.
|
|
53
|
+
//
|
|
54
|
+
// DEFAULT: Distance::Infinity()
|
|
55
|
+
void set_max_distance(S1ChordAngle max_distance);
|
|
56
|
+
|
|
57
|
+
// Like set_max_distance(), except that points whose distance is exactly
|
|
58
|
+
// equal to "max_distance" are also returned. Equivalent to calling
|
|
59
|
+
// set_max_distance(max_distance.Successor()).
|
|
60
|
+
void set_inclusive_max_distance(S1ChordAngle max_distance);
|
|
61
|
+
|
|
62
|
+
// Like set_inclusive_max_distance(), except that "max_distance" is also
|
|
63
|
+
// increased by the maximum error in the distance calculation. This ensures
|
|
64
|
+
// that all points whose true distance is less than or equal to
|
|
65
|
+
// "max_distance" will be returned (along with some points whose true
|
|
66
|
+
// distance is slightly greater).
|
|
67
|
+
//
|
|
68
|
+
// Algorithms that need to do exact distance comparisons can use this
|
|
69
|
+
// option to find a set of candidate points that can then be filtered
|
|
70
|
+
// further (e.g., using s2pred::CompareDistance).
|
|
71
|
+
void set_conservative_max_distance(S1ChordAngle max_distance);
|
|
72
|
+
|
|
73
|
+
// Versions of set_max_distance that take an S1Angle argument. (Note that
|
|
74
|
+
// these functions require a conversion, and that the S1ChordAngle versions
|
|
75
|
+
// are preferred.)
|
|
76
|
+
void set_max_distance(S1Angle max_distance);
|
|
77
|
+
void set_inclusive_max_distance(S1Angle max_distance);
|
|
78
|
+
void set_conservative_max_distance(S1Angle max_distance);
|
|
79
|
+
|
|
80
|
+
// See S2ClosestPointQueryBaseOptions for documentation.
|
|
81
|
+
using Base::set_max_error; // S1Chordangle version
|
|
82
|
+
void set_max_error(S1Angle max_error); // S1Angle version
|
|
83
|
+
|
|
84
|
+
// Inherited options (see s2closest_point_query_base.h for details):
|
|
85
|
+
using Base::set_max_results;
|
|
86
|
+
using Base::set_region;
|
|
87
|
+
using Base::set_use_brute_force;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
// S2ClosestPointQueryTarget represents the geometry to which the distance is
|
|
91
|
+
// measured. There are subtypes for measuring the distance to a point, an
|
|
92
|
+
// edge, an S2Cell, or an S2ShapeIndex (an arbitrary collection of geometry).
|
|
93
|
+
using S2ClosestPointQueryTarget = S2MinDistanceTarget;
|
|
94
|
+
|
|
95
|
+
// Target subtype that computes the closest distance to a point.
|
|
96
|
+
//
|
|
97
|
+
// This class is also available as S2ClosestPointQuery<Data>::PointTarget.
|
|
98
|
+
// (It is defined here to avoid depending on the "Data" template argument.)
|
|
99
|
+
class S2ClosestPointQueryPointTarget final : public S2MinDistancePointTarget {
|
|
100
|
+
public:
|
|
101
|
+
explicit S2ClosestPointQueryPointTarget(const S2Point& point);
|
|
102
|
+
int max_brute_force_index_size() const override;
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
// Target subtype that computes the closest distance to an edge.
|
|
106
|
+
//
|
|
107
|
+
// This class is also available as S2ClosestPointQuery<Data>::EdgeTarget.
|
|
108
|
+
// (It is defined here to avoid depending on the "Data" template argument.)
|
|
109
|
+
class S2ClosestPointQueryEdgeTarget final : public S2MinDistanceEdgeTarget {
|
|
110
|
+
public:
|
|
111
|
+
explicit S2ClosestPointQueryEdgeTarget(const S2Point& a, const S2Point& b);
|
|
112
|
+
int max_brute_force_index_size() const override;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
// Target subtype that computes the closest distance to an S2Cell
|
|
116
|
+
// (including the interior of the cell).
|
|
117
|
+
//
|
|
118
|
+
// This class is also available as S2ClosestPointQuery<Data>::CellTarget.
|
|
119
|
+
// (It is defined here to avoid depending on the "Data" template argument.)
|
|
120
|
+
class S2ClosestPointQueryCellTarget final : public S2MinDistanceCellTarget {
|
|
121
|
+
public:
|
|
122
|
+
explicit S2ClosestPointQueryCellTarget(const S2Cell& cell);
|
|
123
|
+
int max_brute_force_index_size() const override;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
// Target subtype that computes the closest distance to an S2ShapeIndex
|
|
127
|
+
// (an arbitrary collection of points, polylines, and/or polygons).
|
|
128
|
+
//
|
|
129
|
+
// By default, distances are measured to the boundary and interior of
|
|
130
|
+
// polygons in the S2ShapeIndex rather than to polygon boundaries only.
|
|
131
|
+
// If you wish to change this behavior, you may call
|
|
132
|
+
//
|
|
133
|
+
// target.set_include_interiors(false);
|
|
134
|
+
//
|
|
135
|
+
// (see S2MinDistanceShapeIndexTarget for details).
|
|
136
|
+
//
|
|
137
|
+
// This class is also available as S2ClosestPointQuery<Data>::ShapeIndexTarget.
|
|
138
|
+
// (It is defined here to avoid depending on the "Data" template argument.)
|
|
139
|
+
class S2ClosestPointQueryShapeIndexTarget final :
|
|
140
|
+
public S2MinDistanceShapeIndexTarget {
|
|
141
|
+
public:
|
|
142
|
+
explicit S2ClosestPointQueryShapeIndexTarget(const S2ShapeIndex* index);
|
|
143
|
+
int max_brute_force_index_size() const override;
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
// Given a set of points stored in an S2PointIndex, S2ClosestPointQuery
|
|
147
|
+
// provides methods that find the closest point(s) to a given query point
|
|
148
|
+
// or query edge. Example usage:
|
|
149
|
+
//
|
|
150
|
+
// void Test(const vector<S2Point>& index_points,
|
|
151
|
+
// const vector<S2Point>& target_points) {
|
|
152
|
+
// // The template argument allows auxiliary data to be attached to each
|
|
153
|
+
// // point (in this case, the array index).
|
|
154
|
+
// S2PointIndex<int> index;
|
|
155
|
+
// for (int i = 0; i < index_points.size(); ++i) {
|
|
156
|
+
// index.Add(index_points[i], i);
|
|
157
|
+
// }
|
|
158
|
+
// S2ClosestPointQuery<int> query(&index);
|
|
159
|
+
// query.mutable_options()->set_max_results(5);
|
|
160
|
+
// for (const S2Point& target_point : target_points) {
|
|
161
|
+
// S2ClosestPointQueryPointTarget target(target_point);
|
|
162
|
+
// for (const auto& result : query.FindClosestPoints(&target)) {
|
|
163
|
+
// // The Result class contains the following methods:
|
|
164
|
+
// // distance() is the distance to the target.
|
|
165
|
+
// // point() is the indexed point.
|
|
166
|
+
// // data() is the auxiliary data.
|
|
167
|
+
// DoSomething(target_point, result);
|
|
168
|
+
// }
|
|
169
|
+
// }
|
|
170
|
+
// }
|
|
171
|
+
//
|
|
172
|
+
// You can find either the k closest points, or all points within a given
|
|
173
|
+
// radius, or both (i.e., the k closest points up to a given maximum radius).
|
|
174
|
+
// E.g. to find all the points within 5 kilometers, call
|
|
175
|
+
//
|
|
176
|
+
// query.mutable_options()->set_max_distance(
|
|
177
|
+
// S2Earth::ToAngle(util::units::Kilometers(5)));
|
|
178
|
+
//
|
|
179
|
+
// By default *all* points are returned, so you should always specify either
|
|
180
|
+
// max_results() or max_distance() or both. There is also a FindClosestPoint()
|
|
181
|
+
// convenience method that returns only the closest point.
|
|
182
|
+
//
|
|
183
|
+
// You can restrict the results to an arbitrary S2Region, for example:
|
|
184
|
+
//
|
|
185
|
+
// S2LatLngRect rect(...);
|
|
186
|
+
// query.mutable_options()->set_region(&rect); // Does *not* take ownership.
|
|
187
|
+
//
|
|
188
|
+
// To find the closest points to a query edge rather than a point, use:
|
|
189
|
+
//
|
|
190
|
+
// S2ClosestPointQueryEdgeTarget target(v0, v1);
|
|
191
|
+
// query.FindClosestPoints(&target);
|
|
192
|
+
//
|
|
193
|
+
// Similarly you can find the closest points to an S2Cell by using an
|
|
194
|
+
// S2ClosestPointQuery::CellTarget, and you can find the closest points to an
|
|
195
|
+
// arbitrary collection of points, polylines, and polygons by using an
|
|
196
|
+
// S2ClosestPointQuery::ShapeIndexTarget.
|
|
197
|
+
//
|
|
198
|
+
// The implementation is designed to be fast for both small and large
|
|
199
|
+
// point sets.
|
|
200
|
+
template <class Data>
|
|
201
|
+
class S2ClosestPointQuery {
|
|
202
|
+
public:
|
|
203
|
+
// See S2ClosestPointQueryBase for full documentation.
|
|
204
|
+
|
|
205
|
+
using Index = S2PointIndex<Data>;
|
|
206
|
+
using PointData = typename Index::PointData;
|
|
207
|
+
|
|
208
|
+
// S2MinDistance is a thin wrapper around S1ChordAngle that implements the
|
|
209
|
+
// Distance concept required by S2ClosestPointQueryBase.
|
|
210
|
+
using Distance = S2MinDistance;
|
|
211
|
+
using Base = S2ClosestPointQueryBase<Distance, Data>;
|
|
212
|
+
|
|
213
|
+
// Each "Result" object represents a closest point. Here are its main
|
|
214
|
+
// methods (see S2ClosestPointQueryBase::Result for details):
|
|
215
|
+
//
|
|
216
|
+
// // The distance from the target to this point.
|
|
217
|
+
// S1ChordAngle distance() const;
|
|
218
|
+
//
|
|
219
|
+
// // The point itself.
|
|
220
|
+
// const S2Point& point() const;
|
|
221
|
+
//
|
|
222
|
+
// // The client-specified data associated with this point.
|
|
223
|
+
// const Data& data() const;
|
|
224
|
+
using Result = typename Base::Result;
|
|
225
|
+
|
|
226
|
+
using Options = S2ClosestPointQueryOptions;
|
|
227
|
+
|
|
228
|
+
// The available target types (see definitions above).
|
|
229
|
+
using Target = S2ClosestPointQueryTarget;
|
|
230
|
+
using PointTarget = S2ClosestPointQueryPointTarget;
|
|
231
|
+
using EdgeTarget = S2ClosestPointQueryEdgeTarget;
|
|
232
|
+
using CellTarget = S2ClosestPointQueryCellTarget;
|
|
233
|
+
using ShapeIndexTarget = S2ClosestPointQueryShapeIndexTarget;
|
|
234
|
+
|
|
235
|
+
// Convenience constructor that calls Init(). Options may be specified here
|
|
236
|
+
// or changed at any time using the mutable_options() accessor method.
|
|
237
|
+
explicit S2ClosestPointQuery(const Index* index,
|
|
238
|
+
const Options& options = Options());
|
|
239
|
+
|
|
240
|
+
// Default constructor; requires Init() to be called.
|
|
241
|
+
S2ClosestPointQuery();
|
|
242
|
+
~S2ClosestPointQuery();
|
|
243
|
+
|
|
244
|
+
// Initializes the query. Options may be specified here or changed at any
|
|
245
|
+
// time using the mutable_options() accessor method.
|
|
246
|
+
//
|
|
247
|
+
// REQUIRES: "index" must persist for the lifetime of this object.
|
|
248
|
+
// REQUIRES: ReInit() must be called if "index" is modified.
|
|
249
|
+
void Init(const Index* index, const Options& options = Options());
|
|
250
|
+
|
|
251
|
+
// Reinitializes the query. This method must be called whenever the
|
|
252
|
+
// underlying index is modified.
|
|
253
|
+
void ReInit();
|
|
254
|
+
|
|
255
|
+
// Returns a reference to the underlying S2PointIndex.
|
|
256
|
+
const Index& index() const;
|
|
257
|
+
|
|
258
|
+
// Returns the query options. Options can be modifed between queries.
|
|
259
|
+
const Options& options() const;
|
|
260
|
+
Options* mutable_options();
|
|
261
|
+
|
|
262
|
+
// Returns the closest points to the given target that satisfy the current
|
|
263
|
+
// options. This method may be called multiple times.
|
|
264
|
+
std::vector<Result> FindClosestPoints(Target* target);
|
|
265
|
+
|
|
266
|
+
// This version can be more efficient when this method is called many times,
|
|
267
|
+
// since it does not require allocating a new vector on each call.
|
|
268
|
+
void FindClosestPoints(Target* target, std::vector<Result>* results);
|
|
269
|
+
|
|
270
|
+
//////////////////////// Convenience Methods ////////////////////////
|
|
271
|
+
|
|
272
|
+
// Returns the closest point to the target. If no point satisfies the search
|
|
273
|
+
// criteria, then a Result object with distance() == Infinity() and
|
|
274
|
+
// is_empty() == true is returned.
|
|
275
|
+
Result FindClosestPoint(Target* target);
|
|
276
|
+
|
|
277
|
+
// Returns the minimum distance to the target. If the index or target is
|
|
278
|
+
// empty, returns S1ChordAngle::Infinity().
|
|
279
|
+
//
|
|
280
|
+
// Use IsDistanceLess() if you only want to compare the distance against a
|
|
281
|
+
// threshold value, since it is often much faster.
|
|
282
|
+
S1ChordAngle GetDistance(Target* target);
|
|
283
|
+
|
|
284
|
+
// Returns true if the distance to "target" is less than "limit".
|
|
285
|
+
//
|
|
286
|
+
// This method is usually much faster than GetDistance(), since it is much
|
|
287
|
+
// less work to determine whether the minimum distance is above or below a
|
|
288
|
+
// threshold than it is to calculate the actual minimum distance.
|
|
289
|
+
bool IsDistanceLess(Target* target, S1ChordAngle limit);
|
|
290
|
+
|
|
291
|
+
// Like IsDistanceLess(), but also returns true if the distance to "target"
|
|
292
|
+
// is exactly equal to "limit".
|
|
293
|
+
bool IsDistanceLessOrEqual(Target* target, S1ChordAngle limit);
|
|
294
|
+
|
|
295
|
+
// Like IsDistanceLessOrEqual(), except that "limit" is increased by the
|
|
296
|
+
// maximum error in the distance calculation. This ensures that this
|
|
297
|
+
// function returns true whenever the true, exact distance is less than
|
|
298
|
+
// or equal to "limit".
|
|
299
|
+
//
|
|
300
|
+
// For example, suppose that we want to test whether two geometries might
|
|
301
|
+
// intersect each other after they are snapped together using S2Builder
|
|
302
|
+
// (using the IdentitySnapFunction with a given "snap_radius"). Since
|
|
303
|
+
// S2Builder uses exact distance predicates (s2predicates.h), we need to
|
|
304
|
+
// measure the distance between the two geometries conservatively. If the
|
|
305
|
+
// distance is definitely greater than "snap_radius", then the geometries
|
|
306
|
+
// are guaranteed to not intersect after snapping.
|
|
307
|
+
bool IsConservativeDistanceLessOrEqual(Target* target, S1ChordAngle limit);
|
|
308
|
+
|
|
309
|
+
private:
|
|
310
|
+
Options options_;
|
|
311
|
+
Base base_;
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
////////////////// Implementation details follow ////////////////////
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
inline void S2ClosestPointQueryOptions::set_max_distance(
|
|
319
|
+
S1ChordAngle max_distance) {
|
|
320
|
+
Base::set_max_distance(Distance(max_distance));
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
inline void S2ClosestPointQueryOptions::set_max_distance(S1Angle max_distance) {
|
|
324
|
+
Base::set_max_distance(Distance(max_distance));
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
inline void S2ClosestPointQueryOptions::set_inclusive_max_distance(
|
|
328
|
+
S1ChordAngle max_distance) {
|
|
329
|
+
set_max_distance(max_distance.Successor());
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
inline void S2ClosestPointQueryOptions::set_inclusive_max_distance(
|
|
333
|
+
S1Angle max_distance) {
|
|
334
|
+
set_inclusive_max_distance(S1ChordAngle(max_distance));
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
inline void S2ClosestPointQueryOptions::set_max_error(S1Angle max_error) {
|
|
338
|
+
Base::set_max_error(S1ChordAngle(max_error));
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
inline S2ClosestPointQueryPointTarget::S2ClosestPointQueryPointTarget(
|
|
342
|
+
const S2Point& point)
|
|
343
|
+
: S2MinDistancePointTarget(point) {
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
inline S2ClosestPointQueryEdgeTarget::S2ClosestPointQueryEdgeTarget(
|
|
347
|
+
const S2Point& a, const S2Point& b)
|
|
348
|
+
: S2MinDistanceEdgeTarget(a, b) {
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
inline S2ClosestPointQueryCellTarget::S2ClosestPointQueryCellTarget(
|
|
352
|
+
const S2Cell& cell)
|
|
353
|
+
: S2MinDistanceCellTarget(cell) {
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
inline S2ClosestPointQueryShapeIndexTarget::S2ClosestPointQueryShapeIndexTarget(
|
|
357
|
+
const S2ShapeIndex* index)
|
|
358
|
+
: S2MinDistanceShapeIndexTarget(index) {
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
template <class Data>
|
|
362
|
+
inline S2ClosestPointQuery<Data>::S2ClosestPointQuery(const Index* index,
|
|
363
|
+
const Options& options) {
|
|
364
|
+
Init(index, options);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
template <class Data>
|
|
368
|
+
S2ClosestPointQuery<Data>::S2ClosestPointQuery() {
|
|
369
|
+
// Prevent inline constructor bloat by defining here.
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
template <class Data>
|
|
373
|
+
S2ClosestPointQuery<Data>::~S2ClosestPointQuery() {
|
|
374
|
+
// Prevent inline destructor bloat by defining here.
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
template <class Data>
|
|
378
|
+
void S2ClosestPointQuery<Data>::Init(const Index* index,
|
|
379
|
+
const Options& options) {
|
|
380
|
+
options_ = options;
|
|
381
|
+
base_.Init(index);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
template <class Data>
|
|
385
|
+
inline void S2ClosestPointQuery<Data>::ReInit() {
|
|
386
|
+
base_.ReInit();
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
template <class Data>
|
|
390
|
+
inline const S2PointIndex<Data>& S2ClosestPointQuery<Data>::index() const {
|
|
391
|
+
return base_.index();
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
template <class Data>
|
|
395
|
+
inline const S2ClosestPointQueryOptions& S2ClosestPointQuery<Data>::options()
|
|
396
|
+
const {
|
|
397
|
+
return options_;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
template <class Data>
|
|
401
|
+
inline S2ClosestPointQueryOptions*
|
|
402
|
+
S2ClosestPointQuery<Data>::mutable_options() {
|
|
403
|
+
return &options_;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
template <class Data>
|
|
407
|
+
inline std::vector<typename S2ClosestPointQuery<Data>::Result>
|
|
408
|
+
S2ClosestPointQuery<Data>::FindClosestPoints(Target* target) {
|
|
409
|
+
return base_.FindClosestPoints(target, options_);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
template <class Data>
|
|
413
|
+
inline void S2ClosestPointQuery<Data>::FindClosestPoints(
|
|
414
|
+
Target* target, std::vector<Result>* results) {
|
|
415
|
+
base_.FindClosestPoints(target, options_, results);
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
template <class Data>
|
|
419
|
+
inline typename S2ClosestPointQuery<Data>::Result
|
|
420
|
+
S2ClosestPointQuery<Data>::FindClosestPoint(Target* target) {
|
|
421
|
+
static_assert(sizeof(Options) <= 32, "Consider not copying Options here");
|
|
422
|
+
Options tmp_options = options_;
|
|
423
|
+
tmp_options.set_max_results(1);
|
|
424
|
+
return base_.FindClosestPoint(target, tmp_options);
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
template <class Data>
|
|
428
|
+
inline S1ChordAngle S2ClosestPointQuery<Data>::GetDistance(Target* target) {
|
|
429
|
+
return FindClosestPoint(target).distance();
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
template <class Data>
|
|
433
|
+
bool S2ClosestPointQuery<Data>::IsDistanceLess(
|
|
434
|
+
Target* target, S1ChordAngle limit) {
|
|
435
|
+
static_assert(sizeof(Options) <= 32, "Consider not copying Options here");
|
|
436
|
+
Options tmp_options = options_;
|
|
437
|
+
tmp_options.set_max_results(1);
|
|
438
|
+
tmp_options.set_max_distance(limit);
|
|
439
|
+
tmp_options.set_max_error(S1ChordAngle::Straight());
|
|
440
|
+
return !base_.FindClosestPoint(target, tmp_options).is_empty();
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
template <class Data>
|
|
444
|
+
bool S2ClosestPointQuery<Data>::IsDistanceLessOrEqual(
|
|
445
|
+
Target* target, S1ChordAngle limit) {
|
|
446
|
+
static_assert(sizeof(Options) <= 32, "Consider not copying Options here");
|
|
447
|
+
Options tmp_options = options_;
|
|
448
|
+
tmp_options.set_max_results(1);
|
|
449
|
+
tmp_options.set_inclusive_max_distance(limit);
|
|
450
|
+
tmp_options.set_max_error(S1ChordAngle::Straight());
|
|
451
|
+
return !base_.FindClosestPoint(target, tmp_options).is_empty();
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
template <class Data>
|
|
455
|
+
bool S2ClosestPointQuery<Data>::IsConservativeDistanceLessOrEqual(
|
|
456
|
+
Target* target, S1ChordAngle limit) {
|
|
457
|
+
static_assert(sizeof(Options) <= 32, "Consider not copying Options here");
|
|
458
|
+
Options tmp_options = options_;
|
|
459
|
+
tmp_options.set_max_results(1);
|
|
460
|
+
tmp_options.set_conservative_max_distance(limit);
|
|
461
|
+
tmp_options.set_max_error(S1ChordAngle::Straight());
|
|
462
|
+
return !base_.FindClosestPoint(target, tmp_options).is_empty();
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
#endif // S2_S2CLOSEST_POINT_QUERY_H_
|