@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,265 @@
|
|
|
1
|
+
// Copyright Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
#include "s2/s2max_distance_targets.h"
|
|
17
|
+
|
|
18
|
+
#include <memory>
|
|
19
|
+
#include "s2/third_party/absl/memory/memory.h"
|
|
20
|
+
#include "s2/s1angle.h"
|
|
21
|
+
#include "s2/s2cap.h"
|
|
22
|
+
#include "s2/s2cell.h"
|
|
23
|
+
#include "s2/s2edge_distances.h"
|
|
24
|
+
#include "s2/s2furthest_edge_query.h"
|
|
25
|
+
#include "s2/s2shape_index_region.h"
|
|
26
|
+
#include "s2/s2text_format.h"
|
|
27
|
+
|
|
28
|
+
////////////////// Point Target ////////////////////
|
|
29
|
+
|
|
30
|
+
// This method returns an S2Cap that bounds the antipode of the target. (This
|
|
31
|
+
// is the set of points whose S2MaxDistance to the target is
|
|
32
|
+
// S2MaxDistance::Zero().)
|
|
33
|
+
S2Cap S2MaxDistancePointTarget::GetCapBound() {
|
|
34
|
+
return S2Cap(-point_, S1ChordAngle::Zero());
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
bool S2MaxDistancePointTarget::UpdateMinDistance(
|
|
38
|
+
const S2Point& p, S2MaxDistance* min_dist) {
|
|
39
|
+
return min_dist->UpdateMin(S2MaxDistance(S1ChordAngle(p, point_)));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
bool S2MaxDistancePointTarget::UpdateMinDistance(
|
|
43
|
+
const S2Point& v0, const S2Point& v1, S2MaxDistance* min_dist) {
|
|
44
|
+
S1ChordAngle dist(*min_dist);
|
|
45
|
+
if (S2::UpdateMaxDistance(point_, v0, v1, &dist)) {
|
|
46
|
+
min_dist->UpdateMin(S2MaxDistance(dist));
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
bool S2MaxDistancePointTarget::UpdateMinDistance(
|
|
53
|
+
const S2Cell& cell, S2MaxDistance* min_dist) {
|
|
54
|
+
return min_dist->UpdateMin(S2MaxDistance(cell.GetMaxDistance(point_)));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
bool S2MaxDistancePointTarget::VisitContainingShapes(
|
|
58
|
+
const S2ShapeIndex& index, const ShapeVisitor& visitor) {
|
|
59
|
+
// For furthest points, we visit the polygons whose interior contains the
|
|
60
|
+
// antipode of the target point. (These are the polygons whose
|
|
61
|
+
// S2MaxDistance to the target is S2MaxDistance::Zero().)
|
|
62
|
+
return MakeS2ContainsPointQuery(&index).VisitContainingShapes(
|
|
63
|
+
-point_, [this, &visitor](S2Shape* shape) {
|
|
64
|
+
return visitor(shape, point_);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
////////////////// Edge Target ////////////////////
|
|
69
|
+
|
|
70
|
+
// This method returns an S2Cap that bounds the antipode of the target. (This
|
|
71
|
+
// is the set of points whose S2MaxDistance to the target is
|
|
72
|
+
// S2MaxDistance::Zero().)
|
|
73
|
+
S2Cap S2MaxDistanceEdgeTarget::GetCapBound() {
|
|
74
|
+
// The following computes a radius equal to half the edge length in an
|
|
75
|
+
// efficient and numerically stable way.
|
|
76
|
+
double d2 = S1ChordAngle(a_, b_).length2();
|
|
77
|
+
double r2 = (0.5 * d2) / (1 + sqrt(1 - 0.25 * d2));
|
|
78
|
+
return S2Cap(-(a_ + b_).Normalize(), S1ChordAngle::FromLength2(r2));
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
bool S2MaxDistanceEdgeTarget::UpdateMinDistance(
|
|
82
|
+
const S2Point& p, S2MaxDistance* min_dist) {
|
|
83
|
+
S1ChordAngle dist(*min_dist);
|
|
84
|
+
if (S2::UpdateMaxDistance(p, a_, b_, &dist)) {
|
|
85
|
+
min_dist->UpdateMin(S2MaxDistance(dist));
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
bool S2MaxDistanceEdgeTarget::UpdateMinDistance(
|
|
92
|
+
const S2Point& v0, const S2Point& v1, S2MaxDistance* min_dist) {
|
|
93
|
+
S1ChordAngle dist(*min_dist);
|
|
94
|
+
if (S2::UpdateEdgePairMaxDistance(a_, b_, v0, v1, &dist)) {
|
|
95
|
+
min_dist->UpdateMin(S2MaxDistance(dist));
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
bool S2MaxDistanceEdgeTarget::UpdateMinDistance(
|
|
102
|
+
const S2Cell& cell, S2MaxDistance* min_dist) {
|
|
103
|
+
return min_dist->UpdateMin(S2MaxDistance(cell.GetMaxDistance(a_, b_)));
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
bool S2MaxDistanceEdgeTarget::VisitContainingShapes(
|
|
107
|
+
const S2ShapeIndex& index, const ShapeVisitor& visitor) {
|
|
108
|
+
// We only need to test one edge point. That is because the method *must*
|
|
109
|
+
// visit a polygon if it fully contains the target, and *is allowed* to
|
|
110
|
+
// visit a polygon if it intersects the target. If the tested vertex is not
|
|
111
|
+
// contained, we know the full edge is not contained; if the tested vertex is
|
|
112
|
+
// contained, then the edge either is fully contained (must be visited) or it
|
|
113
|
+
// intersects (is allowed to be visited). We visit the center of the edge so
|
|
114
|
+
// that edge AB gives identical results to BA.
|
|
115
|
+
S2MaxDistancePointTarget target((a_ + b_).Normalize());
|
|
116
|
+
return target.VisitContainingShapes(index, visitor);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
////////////////// Cell Target ////////////////////
|
|
120
|
+
|
|
121
|
+
// This method returns an S2Cap that bounds the antipode of the target. (This
|
|
122
|
+
// is the set of points whose S2MaxDistance to the target is
|
|
123
|
+
// S2MaxDistance::Zero().)
|
|
124
|
+
S2Cap S2MaxDistanceCellTarget::GetCapBound() {
|
|
125
|
+
S2Cap cap = cell_.GetCapBound();
|
|
126
|
+
return S2Cap(-cap.center(), cap.radius());
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
bool S2MaxDistanceCellTarget::UpdateMinDistance(
|
|
130
|
+
const S2Point& p, S2MaxDistance* min_dist) {
|
|
131
|
+
return min_dist->UpdateMin(S2MaxDistance(cell_.GetMaxDistance(p)));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
bool S2MaxDistanceCellTarget::UpdateMinDistance(
|
|
135
|
+
const S2Point& v0, const S2Point& v1, S2MaxDistance* min_dist) {
|
|
136
|
+
return min_dist->UpdateMin(S2MaxDistance(cell_.GetMaxDistance(v0, v1)));
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
bool S2MaxDistanceCellTarget::UpdateMinDistance(
|
|
140
|
+
const S2Cell& cell, S2MaxDistance* min_dist) {
|
|
141
|
+
return min_dist->UpdateMin(S2MaxDistance(cell_.GetMaxDistance(cell)));
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
bool S2MaxDistanceCellTarget::VisitContainingShapes(
|
|
145
|
+
const S2ShapeIndex& index, const ShapeVisitor& visitor) {
|
|
146
|
+
// We only need to check one point here - cell center is simplest.
|
|
147
|
+
// See comment at S2MaxDistanceEdgeTarget::VisitContainingShapes.
|
|
148
|
+
S2MaxDistancePointTarget target(cell_.GetCenter());
|
|
149
|
+
return target.VisitContainingShapes(index, visitor);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
////////////////// Index Target ////////////////////
|
|
153
|
+
|
|
154
|
+
S2MaxDistanceShapeIndexTarget::S2MaxDistanceShapeIndexTarget(
|
|
155
|
+
const S2ShapeIndex* index)
|
|
156
|
+
: index_(index), query_(absl::make_unique<S2FurthestEdgeQuery>(index)) {
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
S2MaxDistanceShapeIndexTarget::~S2MaxDistanceShapeIndexTarget() {
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
bool S2MaxDistanceShapeIndexTarget::include_interiors() const {
|
|
163
|
+
return query_->options().include_interiors();
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
void S2MaxDistanceShapeIndexTarget::set_include_interiors(
|
|
167
|
+
bool include_interiors) {
|
|
168
|
+
query_->mutable_options()->set_include_interiors(include_interiors);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
bool S2MaxDistanceShapeIndexTarget::use_brute_force() const {
|
|
172
|
+
return query_->options().use_brute_force();
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
void S2MaxDistanceShapeIndexTarget::set_use_brute_force(
|
|
176
|
+
bool use_brute_force) {
|
|
177
|
+
query_->mutable_options()->set_use_brute_force(use_brute_force);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
bool S2MaxDistanceShapeIndexTarget::set_max_error(
|
|
181
|
+
const S1ChordAngle& max_error) {
|
|
182
|
+
query_->mutable_options()->set_max_error(max_error);
|
|
183
|
+
return true; // Indicates that we may return suboptimal results.
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// This method returns an S2Cap that bounds the antipode of the target. (This
|
|
187
|
+
// is the set of points whose S2MaxDistance to the target is
|
|
188
|
+
// S2MaxDistance::Zero().)
|
|
189
|
+
S2Cap S2MaxDistanceShapeIndexTarget::GetCapBound() {
|
|
190
|
+
S2Cap cap = MakeS2ShapeIndexRegion(index_).GetCapBound();
|
|
191
|
+
return S2Cap(-cap.center(), cap.radius());
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
bool S2MaxDistanceShapeIndexTarget::UpdateMinDistance(
|
|
195
|
+
const S2Point& p, S2MaxDistance* min_dist) {
|
|
196
|
+
query_->mutable_options()->set_min_distance(S1ChordAngle(*min_dist));
|
|
197
|
+
S2FurthestEdgeQuery::PointTarget target(p);
|
|
198
|
+
S2FurthestEdgeQuery::Result r = query_->FindFurthestEdge(&target);
|
|
199
|
+
if (r.shape_id() < 0) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
*min_dist = S2MaxDistance(r.distance());
|
|
203
|
+
return true;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
bool S2MaxDistanceShapeIndexTarget::UpdateMinDistance(
|
|
207
|
+
const S2Point& v0, const S2Point& v1, S2MaxDistance* min_dist) {
|
|
208
|
+
query_->mutable_options()->set_min_distance(S1ChordAngle(*min_dist));
|
|
209
|
+
S2FurthestEdgeQuery::EdgeTarget target(v0, v1);
|
|
210
|
+
S2FurthestEdgeQuery::Result r = query_->FindFurthestEdge(&target);
|
|
211
|
+
if (r.shape_id() < 0) return false;
|
|
212
|
+
*min_dist = S2MaxDistance(r.distance());
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
bool S2MaxDistanceShapeIndexTarget::UpdateMinDistance(
|
|
217
|
+
const S2Cell& cell, S2MaxDistance* min_dist) {
|
|
218
|
+
query_->mutable_options()->set_min_distance(S1ChordAngle(*min_dist));
|
|
219
|
+
S2FurthestEdgeQuery::CellTarget target(cell);
|
|
220
|
+
S2FurthestEdgeQuery::Result r = query_->FindFurthestEdge(&target);
|
|
221
|
+
if (r.shape_id() < 0) return false;
|
|
222
|
+
*min_dist = S2MaxDistance(r.distance());
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// For target types consisting of multiple connected components (such as
|
|
227
|
+
// S2MaxDistanceShapeIndexTarget), this method should return the
|
|
228
|
+
// polygons containing the antipodal reflection of *any* connected
|
|
229
|
+
// component. (It is sufficient to test containment of one vertex per
|
|
230
|
+
// connected component, since the API allows us to also return any polygon
|
|
231
|
+
// whose boundary has S2MaxDistance::Zero() to the target.)
|
|
232
|
+
bool S2MaxDistanceShapeIndexTarget::VisitContainingShapes(
|
|
233
|
+
const S2ShapeIndex& query_index, const ShapeVisitor& visitor) {
|
|
234
|
+
// It is sufficient to find the set of chain starts in the target index
|
|
235
|
+
// (i.e., one vertex per connected component of edges) that are contained by
|
|
236
|
+
// the query index, except for one special case to handle full polygons.
|
|
237
|
+
//
|
|
238
|
+
// TODO(ericv): Do this by merge-joining the two S2ShapeIndexes, and share
|
|
239
|
+
// the code with S2BooleanOperation.
|
|
240
|
+
for (S2Shape* shape : *index_) {
|
|
241
|
+
if (shape == nullptr) continue;
|
|
242
|
+
int num_chains = shape->num_chains();
|
|
243
|
+
// Shapes that don't have any edges require a special case (below).
|
|
244
|
+
bool tested_point = false;
|
|
245
|
+
for (int c = 0; c < num_chains; ++c) {
|
|
246
|
+
S2Shape::Chain chain = shape->chain(c);
|
|
247
|
+
if (chain.length == 0) continue;
|
|
248
|
+
tested_point = true;
|
|
249
|
+
S2MaxDistancePointTarget target(shape->chain_edge(c, 0).v0);
|
|
250
|
+
if (!target.VisitContainingShapes(query_index, visitor)) {
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
if (!tested_point) {
|
|
255
|
+
// Special case to handle full polygons.
|
|
256
|
+
S2Shape::ReferencePoint ref = shape->GetReferencePoint();
|
|
257
|
+
if (!ref.contained) continue;
|
|
258
|
+
S2MaxDistancePointTarget target(ref.point);
|
|
259
|
+
if (!target.VisitContainingShapes(query_index, visitor)) {
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return true;
|
|
265
|
+
}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
// Copyright Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// This file defines a collection of classes that are useful for computing
|
|
17
|
+
// maximum distances on the sphere. Their purpose is to allow code to be
|
|
18
|
+
// shared among the various query classes that find remote geometry, such as
|
|
19
|
+
// S2FurthestPointQuery and S2FurthestEdgeQuery.
|
|
20
|
+
|
|
21
|
+
#ifndef S2_S2MAX_DISTANCE_TARGETS_H_
|
|
22
|
+
#define S2_S2MAX_DISTANCE_TARGETS_H_
|
|
23
|
+
|
|
24
|
+
#include <memory>
|
|
25
|
+
|
|
26
|
+
#include "s2/_fp_contract_off.h"
|
|
27
|
+
#include "s2/s1angle.h"
|
|
28
|
+
#include "s2/s1chord_angle.h"
|
|
29
|
+
#include "s2/s2cell.h"
|
|
30
|
+
#include "s2/s2distance_target.h"
|
|
31
|
+
#include "s2/s2edge_distances.h"
|
|
32
|
+
#include "s2/s2shape_index.h"
|
|
33
|
+
|
|
34
|
+
class S2FurthestEdgeQuery;
|
|
35
|
+
|
|
36
|
+
// S2MaxDistance is a class that allows maximum distances to be computed using
|
|
37
|
+
// a minimum distance algorithm. Specifically, S2MaxDistance(x) represents the
|
|
38
|
+
// supplementary distance (Pi - x). This has the effect of inverting the sort
|
|
39
|
+
// order, i.e.
|
|
40
|
+
//
|
|
41
|
+
// (S2MaxDistance(x) < S2MaxDistance(y)) <=> (Pi - x < Pi - y) <=> (x > y)
|
|
42
|
+
//
|
|
43
|
+
// All other operations are implemented similarly (using the supplementary
|
|
44
|
+
// distance Pi - x). For example, S2MaxDistance(x) - S2MaxDistance(y) ==
|
|
45
|
+
// S2MaxDistance(x + y).
|
|
46
|
+
class S2MaxDistance {
|
|
47
|
+
public:
|
|
48
|
+
using Delta = S1ChordAngle;
|
|
49
|
+
|
|
50
|
+
S2MaxDistance() : distance_() {}
|
|
51
|
+
explicit S2MaxDistance(S1ChordAngle x) : distance_(x) {}
|
|
52
|
+
explicit operator S1ChordAngle() const { return distance_; }
|
|
53
|
+
static S2MaxDistance Zero();
|
|
54
|
+
static S2MaxDistance Infinity();
|
|
55
|
+
static S2MaxDistance Negative();
|
|
56
|
+
|
|
57
|
+
friend bool operator==(S2MaxDistance x, S2MaxDistance y);
|
|
58
|
+
friend bool operator<(S2MaxDistance x, S2MaxDistance y);
|
|
59
|
+
|
|
60
|
+
friend S2MaxDistance operator-(S2MaxDistance x, S1ChordAngle delta);
|
|
61
|
+
S1ChordAngle GetChordAngleBound() const;
|
|
62
|
+
|
|
63
|
+
// If (dist < *this), updates *this and returns true (used internally).
|
|
64
|
+
bool UpdateMin(const S2MaxDistance& dist);
|
|
65
|
+
|
|
66
|
+
private:
|
|
67
|
+
S1ChordAngle distance_;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// S2MaxDistanceTarget represents a geometric object to which maximum distances
|
|
71
|
+
// on the sphere are measured.
|
|
72
|
+
//
|
|
73
|
+
// Subtypes are defined below for measuring the distance to a point, an edge,
|
|
74
|
+
// an S2Cell, or an S2ShapeIndex (an arbitrary collection of geometry).
|
|
75
|
+
using S2MaxDistanceTarget = S2DistanceTarget<S2MaxDistance>;
|
|
76
|
+
|
|
77
|
+
// An S2DistanceTarget subtype for computing the maximum distance to a point.
|
|
78
|
+
class S2MaxDistancePointTarget : public S2MaxDistanceTarget {
|
|
79
|
+
public:
|
|
80
|
+
explicit S2MaxDistancePointTarget(const S2Point& point);
|
|
81
|
+
|
|
82
|
+
S2Cap GetCapBound() final;
|
|
83
|
+
bool UpdateMinDistance(const S2Point& p, S2MaxDistance* min_dist) final;
|
|
84
|
+
bool UpdateMinDistance(const S2Point& v0, const S2Point& v1,
|
|
85
|
+
S2MaxDistance* min_dist) final;
|
|
86
|
+
bool UpdateMinDistance(const S2Cell& cell,
|
|
87
|
+
S2MaxDistance* min_dist) final;
|
|
88
|
+
bool VisitContainingShapes(const S2ShapeIndex& index,
|
|
89
|
+
const ShapeVisitor& visitor) final;
|
|
90
|
+
|
|
91
|
+
private:
|
|
92
|
+
S2Point point_;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
// An S2DistanceTarget subtype for computing the maximum distance to an edge.
|
|
96
|
+
class S2MaxDistanceEdgeTarget : public S2MaxDistanceTarget {
|
|
97
|
+
public:
|
|
98
|
+
explicit S2MaxDistanceEdgeTarget(const S2Point& a, const S2Point& b);
|
|
99
|
+
|
|
100
|
+
S2Cap GetCapBound() final;
|
|
101
|
+
bool UpdateMinDistance(const S2Point& p, S2MaxDistance* min_dist) final;
|
|
102
|
+
bool UpdateMinDistance(const S2Point& v0, const S2Point& v1,
|
|
103
|
+
S2MaxDistance* min_dist) final;
|
|
104
|
+
bool UpdateMinDistance(const S2Cell& cell,
|
|
105
|
+
S2MaxDistance* min_dist) final;
|
|
106
|
+
bool VisitContainingShapes(const S2ShapeIndex& index,
|
|
107
|
+
const ShapeVisitor& visitor) final;
|
|
108
|
+
|
|
109
|
+
private:
|
|
110
|
+
S2Point a_, b_;
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
// An S2DistanceTarget subtype for computing the maximum distance to an S2Cell
|
|
114
|
+
// (including the interior of the cell).
|
|
115
|
+
class S2MaxDistanceCellTarget : public S2MaxDistanceTarget {
|
|
116
|
+
public:
|
|
117
|
+
explicit S2MaxDistanceCellTarget(const S2Cell& cell);
|
|
118
|
+
S2Cap GetCapBound() final;
|
|
119
|
+
bool UpdateMinDistance(const S2Point& p, S2MaxDistance* min_dist) final;
|
|
120
|
+
bool UpdateMinDistance(const S2Point& v0, const S2Point& v1,
|
|
121
|
+
S2MaxDistance* min_dist) final;
|
|
122
|
+
bool UpdateMinDistance(const S2Cell& cell,
|
|
123
|
+
S2MaxDistance* min_dist) final;
|
|
124
|
+
bool VisitContainingShapes(const S2ShapeIndex& index,
|
|
125
|
+
const ShapeVisitor& visitor) final;
|
|
126
|
+
|
|
127
|
+
private:
|
|
128
|
+
S2Cell cell_;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
// An S2DistanceTarget subtype for computing the maximum distance to an
|
|
132
|
+
// S2ShapeIndex (a collection of points, polylines, and/or polygons).
|
|
133
|
+
//
|
|
134
|
+
// Note that ShapeIndexTarget has its own options:
|
|
135
|
+
//
|
|
136
|
+
// include_interiors()
|
|
137
|
+
// - specifies that distances are measured to the boundary and interior
|
|
138
|
+
// of polygons in the S2ShapeIndex. (If set to false, distance is
|
|
139
|
+
// measured to the polygon boundary only.)
|
|
140
|
+
// DEFAULT: true.
|
|
141
|
+
//
|
|
142
|
+
// brute_force()
|
|
143
|
+
// - specifies that the distances should be computed by examining every
|
|
144
|
+
// edge in the S2ShapeIndex (for testing and debugging purposes).
|
|
145
|
+
// DEFAULT: false.
|
|
146
|
+
//
|
|
147
|
+
// These options are specified independently of the corresponding
|
|
148
|
+
// S2FurthestEdgeQuery options. For example, if include_interiors is true for
|
|
149
|
+
// a ShapeIndexTarget but false for the S2FurthestEdgeQuery where the target
|
|
150
|
+
// is used, then distances will be measured from the boundary of one
|
|
151
|
+
// S2ShapeIndex to the boundary and interior of the other.
|
|
152
|
+
//
|
|
153
|
+
class S2MaxDistanceShapeIndexTarget : public S2MaxDistanceTarget {
|
|
154
|
+
public:
|
|
155
|
+
explicit S2MaxDistanceShapeIndexTarget(const S2ShapeIndex* index);
|
|
156
|
+
~S2MaxDistanceShapeIndexTarget() override;
|
|
157
|
+
|
|
158
|
+
// Specifies that distance will be measured to the boundary and interior
|
|
159
|
+
// of polygons in the S2ShapeIndex rather than to polygon boundaries only.
|
|
160
|
+
//
|
|
161
|
+
// DEFAULT: true
|
|
162
|
+
bool include_interiors() const;
|
|
163
|
+
void set_include_interiors(bool include_interiors);
|
|
164
|
+
|
|
165
|
+
// Specifies that the distances should be computed by examining every edge
|
|
166
|
+
// in the S2ShapeIndex (for testing and debugging purposes).
|
|
167
|
+
//
|
|
168
|
+
// DEFAULT: false
|
|
169
|
+
bool use_brute_force() const;
|
|
170
|
+
void set_use_brute_force(bool use_brute_force);
|
|
171
|
+
|
|
172
|
+
bool set_max_error(const S1ChordAngle& max_error) override;
|
|
173
|
+
S2Cap GetCapBound() final;
|
|
174
|
+
bool UpdateMinDistance(const S2Point& p, S2MaxDistance* min_dist) final;
|
|
175
|
+
bool UpdateMinDistance(const S2Point& v0, const S2Point& v1,
|
|
176
|
+
S2MaxDistance* min_dist) final;
|
|
177
|
+
bool UpdateMinDistance(const S2Cell& cell,
|
|
178
|
+
S2MaxDistance* min_dist) final;
|
|
179
|
+
bool VisitContainingShapes(const S2ShapeIndex& query_index,
|
|
180
|
+
const ShapeVisitor& visitor) final;
|
|
181
|
+
|
|
182
|
+
private:
|
|
183
|
+
const S2ShapeIndex* index_;
|
|
184
|
+
std::unique_ptr<S2FurthestEdgeQuery> query_;
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
////////////////// Implementation details follow ////////////////////
|
|
189
|
+
|
|
190
|
+
inline S2MaxDistance S2MaxDistance::Zero() {
|
|
191
|
+
return S2MaxDistance(S1ChordAngle::Straight());
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
inline S2MaxDistance S2MaxDistance::Infinity() {
|
|
195
|
+
return S2MaxDistance(S1ChordAngle::Negative());
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
inline S2MaxDistance S2MaxDistance::Negative() {
|
|
199
|
+
return S2MaxDistance(S1ChordAngle::Infinity());
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
inline bool operator==(S2MaxDistance x, S2MaxDistance y) {
|
|
203
|
+
return x.distance_ == y.distance_;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
inline bool operator<(S2MaxDistance x, S2MaxDistance y) {
|
|
207
|
+
return x.distance_ > y.distance_;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
inline S2MaxDistance operator-(S2MaxDistance x, S1ChordAngle delta) {
|
|
211
|
+
return S2MaxDistance(x.distance_ + delta);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
inline S1ChordAngle S2MaxDistance::GetChordAngleBound() const {
|
|
215
|
+
return S1ChordAngle::Straight() - distance_;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
inline bool S2MaxDistance::UpdateMin(const S2MaxDistance& dist) {
|
|
219
|
+
if (dist < *this) {
|
|
220
|
+
*this = dist;
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
inline S2MaxDistancePointTarget::S2MaxDistancePointTarget(const S2Point& point)
|
|
227
|
+
: point_(point) {
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
inline S2MaxDistanceEdgeTarget::S2MaxDistanceEdgeTarget(const S2Point& a,
|
|
231
|
+
const S2Point& b)
|
|
232
|
+
: a_(a), b_(b) {
|
|
233
|
+
a_.Normalize();
|
|
234
|
+
b_.Normalize();
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
inline S2MaxDistanceCellTarget::S2MaxDistanceCellTarget(const S2Cell& cell)
|
|
238
|
+
: cell_(cell) {
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
#endif // S2_S2MAX_DISTANCE_TARGETS_H_
|