@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,421 @@
|
|
|
1
|
+
// Copyright 2013 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
|
|
18
|
+
#ifndef S2_S2CLOSEST_EDGE_QUERY_H_
|
|
19
|
+
#define S2_S2CLOSEST_EDGE_QUERY_H_
|
|
20
|
+
|
|
21
|
+
#include <memory>
|
|
22
|
+
#include <queue>
|
|
23
|
+
#include <type_traits>
|
|
24
|
+
#include <vector>
|
|
25
|
+
|
|
26
|
+
#include "s2/base/logging.h"
|
|
27
|
+
#include "s2/third_party/absl/base/macros.h"
|
|
28
|
+
#include "s2/third_party/absl/container/inlined_vector.h"
|
|
29
|
+
#include "s2/_fp_contract_off.h"
|
|
30
|
+
#include "s2/s1angle.h"
|
|
31
|
+
#include "s2/s1chord_angle.h"
|
|
32
|
+
#include "s2/s2cell.h"
|
|
33
|
+
#include "s2/s2cell_id.h"
|
|
34
|
+
#include "s2/s2closest_edge_query_base.h"
|
|
35
|
+
#include "s2/s2edge_distances.h"
|
|
36
|
+
#include "s2/s2min_distance_targets.h"
|
|
37
|
+
#include "s2/s2shape_index.h"
|
|
38
|
+
|
|
39
|
+
// S2ClosestEdgeQuery is a helper class for finding the closest edge(s) to a
|
|
40
|
+
// given point, edge, S2Cell, or geometry collection. For example, given a
|
|
41
|
+
// set of polylines, the following code efficiently finds the closest 5 edges
|
|
42
|
+
// to a query point:
|
|
43
|
+
//
|
|
44
|
+
// void Test(const vector<S2Polyline*>& polylines, const S2Point& point) {
|
|
45
|
+
// MutableS2ShapeIndex index;
|
|
46
|
+
// for (S2Polyline* polyline : polylines) {
|
|
47
|
+
// index.Add(new S2Polyline::Shape(polyline));
|
|
48
|
+
// }
|
|
49
|
+
// S2ClosestEdgeQuery query(&index);
|
|
50
|
+
// query.mutable_options()->set_max_results(5);
|
|
51
|
+
// S2ClosestEdgeQuery::PointTarget target(point);
|
|
52
|
+
// for (const auto& result : query.FindClosestEdges(&target)) {
|
|
53
|
+
// // The Result struct contains the following fields:
|
|
54
|
+
// // "distance" is the distance to the edge.
|
|
55
|
+
// // "shape_id" identifies the S2Shape containing the edge.
|
|
56
|
+
// // "edge_id" identifies the edge with the given shape.
|
|
57
|
+
// // The following convenience methods may also be useful:
|
|
58
|
+
// // query.GetEdge(result) returns the endpoints of the edge.
|
|
59
|
+
// // query.Project(point, result) computes the closest point on the
|
|
60
|
+
// // result edge to the given target point.
|
|
61
|
+
// int polyline_index = result.shape_id;
|
|
62
|
+
// int edge_index = result.edge_id;
|
|
63
|
+
// S1ChordAngle distance = result.distance; // Use ToAngle() for S1Angle.
|
|
64
|
+
// S2Shape::Edge edge = query.GetEdge(result);
|
|
65
|
+
// S2Point closest_point = query.Project(point, result);
|
|
66
|
+
// }
|
|
67
|
+
// }
|
|
68
|
+
//
|
|
69
|
+
// You can find either the k closest edges, or all edges within a given
|
|
70
|
+
// radius, or both (i.e., the k closest edges up to a given maximum radius).
|
|
71
|
+
// E.g. to find all the edges within 5 kilometers, call
|
|
72
|
+
//
|
|
73
|
+
// query.mutable_options()->set_max_distance(
|
|
74
|
+
// S2Earth::ToAngle(util::units::Kilometers(5)));
|
|
75
|
+
//
|
|
76
|
+
// By default *all* edges are returned, so you should always specify either
|
|
77
|
+
// max_results() or max_distance() or both. There is also a FindClosestEdge()
|
|
78
|
+
// convenience method that returns only the closest edge.
|
|
79
|
+
//
|
|
80
|
+
// Note that by default, distances are measured to the boundary and interior
|
|
81
|
+
// of polygons. For example, if a point is inside a polygon then its distance
|
|
82
|
+
// is zero. 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 IsDistanceLess() method. This is
|
|
86
|
+
// much faster than actually calculating the distance with FindClosestEdge(),
|
|
87
|
+
// since the implementation can stop as soon as it can prove that the minimum
|
|
88
|
+
// distance is either above or below the threshold.
|
|
89
|
+
//
|
|
90
|
+
// To find the closest edges to a query edge rather than a point, use:
|
|
91
|
+
//
|
|
92
|
+
// S2ClosestEdgeQuery::EdgeTarget target(v0, v1);
|
|
93
|
+
// query.FindClosestEdges(&target);
|
|
94
|
+
//
|
|
95
|
+
// Similarly you can find the closest edges to an S2Cell by using an
|
|
96
|
+
// S2ClosestEdgeQuery::CellTarget, and you can find the closest edges to an
|
|
97
|
+
// arbitrary collection of points, polylines, and polygons by using an
|
|
98
|
+
// S2ClosestEdgeQuery::ShapeIndexTarget.
|
|
99
|
+
//
|
|
100
|
+
// The implementation is designed to be fast for both simple and complex
|
|
101
|
+
// geometric objects.
|
|
102
|
+
class S2ClosestEdgeQuery {
|
|
103
|
+
public:
|
|
104
|
+
// See S2ClosestEdgeQueryBase for full documentation.
|
|
105
|
+
|
|
106
|
+
// S2MinDistance is a thin wrapper around S1ChordAngle that implements the
|
|
107
|
+
// Distance concept required by S2ClosestPointQueryBase.
|
|
108
|
+
using Distance = S2MinDistance;
|
|
109
|
+
using Base = S2ClosestEdgeQueryBase<Distance>;
|
|
110
|
+
|
|
111
|
+
// Each "Result" object represents a closest edge. It has the following
|
|
112
|
+
// fields:
|
|
113
|
+
//
|
|
114
|
+
// S1ChordAngle distance; // The distance from the target to this edge.
|
|
115
|
+
// int32 shape_id; // Identifies an indexed shape.
|
|
116
|
+
// int32 edge_id; // Identifies an edge within the shape.
|
|
117
|
+
using Result = Base::Result;
|
|
118
|
+
|
|
119
|
+
// Options that control the set of edges returned. Note that by default
|
|
120
|
+
// *all* edges are returned, so you will always want to set either the
|
|
121
|
+
// max_results() option or the max_distance() option (or both).
|
|
122
|
+
class Options : public Base::Options {
|
|
123
|
+
public:
|
|
124
|
+
// See S2ClosestEdgeQueryBase::Options for the full set of options.
|
|
125
|
+
|
|
126
|
+
// Specifies that only edges whose distance to the target is less than
|
|
127
|
+
// "max_distance" should be returned.
|
|
128
|
+
//
|
|
129
|
+
// Note that edges whose distance is exactly equal to "max_distance" are
|
|
130
|
+
// not returned. Normally this doesn't matter, because distances are not
|
|
131
|
+
// computed exactly in the first place, but if such edges are needed then
|
|
132
|
+
// see set_inclusive_max_distance() below.
|
|
133
|
+
//
|
|
134
|
+
// DEFAULT: Distance::Infinity()
|
|
135
|
+
void set_max_distance(S1ChordAngle max_distance);
|
|
136
|
+
|
|
137
|
+
// Like set_max_distance(), except that edges whose distance is exactly
|
|
138
|
+
// equal to "max_distance" are also returned. Equivalent to calling
|
|
139
|
+
// set_max_distance(max_distance.Successor()).
|
|
140
|
+
void set_inclusive_max_distance(S1ChordAngle max_distance);
|
|
141
|
+
|
|
142
|
+
// Like set_inclusive_max_distance(), except that "max_distance" is also
|
|
143
|
+
// increased by the maximum error in the distance calculation. This
|
|
144
|
+
// ensures that all edges whose true distance is less than or equal to
|
|
145
|
+
// "max_distance" will be returned (along with some edges whose true
|
|
146
|
+
// distance is slightly greater).
|
|
147
|
+
//
|
|
148
|
+
// Algorithms that need to do exact distance comparisons can use this
|
|
149
|
+
// option to find a set of candidate edges that can then be filtered
|
|
150
|
+
// further (e.g., using s2pred::CompareDistance).
|
|
151
|
+
void set_conservative_max_distance(S1ChordAngle max_distance);
|
|
152
|
+
|
|
153
|
+
// Versions of set_max_distance that take an S1Angle argument. (Note that
|
|
154
|
+
// these functions require a conversion, and that the S1ChordAngle versions
|
|
155
|
+
// are preferred.)
|
|
156
|
+
void set_max_distance(S1Angle max_distance);
|
|
157
|
+
void set_inclusive_max_distance(S1Angle max_distance);
|
|
158
|
+
void set_conservative_max_distance(S1Angle max_distance);
|
|
159
|
+
|
|
160
|
+
// See S2ClosestEdgeQueryBase::Options for documentation.
|
|
161
|
+
using Base::Options::set_max_error; // S1Chordangle version
|
|
162
|
+
void set_max_error(S1Angle max_error); // S1Angle version
|
|
163
|
+
|
|
164
|
+
// Inherited options (see s2closest_edge_query_base.h for details):
|
|
165
|
+
using Base::Options::set_max_results;
|
|
166
|
+
using Base::Options::set_include_interiors;
|
|
167
|
+
using Base::Options::set_use_brute_force;
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
// "Target" represents the geometry to which the distance is measured.
|
|
171
|
+
// There are subtypes for measuring the distance to a point, an edge, an
|
|
172
|
+
// S2Cell, or an S2ShapeIndex (an arbitrary collection of geometry).
|
|
173
|
+
using Target = S2MinDistanceTarget;
|
|
174
|
+
|
|
175
|
+
// Target subtype that computes the closest distance to a point.
|
|
176
|
+
class PointTarget final : public S2MinDistancePointTarget {
|
|
177
|
+
public:
|
|
178
|
+
explicit PointTarget(const S2Point& point);
|
|
179
|
+
int max_brute_force_index_size() const override;
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
// Target subtype that computes the closest distance to an edge.
|
|
183
|
+
class EdgeTarget final : public S2MinDistanceEdgeTarget {
|
|
184
|
+
public:
|
|
185
|
+
explicit EdgeTarget(const S2Point& a, const S2Point& b);
|
|
186
|
+
int max_brute_force_index_size() const override;
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
// Target subtype that computes the closest distance to an S2Cell
|
|
190
|
+
// (including the interior of the cell).
|
|
191
|
+
class CellTarget final : public S2MinDistanceCellTarget {
|
|
192
|
+
public:
|
|
193
|
+
explicit CellTarget(const S2Cell& cell);
|
|
194
|
+
int max_brute_force_index_size() const override;
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
// Target subtype that computes the closest distance to an S2ShapeIndex
|
|
198
|
+
// (an arbitrary collection of points, polylines, and/or polygons).
|
|
199
|
+
//
|
|
200
|
+
// By default, distances are measured to the boundary and interior of
|
|
201
|
+
// polygons in the S2ShapeIndex rather than to polygon boundaries only.
|
|
202
|
+
// If you wish to change this behavior, you may call
|
|
203
|
+
//
|
|
204
|
+
// target.set_include_interiors(false);
|
|
205
|
+
//
|
|
206
|
+
// (see S2MinDistanceShapeIndexTarget for details).
|
|
207
|
+
class ShapeIndexTarget final : public S2MinDistanceShapeIndexTarget {
|
|
208
|
+
public:
|
|
209
|
+
explicit ShapeIndexTarget(const S2ShapeIndex* index);
|
|
210
|
+
int max_brute_force_index_size() const override;
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
// Convenience constructor that calls Init(). Options may be specified here
|
|
214
|
+
// or changed at any time using the mutable_options() accessor method.
|
|
215
|
+
explicit S2ClosestEdgeQuery(const S2ShapeIndex* index,
|
|
216
|
+
const Options& options = Options());
|
|
217
|
+
|
|
218
|
+
// Default constructor; requires Init() to be called.
|
|
219
|
+
S2ClosestEdgeQuery();
|
|
220
|
+
~S2ClosestEdgeQuery();
|
|
221
|
+
|
|
222
|
+
// Initializes the query. Options may be specified here or changed at any
|
|
223
|
+
// time using the mutable_options() accessor method.
|
|
224
|
+
//
|
|
225
|
+
// REQUIRES: "index" must persist for the lifetime of this object.
|
|
226
|
+
// REQUIRES: ReInit() must be called if "index" is modified.
|
|
227
|
+
void Init(const S2ShapeIndex* index, const Options& options = Options());
|
|
228
|
+
|
|
229
|
+
// Reinitializes the query. This method must be called whenever the
|
|
230
|
+
// underlying S2ShapeIndex is modified.
|
|
231
|
+
void ReInit();
|
|
232
|
+
|
|
233
|
+
// Returns a reference to the underlying S2ShapeIndex.
|
|
234
|
+
const S2ShapeIndex& index() const;
|
|
235
|
+
|
|
236
|
+
// Returns the query options. Options can be modified between queries.
|
|
237
|
+
const Options& options() const;
|
|
238
|
+
Options* mutable_options();
|
|
239
|
+
|
|
240
|
+
// Returns the closest edges to the given target that satisfy the current
|
|
241
|
+
// options. This method may be called multiple times.
|
|
242
|
+
//
|
|
243
|
+
// Note that if options().include_interiors() is true, the result vector may
|
|
244
|
+
// include some entries with edge_id == -1. This indicates that the target
|
|
245
|
+
// intersects the indexed polygon with the given shape_id.
|
|
246
|
+
std::vector<Result> FindClosestEdges(Target* target);
|
|
247
|
+
|
|
248
|
+
// This version can be more efficient when this method is called many times,
|
|
249
|
+
// since it does not require allocating a new vector on each call.
|
|
250
|
+
void FindClosestEdges(Target* target, std::vector<Result>* results);
|
|
251
|
+
|
|
252
|
+
//////////////////////// Convenience Methods ////////////////////////
|
|
253
|
+
|
|
254
|
+
// Returns the closest edge to the target. If no edge satisfies the search
|
|
255
|
+
// criteria, then the Result object will have distance == Infinity(),
|
|
256
|
+
// is_empty() == true, and shape_id == edge_id == -1.
|
|
257
|
+
//
|
|
258
|
+
// Note that if options.include_interiors() is true, edge_id == -1 is also
|
|
259
|
+
// used to indicate that the target intersects an indexed polygon (but in
|
|
260
|
+
// that case distance == Zero() and shape_id >= 0).
|
|
261
|
+
Result FindClosestEdge(Target* target);
|
|
262
|
+
|
|
263
|
+
// Returns the minimum distance to the target. If the index or target is
|
|
264
|
+
// empty, returns S1ChordAngle::Infinity().
|
|
265
|
+
//
|
|
266
|
+
// Use IsDistanceLess() if you only want to compare the distance against a
|
|
267
|
+
// threshold value, since it is often much faster.
|
|
268
|
+
S1ChordAngle GetDistance(Target* target);
|
|
269
|
+
|
|
270
|
+
// Returns true if the distance to "target" is less than "limit".
|
|
271
|
+
//
|
|
272
|
+
// This method is usually much faster than GetDistance(), since it is much
|
|
273
|
+
// less work to determine whether the minimum distance is above or below a
|
|
274
|
+
// threshold than it is to calculate the actual minimum distance.
|
|
275
|
+
bool IsDistanceLess(Target* target, S1ChordAngle limit);
|
|
276
|
+
|
|
277
|
+
// Like IsDistanceLess(), but also returns true if the distance to "target"
|
|
278
|
+
// is exactly equal to "limit".
|
|
279
|
+
bool IsDistanceLessOrEqual(Target* target, S1ChordAngle limit);
|
|
280
|
+
|
|
281
|
+
// Like IsDistanceLessOrEqual(), except that "limit" is increased by the
|
|
282
|
+
// maximum error in the distance calculation. This ensures that this
|
|
283
|
+
// function returns true whenever the true, exact distance is less than
|
|
284
|
+
// or equal to "limit".
|
|
285
|
+
//
|
|
286
|
+
// For example, suppose that we want to test whether two geometries might
|
|
287
|
+
// intersect each other after they are snapped together using S2Builder
|
|
288
|
+
// (using the IdentitySnapFunction with a given "snap_radius"). Since
|
|
289
|
+
// S2Builder uses exact distance predicates (s2predicates.h), we need to
|
|
290
|
+
// measure the distance between the two geometries conservatively. If the
|
|
291
|
+
// distance is definitely greater than "snap_radius", then the geometries
|
|
292
|
+
// are guaranteed to not intersect after snapping.
|
|
293
|
+
bool IsConservativeDistanceLessOrEqual(Target* target, S1ChordAngle limit);
|
|
294
|
+
|
|
295
|
+
// Returns the endpoints of the given result edge.
|
|
296
|
+
//
|
|
297
|
+
// CAVEAT: If options().include_interiors() is true, then clients must not
|
|
298
|
+
// pass this method any Result objects that correspond to shape interiors,
|
|
299
|
+
// i.e. those where result.edge_id < 0.
|
|
300
|
+
//
|
|
301
|
+
// REQUIRES: result.edge_id >= 0
|
|
302
|
+
S2Shape::Edge GetEdge(const Result& result) const;
|
|
303
|
+
|
|
304
|
+
// Returns the point on given result edge that is closest to "point".
|
|
305
|
+
S2Point Project(const S2Point& point, const Result& result) const;
|
|
306
|
+
|
|
307
|
+
private:
|
|
308
|
+
Options options_;
|
|
309
|
+
Base base_;
|
|
310
|
+
|
|
311
|
+
S2ClosestEdgeQuery(const S2ClosestEdgeQuery&) = delete;
|
|
312
|
+
void operator=(const S2ClosestEdgeQuery&) = delete;
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
////////////////// Implementation details follow ////////////////////
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
inline void S2ClosestEdgeQuery::Options::set_max_distance(
|
|
320
|
+
S1ChordAngle max_distance) {
|
|
321
|
+
Base::Options::set_max_distance(Distance(max_distance));
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
inline void S2ClosestEdgeQuery::Options::set_max_distance(
|
|
325
|
+
S1Angle max_distance) {
|
|
326
|
+
Base::Options::set_max_distance(Distance(max_distance));
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
inline void S2ClosestEdgeQuery::Options::set_inclusive_max_distance(
|
|
330
|
+
S1ChordAngle max_distance) {
|
|
331
|
+
set_max_distance(max_distance.Successor());
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
inline void S2ClosestEdgeQuery::Options::set_inclusive_max_distance(
|
|
335
|
+
S1Angle max_distance) {
|
|
336
|
+
set_inclusive_max_distance(S1ChordAngle(max_distance));
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
inline void S2ClosestEdgeQuery::Options::set_max_error(S1Angle max_error) {
|
|
340
|
+
Base::Options::set_max_error(S1ChordAngle(max_error));
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
inline S2ClosestEdgeQuery::PointTarget::PointTarget(const S2Point& point)
|
|
344
|
+
: S2MinDistancePointTarget(point) {
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
inline S2ClosestEdgeQuery::EdgeTarget::EdgeTarget(const S2Point& a,
|
|
348
|
+
const S2Point& b)
|
|
349
|
+
: S2MinDistanceEdgeTarget(a, b) {
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
inline S2ClosestEdgeQuery::CellTarget::CellTarget(const S2Cell& cell)
|
|
353
|
+
: S2MinDistanceCellTarget(cell) {
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
inline S2ClosestEdgeQuery::ShapeIndexTarget::ShapeIndexTarget(
|
|
357
|
+
const S2ShapeIndex* index)
|
|
358
|
+
: S2MinDistanceShapeIndexTarget(index) {
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
inline S2ClosestEdgeQuery::S2ClosestEdgeQuery(const S2ShapeIndex* index,
|
|
362
|
+
const Options& options) {
|
|
363
|
+
Init(index, options);
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
inline void S2ClosestEdgeQuery::Init(const S2ShapeIndex* index,
|
|
367
|
+
const Options& options) {
|
|
368
|
+
options_ = options;
|
|
369
|
+
base_.Init(index);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
inline void S2ClosestEdgeQuery::ReInit() {
|
|
373
|
+
base_.ReInit();
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
inline const S2ShapeIndex& S2ClosestEdgeQuery::index() const {
|
|
377
|
+
return base_.index();
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
inline const S2ClosestEdgeQuery::Options& S2ClosestEdgeQuery::options() const {
|
|
381
|
+
return options_;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
inline S2ClosestEdgeQuery::Options* S2ClosestEdgeQuery::mutable_options() {
|
|
385
|
+
return &options_;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
inline std::vector<S2ClosestEdgeQuery::Result>
|
|
389
|
+
S2ClosestEdgeQuery::FindClosestEdges(Target* target) {
|
|
390
|
+
return base_.FindClosestEdges(target, options_);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
inline void S2ClosestEdgeQuery::FindClosestEdges(Target* target,
|
|
394
|
+
std::vector<Result>* results) {
|
|
395
|
+
base_.FindClosestEdges(target, options_, results);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
inline S2ClosestEdgeQuery::Result S2ClosestEdgeQuery::FindClosestEdge(
|
|
399
|
+
Target* target) {
|
|
400
|
+
static_assert(sizeof(Options) <= 32, "Consider not copying Options here");
|
|
401
|
+
Options tmp_options = options_;
|
|
402
|
+
tmp_options.set_max_results(1);
|
|
403
|
+
return base_.FindClosestEdge(target, tmp_options);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
inline S1ChordAngle S2ClosestEdgeQuery::GetDistance(Target* target) {
|
|
407
|
+
return FindClosestEdge(target).distance();
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
inline S2Shape::Edge S2ClosestEdgeQuery::GetEdge(const Result& result) const {
|
|
411
|
+
return index().shape(result.shape_id())->edge(result.edge_id());
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
inline S2Point S2ClosestEdgeQuery::Project(const S2Point& point,
|
|
415
|
+
const Result& result) const {
|
|
416
|
+
if (result.edge_id() < 0) return point;
|
|
417
|
+
auto edge = GetEdge(result);
|
|
418
|
+
return S2::Project(point, edge.v0, edge.v1);
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
#endif // S2_S2CLOSEST_EDGE_QUERY_H_
|