@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,439 @@
|
|
|
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
|
+
#ifndef S2_S2FURTHEST_EDGE_QUERY_H_
|
|
17
|
+
#define S2_S2FURTHEST_EDGE_QUERY_H_
|
|
18
|
+
|
|
19
|
+
#include <memory>
|
|
20
|
+
#include <queue>
|
|
21
|
+
#include <type_traits>
|
|
22
|
+
#include <vector>
|
|
23
|
+
|
|
24
|
+
#include "s2/base/logging.h"
|
|
25
|
+
#include "s2/third_party/absl/base/macros.h"
|
|
26
|
+
#include "s2/third_party/absl/container/inlined_vector.h"
|
|
27
|
+
#include "s2/_fp_contract_off.h"
|
|
28
|
+
#include "s2/s1angle.h"
|
|
29
|
+
#include "s2/s1chord_angle.h"
|
|
30
|
+
#include "s2/s2cell.h"
|
|
31
|
+
#include "s2/s2cell_id.h"
|
|
32
|
+
#include "s2/s2closest_edge_query_base.h"
|
|
33
|
+
#include "s2/s2edge_distances.h"
|
|
34
|
+
#include "s2/s2max_distance_targets.h"
|
|
35
|
+
#include "s2/s2shape_index.h"
|
|
36
|
+
|
|
37
|
+
// S2FurthestEdgeQuery is a helper class for searching within an S2ShapeIndex
|
|
38
|
+
// for the furthest edge(s) to a given query point, edge, S2Cell, or geometry
|
|
39
|
+
// collection. The furthest edge is defined as the one which maximizes the
|
|
40
|
+
// distance from any point on that edge to any point on the target geometry.
|
|
41
|
+
|
|
42
|
+
// As an example, given a set of polylines, the following code efficiently
|
|
43
|
+
// finds the furthest 5 edges to a query point:
|
|
44
|
+
//
|
|
45
|
+
// void Test(const vector<S2Polyline*>& polylines, const S2Point& point) {
|
|
46
|
+
// MutableS2ShapeIndex index;
|
|
47
|
+
// for (S2Polyline* polyline : polylines) {
|
|
48
|
+
// index.Add(new S2Polyline::Shape(polyline));
|
|
49
|
+
// }
|
|
50
|
+
// S2FurthestEdgeQuery query(&index);
|
|
51
|
+
// query.mutable_options()->set_max_results(5);
|
|
52
|
+
// S2FurthestEdgeQuery::PointTarget target(point);
|
|
53
|
+
// for (const auto& result : query.FindFurthestEdges(&target)) {
|
|
54
|
+
// // The Result struct contains the following accessors:
|
|
55
|
+
// // "distance()" is the distance to the edge.
|
|
56
|
+
// // "shape_id()" identifies the S2Shape containing the edge.
|
|
57
|
+
// // "edge_id()" identifies the edge with the given shape.
|
|
58
|
+
// // The following convenience methods may also be useful:
|
|
59
|
+
// // query.GetEdge(result) returns the endpoints of the edge.
|
|
60
|
+
// int polyline_index = result.shape_id();
|
|
61
|
+
// int edge_index = result.edge_id();
|
|
62
|
+
// S1ChordAngle distance = result.distance();
|
|
63
|
+
// S2Shape::Edge edge = query.GetEdge(result);
|
|
64
|
+
// }
|
|
65
|
+
// }
|
|
66
|
+
//
|
|
67
|
+
// You can find either the k furthest edges, or all edges no closer than a
|
|
68
|
+
// given radius, or both (i.e., the k furthest edges no closer than a given
|
|
69
|
+
// minimum radius).
|
|
70
|
+
// E.g. to find all the edges further than 5 kilometers, call
|
|
71
|
+
//
|
|
72
|
+
// query.mutable_options()->set_min_distance(
|
|
73
|
+
// S2Earth::ToAngle(util::units::Kilometers(5)));
|
|
74
|
+
//
|
|
75
|
+
// By default *all* edges are returned, so you should always specify either
|
|
76
|
+
// max_results() or min_distance() or both. Setting min distance may not be
|
|
77
|
+
// very restrictive, so strongly consider using max_results(). There is also a
|
|
78
|
+
// FindFurthestEdge() convenience method that returns only the single furthest
|
|
79
|
+
// edge.
|
|
80
|
+
//
|
|
81
|
+
// Note that by default, distances are measured to the boundary and interior
|
|
82
|
+
// of polygons. To change this behavior, call set_include_interiors(false).
|
|
83
|
+
//
|
|
84
|
+
// If you only need to test whether the distance is above or below a given
|
|
85
|
+
// threshold (e.g., 10 km), you can use the IsDistanceGreater() method. This
|
|
86
|
+
// is much faster than actually calculating the distance with
|
|
87
|
+
// FindFurthestEdge(), since the implementation can stop as soon as it can
|
|
88
|
+
// prove that the maximum distance is either above or below the threshold.
|
|
89
|
+
//
|
|
90
|
+
// To find the furthest edges to a query edge rather than a point, use:
|
|
91
|
+
//
|
|
92
|
+
// S2FurthestEdgeQuery::EdgeTarget target(v0, v1);
|
|
93
|
+
// query.FindFurthestEdges(&target);
|
|
94
|
+
//
|
|
95
|
+
// Similarly you can find the furthest edges to an S2Cell by using an
|
|
96
|
+
// S2FurthestEdgeQuery::CellTarget, and you can find the furthest edges to an
|
|
97
|
+
// arbitrary collection of points, polylines, and polygons by using an
|
|
98
|
+
// S2FurthestEdgeQuery::ShapeIndexTarget.
|
|
99
|
+
//
|
|
100
|
+
// The implementation is designed to be fast for both simple and complex
|
|
101
|
+
// geometric objects.
|
|
102
|
+
class S2FurthestEdgeQuery {
|
|
103
|
+
public:
|
|
104
|
+
// See S2FurthestEdgeQueryBase for full documentation.
|
|
105
|
+
|
|
106
|
+
// S2MaxDistance is a thin wrapper around S1ChordAngle that implements the
|
|
107
|
+
// Distance concept required by S2ClosestEdgeQueryBase. It inverts the sense
|
|
108
|
+
// of some methods to enable the closest edge query to return furthest
|
|
109
|
+
// edges.
|
|
110
|
+
// Distance and Base are made private to prevent leakage outside of this
|
|
111
|
+
// class. The private and public sections are interleaved since the public
|
|
112
|
+
// options class needs the private Base class.
|
|
113
|
+
private:
|
|
114
|
+
using Distance = S2MaxDistance;
|
|
115
|
+
using Base = S2ClosestEdgeQueryBase<Distance>;
|
|
116
|
+
|
|
117
|
+
public:
|
|
118
|
+
// Options that control the set of edges returned. Note that by default
|
|
119
|
+
// *all* edges are returned, so you will always want to set either the
|
|
120
|
+
// max_results() option or the min_distance() option (or both).
|
|
121
|
+
class Options : public Base::Options {
|
|
122
|
+
public:
|
|
123
|
+
// See S2ClosestEdgeQueryBase::Options for the full set of options.
|
|
124
|
+
Options();
|
|
125
|
+
|
|
126
|
+
// The following methods are like the corresponding max_distance() methods
|
|
127
|
+
// in S2ClosestEdgeQuery, except that they specify the minimum distance to
|
|
128
|
+
// the target.
|
|
129
|
+
S1ChordAngle min_distance() const;
|
|
130
|
+
void set_min_distance(S1ChordAngle min_distance);
|
|
131
|
+
void set_inclusive_min_distance(S1ChordAngle min_distance);
|
|
132
|
+
void set_conservative_min_distance(S1ChordAngle min_distance);
|
|
133
|
+
|
|
134
|
+
void set_min_distance(S1Angle min_distance);
|
|
135
|
+
void set_inclusive_min_distance(S1Angle min_distance);
|
|
136
|
+
void set_conservative_min_distance(S1Angle min_distance);
|
|
137
|
+
|
|
138
|
+
// Versions of set_max_error() that accept S1ChordAngle / S1Angle.
|
|
139
|
+
// (See S2ClosestEdgeQueryBaseOptions for details.)
|
|
140
|
+
S1ChordAngle max_error() const;
|
|
141
|
+
void set_max_error(S1ChordAngle max_error);
|
|
142
|
+
void set_max_error(S1Angle max_error);
|
|
143
|
+
|
|
144
|
+
// Inherited options (see s2closestedgequerybase.h for details):
|
|
145
|
+
using Base::Options::set_max_results;
|
|
146
|
+
using Base::Options::set_include_interiors;
|
|
147
|
+
using Base::Options::set_use_brute_force;
|
|
148
|
+
|
|
149
|
+
private:
|
|
150
|
+
// The S2MaxDistance versions of these methods are not intended for
|
|
151
|
+
// public use.
|
|
152
|
+
using Base::Options::set_max_distance;
|
|
153
|
+
using Base::Options::set_max_error;
|
|
154
|
+
using Base::Options::max_distance;
|
|
155
|
+
using Base::Options::max_error;
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
// "Target" represents the geometry to which the distance is measured.
|
|
159
|
+
// There are subtypes for measuring the distance to a point, an edge, an
|
|
160
|
+
// S2Cell, or an S2ShapeIndex (an arbitrary collection of geometry). Note
|
|
161
|
+
// that S2DistanceTarget<Distance> is equivalent to S2MaxDistanceTarget in
|
|
162
|
+
// s2max_distance_targets, which the following subtypes
|
|
163
|
+
// (e.g. S2MaxDistancePointTarget) extend.
|
|
164
|
+
using Target = S2DistanceTarget<Distance>;
|
|
165
|
+
|
|
166
|
+
// Target subtype that computes the furthest distance to a point.
|
|
167
|
+
class PointTarget final : public S2MaxDistancePointTarget {
|
|
168
|
+
public:
|
|
169
|
+
explicit PointTarget(const S2Point& point);
|
|
170
|
+
int max_brute_force_index_size() const override;
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
// Target subtype that computes the furthest distance to an edge.
|
|
174
|
+
class EdgeTarget final : public S2MaxDistanceEdgeTarget {
|
|
175
|
+
public:
|
|
176
|
+
explicit EdgeTarget(const S2Point& a, const S2Point& b);
|
|
177
|
+
int max_brute_force_index_size() const override;
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
// Target subtype that computes the furthest distance to an S2Cell
|
|
181
|
+
// (including the interior of the cell).
|
|
182
|
+
class CellTarget final : public S2MaxDistanceCellTarget {
|
|
183
|
+
public:
|
|
184
|
+
explicit CellTarget(const S2Cell& cell);
|
|
185
|
+
int max_brute_force_index_size() const override;
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
// Target subtype that computes the furthest distance to an S2ShapeIndex
|
|
189
|
+
// (an arbitrary collection of points, polylines, and/or polygons).
|
|
190
|
+
//
|
|
191
|
+
// By default, distances are measured to the boundary and interior of
|
|
192
|
+
// polygons in the S2ShapeIndex rather than to polygon boundaries only.
|
|
193
|
+
// If you wish to change this behavior, you may call
|
|
194
|
+
//
|
|
195
|
+
// target.set_include_interiors(false);
|
|
196
|
+
//
|
|
197
|
+
// (see S2MaxDistanceShapeIndexTarget for details).
|
|
198
|
+
class ShapeIndexTarget final : public S2MaxDistanceShapeIndexTarget {
|
|
199
|
+
public:
|
|
200
|
+
explicit ShapeIndexTarget(const S2ShapeIndex* index);
|
|
201
|
+
int max_brute_force_index_size() const override;
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
// Result class to pass back to user. We choose to pass back this result
|
|
205
|
+
// type, which has an S1ChordAngle as its distance, rather than the
|
|
206
|
+
// Base::Result returned from the query which uses S2MaxDistance.
|
|
207
|
+
class Result {
|
|
208
|
+
public:
|
|
209
|
+
// The default constructor, which yields an invalid result.
|
|
210
|
+
Result() : Result(S1ChordAngle::Negative(), -1, -1) {}
|
|
211
|
+
|
|
212
|
+
// Construct a Result from a Base::Result.
|
|
213
|
+
explicit Result(const Base::Result& base)
|
|
214
|
+
: Result(S1ChordAngle(base.distance()), base.shape_id(),
|
|
215
|
+
base.edge_id()) {}
|
|
216
|
+
|
|
217
|
+
// Constructs a Result object for the given edge with the given distance.
|
|
218
|
+
Result(S1ChordAngle distance, int32 _shape_id, int32 _edge_id)
|
|
219
|
+
: distance_(distance), shape_id_(_shape_id), edge_id_(_edge_id) {}
|
|
220
|
+
|
|
221
|
+
// Returns true if this Result object does not refer to any edge.
|
|
222
|
+
// (The only case where an empty Result is returned is when the
|
|
223
|
+
// FindFurthestEdges() method does not find any edges that meet the
|
|
224
|
+
// specified criteria.)
|
|
225
|
+
bool is_empty() const { return edge_id_ < 0; }
|
|
226
|
+
|
|
227
|
+
// The distance from the target to this point.
|
|
228
|
+
S1ChordAngle distance() const { return distance_; }
|
|
229
|
+
|
|
230
|
+
// The edge identifiers.
|
|
231
|
+
int32 shape_id() const { return shape_id_; }
|
|
232
|
+
int32 edge_id() const { return edge_id_; }
|
|
233
|
+
|
|
234
|
+
// Returns true if two Result objects are identical.
|
|
235
|
+
friend bool operator==(const Result& x, const Result& y) {
|
|
236
|
+
return (x.distance_ == y.distance_ &&
|
|
237
|
+
x.shape_id_ == y.shape_id_ &&
|
|
238
|
+
x.edge_id_ == y.edge_id_);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// Compares edges first by distance, then by (shape_id, edge_id).
|
|
242
|
+
friend bool operator<(const Result& x, const Result& y) {
|
|
243
|
+
if (x.distance_ < y.distance_) return true;
|
|
244
|
+
if (y.distance_ < x.distance_) return false;
|
|
245
|
+
if (x.shape_id_ < y.shape_id_) return true;
|
|
246
|
+
if (y.shape_id_ < x.shape_id_) return false;
|
|
247
|
+
return x.edge_id_ < y.edge_id_;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
private:
|
|
251
|
+
S1ChordAngle distance_;
|
|
252
|
+
int32 shape_id_; // Identifies an indexed shape.
|
|
253
|
+
int32 edge_id_; // Identifies an edge within the shape.
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
// Convenience constructor that calls Init(). Options may be specified here
|
|
257
|
+
// or changed at any time using the mutable_options() accessor method.
|
|
258
|
+
explicit S2FurthestEdgeQuery(const S2ShapeIndex* index,
|
|
259
|
+
const Options& options = Options());
|
|
260
|
+
|
|
261
|
+
// Default constructor; requires Init() to be called.
|
|
262
|
+
S2FurthestEdgeQuery();
|
|
263
|
+
~S2FurthestEdgeQuery();
|
|
264
|
+
|
|
265
|
+
S2FurthestEdgeQuery(const S2FurthestEdgeQuery&) = delete;
|
|
266
|
+
void operator=(const S2FurthestEdgeQuery&) = delete;
|
|
267
|
+
|
|
268
|
+
// Initializes the query. Options may be specified here or changed at any
|
|
269
|
+
// time using the mutable_options() accessor method.
|
|
270
|
+
//
|
|
271
|
+
// REQUIRES: "index" must persist for the lifetime of this object.
|
|
272
|
+
// REQUIRES: ReInit() must be called if "index" is modified.
|
|
273
|
+
void Init(const S2ShapeIndex* index, const Options& options = Options());
|
|
274
|
+
|
|
275
|
+
// Reinitializes the query. This method must be called whenever the
|
|
276
|
+
// underlying S2ShapeIndex is modified.
|
|
277
|
+
void ReInit();
|
|
278
|
+
|
|
279
|
+
// Returns a reference to the underlying S2ShapeIndex.
|
|
280
|
+
const S2ShapeIndex& index() const;
|
|
281
|
+
|
|
282
|
+
// Returns the query options. Options can be modified between queries.
|
|
283
|
+
const Options& options() const;
|
|
284
|
+
Options* mutable_options();
|
|
285
|
+
|
|
286
|
+
// Returns the furthest edges to the given target that satisfy the given
|
|
287
|
+
// options. This method may be called multiple times.
|
|
288
|
+
std::vector<Result> FindFurthestEdges(Target* target);
|
|
289
|
+
|
|
290
|
+
// This version can be more efficient when this method is called many times,
|
|
291
|
+
// since it does not require allocating a new vector on each call.
|
|
292
|
+
void FindFurthestEdges(Target* target, std::vector<Result>* results);
|
|
293
|
+
|
|
294
|
+
//////////////////////// Convenience Methods ////////////////////////
|
|
295
|
+
|
|
296
|
+
// Returns the furthest edge to the target. If no edge satisfies the search
|
|
297
|
+
// criteria, then the Result object will have
|
|
298
|
+
// distance == S1ChordAngle::Negative() and shape_id == edge_id == -1.
|
|
299
|
+
Result FindFurthestEdge(Target* target);
|
|
300
|
+
|
|
301
|
+
// Returns the maximum distance to the target. If the index or target is
|
|
302
|
+
// empty, returns S1ChordAngle::Negative().
|
|
303
|
+
//
|
|
304
|
+
// Use IsDistanceGreater() if you only want to compare the distance against a
|
|
305
|
+
// threshold value, since it is often much faster.
|
|
306
|
+
S1ChordAngle GetDistance(Target* target);
|
|
307
|
+
|
|
308
|
+
// Returns true if the distance to "target" is greater than "limit".
|
|
309
|
+
//
|
|
310
|
+
// This method is usually much faster than GetDistance(), since it is much
|
|
311
|
+
// less work to determine whether the maximum distance is above or below a
|
|
312
|
+
// threshold than it is to calculate the actual maximum distance.
|
|
313
|
+
bool IsDistanceGreater(Target* target, S1ChordAngle limit);
|
|
314
|
+
|
|
315
|
+
// Like IsDistanceGreater(), but also returns true if the distance to
|
|
316
|
+
// "target" is exactly equal to "limit".
|
|
317
|
+
bool IsDistanceGreaterOrEqual(Target* target, S1ChordAngle limit);
|
|
318
|
+
|
|
319
|
+
// Like IsDistanceGreaterOrEqual(), except that "limit" is decreased by the
|
|
320
|
+
// maximum error in the distance calculation. This ensures that this
|
|
321
|
+
// function returns true whenever the true, exact distance is greater than
|
|
322
|
+
// or equal to "limit".
|
|
323
|
+
bool IsConservativeDistanceGreaterOrEqual(Target* target,
|
|
324
|
+
S1ChordAngle limit);
|
|
325
|
+
|
|
326
|
+
// Returns the endpoints of the given result edge.
|
|
327
|
+
// REQUIRES: result.edge_id >= 0
|
|
328
|
+
S2Shape::Edge GetEdge(const Result& result) const;
|
|
329
|
+
|
|
330
|
+
private:
|
|
331
|
+
Options options_;
|
|
332
|
+
Base base_;
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
////////////////// Implementation details follow ////////////////////
|
|
337
|
+
|
|
338
|
+
inline S2FurthestEdgeQuery::Options::Options() {
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
inline S1ChordAngle S2FurthestEdgeQuery::Options::min_distance() const {
|
|
342
|
+
return S1ChordAngle(max_distance());
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
inline void S2FurthestEdgeQuery::Options::set_min_distance(
|
|
346
|
+
S1ChordAngle min_distance) {
|
|
347
|
+
Base::Options::set_max_distance(Distance(min_distance));
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
inline void S2FurthestEdgeQuery::Options::set_min_distance(
|
|
351
|
+
S1Angle min_distance) {
|
|
352
|
+
Base::Options::set_max_distance(Distance(S1ChordAngle(min_distance)));
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
inline void S2FurthestEdgeQuery::Options::set_inclusive_min_distance(
|
|
356
|
+
S1ChordAngle min_distance) {
|
|
357
|
+
set_min_distance(min_distance.Predecessor());
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
inline void S2FurthestEdgeQuery::Options::set_inclusive_min_distance(
|
|
361
|
+
S1Angle min_distance) {
|
|
362
|
+
set_inclusive_min_distance(S1ChordAngle(min_distance));
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
inline S1ChordAngle S2FurthestEdgeQuery::Options::max_error() const {
|
|
366
|
+
return S1ChordAngle(Base::Options::max_error());
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
inline void S2FurthestEdgeQuery::Options::set_max_error(
|
|
370
|
+
S1ChordAngle max_error) {
|
|
371
|
+
Base::Options::set_max_error(max_error);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
inline void S2FurthestEdgeQuery::Options::set_max_error(S1Angle max_error) {
|
|
375
|
+
Base::Options::set_max_error(S1ChordAngle(max_error));
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
inline S2FurthestEdgeQuery::PointTarget::PointTarget(const S2Point& point)
|
|
379
|
+
: S2MaxDistancePointTarget(point) {
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
inline S2FurthestEdgeQuery::EdgeTarget::EdgeTarget(const S2Point& a,
|
|
383
|
+
const S2Point& b)
|
|
384
|
+
: S2MaxDistanceEdgeTarget(a, b) {
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
inline S2FurthestEdgeQuery::CellTarget::CellTarget(const S2Cell& cell)
|
|
388
|
+
: S2MaxDistanceCellTarget(cell) {
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
inline S2FurthestEdgeQuery::ShapeIndexTarget::ShapeIndexTarget(
|
|
392
|
+
const S2ShapeIndex* index)
|
|
393
|
+
: S2MaxDistanceShapeIndexTarget(index) {
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
inline S2FurthestEdgeQuery::S2FurthestEdgeQuery(const S2ShapeIndex* index,
|
|
397
|
+
const Options& options) {
|
|
398
|
+
Init(index, options);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
inline void S2FurthestEdgeQuery::Init(const S2ShapeIndex* index,
|
|
402
|
+
const Options& options) {
|
|
403
|
+
options_ = options;
|
|
404
|
+
base_.Init(index);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
inline void S2FurthestEdgeQuery::ReInit() {
|
|
408
|
+
base_.ReInit();
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
inline const S2ShapeIndex& S2FurthestEdgeQuery::index() const {
|
|
412
|
+
return base_.index();
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
inline const S2FurthestEdgeQuery::Options&
|
|
416
|
+
S2FurthestEdgeQuery::options() const {
|
|
417
|
+
return options_;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
inline S2FurthestEdgeQuery::Options* S2FurthestEdgeQuery::mutable_options() {
|
|
421
|
+
return &options_;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
inline std::vector<S2FurthestEdgeQuery::Result>
|
|
425
|
+
S2FurthestEdgeQuery::FindFurthestEdges(Target* target) {
|
|
426
|
+
std::vector<S2FurthestEdgeQuery::Result> results;
|
|
427
|
+
FindFurthestEdges(target, &results);
|
|
428
|
+
return results;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
inline S1ChordAngle S2FurthestEdgeQuery::GetDistance(Target* target) {
|
|
432
|
+
return FindFurthestEdge(target).distance();
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
inline S2Shape::Edge S2FurthestEdgeQuery::GetEdge(const Result& result) const {
|
|
436
|
+
return index().shape(result.shape_id())->edge(result.edge_id());
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
#endif // S2_S2FURTHEST_EDGE_QUERY_H_
|