@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,69 @@
|
|
|
1
|
+
// Copyright 2005 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
//
|
|
18
|
+
// The S2 library defines extra validity checks throughout the code that can
|
|
19
|
+
// optionally be enabled or disabled. By default, these validity checks are
|
|
20
|
+
// enabled in debug-mode builds (including fastbuild) and disabled in
|
|
21
|
+
// optimized builds.
|
|
22
|
+
//
|
|
23
|
+
// There are two ways to change the default behavior:
|
|
24
|
+
//
|
|
25
|
+
// - The command line --s2debug flag, which changes the global default.
|
|
26
|
+
//
|
|
27
|
+
// - The S2Debug enum, which allows validity checks to be enabled or disabled
|
|
28
|
+
// for specific objects (e.g., an S2Polygon).
|
|
29
|
+
//
|
|
30
|
+
// If you want to intentionally create invalid geometry (e.g., in a test), the
|
|
31
|
+
// S2Debug enum is preferable. For example, to create an invalid S2Polygon,
|
|
32
|
+
// you can do this:
|
|
33
|
+
//
|
|
34
|
+
// S2Polygon invalid;
|
|
35
|
+
// invalid.set_s2debug_override(S2Debug::DISABLE);
|
|
36
|
+
//
|
|
37
|
+
// There is also a convenience constructor:
|
|
38
|
+
//
|
|
39
|
+
// vector<unique_ptr<S2Loop>> loops = ...;
|
|
40
|
+
// S2Polygon invalid(loops, S2Debug::DISABLE);
|
|
41
|
+
//
|
|
42
|
+
// There are a few checks that cannot be disabled this way (e.g., internal
|
|
43
|
+
// functions that require S2Points to be unit length). If you absolutely need
|
|
44
|
+
// to disable these checks, you can set FLAGS_s2debug for the duration of a
|
|
45
|
+
// specific test like this:
|
|
46
|
+
//
|
|
47
|
+
// TEST(MyClass, InvalidGeometry) {
|
|
48
|
+
// FLAGS_s2debug = false; // Automatically restored between tests
|
|
49
|
+
// ...
|
|
50
|
+
// }
|
|
51
|
+
|
|
52
|
+
#ifndef S2_S2DEBUG_H_
|
|
53
|
+
#define S2_S2DEBUG_H_
|
|
54
|
+
|
|
55
|
+
#include "s2/base/commandlineflags.h"
|
|
56
|
+
#include "s2/base/integral_types.h"
|
|
57
|
+
|
|
58
|
+
// Command line flag that enables extra validity checking throughout the S2
|
|
59
|
+
// code. It is turned on by default in debug-mode builds.
|
|
60
|
+
S2_DECLARE_bool(s2debug);
|
|
61
|
+
|
|
62
|
+
// Class that allows the --s2debug validity checks to be enabled or disabled
|
|
63
|
+
// for specific objects (e.g., see S2Polygon).
|
|
64
|
+
enum class S2Debug : uint8 {
|
|
65
|
+
ALLOW, // Validity checks are controlled by --s2debug
|
|
66
|
+
DISABLE // No validity checks even when --s2debug is true
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
#endif // S2_S2DEBUG_H_
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
// Copyright 2017 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_S2DISTANCE_TARGET_H_
|
|
19
|
+
#define S2_S2DISTANCE_TARGET_H_
|
|
20
|
+
|
|
21
|
+
#include "s2/s2cap.h"
|
|
22
|
+
#include "s2/s2cell.h"
|
|
23
|
+
#include "s2/s2shape_index.h"
|
|
24
|
+
|
|
25
|
+
// S2DistanceTarget represents a geometric object to which distances are
|
|
26
|
+
// measured. For example, there are subtypes for measuring distances to a
|
|
27
|
+
// point, an edge, or to an S2ShapeIndex (an arbitrary collection of
|
|
28
|
+
// geometry). S2DistanceTarget objects are provided for the benefit of
|
|
29
|
+
// classes that measure distances and/or find nearby geometry, such as
|
|
30
|
+
// S2ClosestEdgeQuery, S2ClosestPointQuery, and S2ClosestCellQuery.
|
|
31
|
+
//
|
|
32
|
+
// Implementations do *not* need to be thread-safe. They may cache data or
|
|
33
|
+
// allocate temporary data structures in order to improve performance. For
|
|
34
|
+
// this reason, S2DistanceTarget objects are typically passed as pointers
|
|
35
|
+
// rather than as const references.
|
|
36
|
+
//
|
|
37
|
+
// The Distance template argument is used to represent distances. Usually
|
|
38
|
+
// this type is a thin wrapper around S1ChordAngle, but another distance type
|
|
39
|
+
// may be substituted as long as it implements the API below. This can be
|
|
40
|
+
// used to change the comparison function (e.g., to find the furthest edges
|
|
41
|
+
// from the target), to get more accuracy, or to measure non-spheroidal
|
|
42
|
+
// distances (e.g., using the WGS84 ellipsoid).
|
|
43
|
+
//
|
|
44
|
+
// The Distance concept is as follows:
|
|
45
|
+
//
|
|
46
|
+
// class Distance {
|
|
47
|
+
// public:
|
|
48
|
+
// // Default and copy constructors, assignment operator:
|
|
49
|
+
// Distance();
|
|
50
|
+
// Distance(const Distance&);
|
|
51
|
+
// Distance& operator=(const Distance&);
|
|
52
|
+
//
|
|
53
|
+
// // Factory methods:
|
|
54
|
+
// static Distance Zero(); // Returns a zero distance.
|
|
55
|
+
// static Distance Infinity(); // Larger than any valid distance.
|
|
56
|
+
// static Distance Negative(); // Smaller than any valid distance.
|
|
57
|
+
//
|
|
58
|
+
// // Comparison operators:
|
|
59
|
+
// friend bool operator==(Distance x, Distance y);
|
|
60
|
+
// friend bool operator<(Distance x, Distance y);
|
|
61
|
+
//
|
|
62
|
+
// // Delta represents the positive difference between two distances.
|
|
63
|
+
// // It is used together with operator-() to implement Options::max_error().
|
|
64
|
+
// // Typically Distance::Delta is simply S1ChordAngle.
|
|
65
|
+
// class Delta {
|
|
66
|
+
// public:
|
|
67
|
+
// Delta();
|
|
68
|
+
// Delta(const Delta&);
|
|
69
|
+
// Delta& operator=(const Delta&);
|
|
70
|
+
// friend bool operator==(Delta x, Delta y);
|
|
71
|
+
// static Delta Zero();
|
|
72
|
+
// };
|
|
73
|
+
//
|
|
74
|
+
// // Subtraction operator. Note that the second argument represents a
|
|
75
|
+
// // delta between two distances. This distinction is important for
|
|
76
|
+
// // classes that compute maximum distances (e.g., S2FurthestEdgeQuery).
|
|
77
|
+
// friend Distance operator-(Distance x, Delta delta);
|
|
78
|
+
//
|
|
79
|
+
// // Method that returns an upper bound on the S1ChordAngle corresponding
|
|
80
|
+
// // to this Distance (needed to implement Options::max_distance
|
|
81
|
+
// // efficiently). For example, if Distance measures WGS84 ellipsoid
|
|
82
|
+
// // distance then the corresponding angle needs to be 0.56% larger.
|
|
83
|
+
// S1ChordAngle GetChordAngleBound() const;
|
|
84
|
+
// };
|
|
85
|
+
template <class Distance>
|
|
86
|
+
class S2DistanceTarget {
|
|
87
|
+
public:
|
|
88
|
+
using Delta = typename Distance::Delta;
|
|
89
|
+
|
|
90
|
+
virtual ~S2DistanceTarget() {}
|
|
91
|
+
|
|
92
|
+
// Returns an S2Cap that bounds the set of points whose distance to the
|
|
93
|
+
// target is Distance::Zero().
|
|
94
|
+
virtual S2Cap GetCapBound() = 0;
|
|
95
|
+
|
|
96
|
+
// If the distance to the point "p" "min_dist", then updates "min_dist" and
|
|
97
|
+
// returns true. Otherwise returns false.
|
|
98
|
+
virtual bool UpdateMinDistance(const S2Point& p, Distance* min_dist) = 0;
|
|
99
|
+
|
|
100
|
+
// If the distance to the edge (v0, v1) is less than "min_dist", then
|
|
101
|
+
// updates "min_dist" and returns true. Otherwise returns false.
|
|
102
|
+
virtual bool UpdateMinDistance(const S2Point& v0, const S2Point& v1,
|
|
103
|
+
Distance* min_dist) = 0;
|
|
104
|
+
|
|
105
|
+
// If the distance to the given S2Cell (including its interior) is less
|
|
106
|
+
// than "min_dist", then updates "min_dist" and returns true. Otherwise
|
|
107
|
+
// returns false.
|
|
108
|
+
virtual bool UpdateMinDistance(const S2Cell& cell, Distance* min_dist) = 0;
|
|
109
|
+
|
|
110
|
+
// Finds all polygons in the given "query_index" that completely contain a
|
|
111
|
+
// connected component of the target geometry. (For example, if the
|
|
112
|
+
// target consists of 10 points, this method finds polygons that contain
|
|
113
|
+
// any of those 10 points.) For each such polygon, "visitor" is called
|
|
114
|
+
// with the S2Shape of the polygon along with a point of the target
|
|
115
|
+
// geometry that is contained by that polygon.
|
|
116
|
+
//
|
|
117
|
+
// Optionally, any polygon that intersects the target geometry may also be
|
|
118
|
+
// returned. In other words, this method returns all polygons that
|
|
119
|
+
// contain any connected component of the target, along with an arbitrary
|
|
120
|
+
// subset of the polygons that intersect the target.
|
|
121
|
+
//
|
|
122
|
+
// For example, suppose that "query_index" contains two abutting polygons
|
|
123
|
+
// A and B. If the target consists of two points "a" contained by A and
|
|
124
|
+
// "b" contained by B, then both A and B are returned. But if the target
|
|
125
|
+
// consists of the edge "ab", then any subset of {A, B} could be returned
|
|
126
|
+
// (because both polygons intersect the target but neither one contains
|
|
127
|
+
// the edge "ab").
|
|
128
|
+
//
|
|
129
|
+
// If "visitor" returns false, this method terminates early and returns
|
|
130
|
+
// false as well. Otherwise returns true.
|
|
131
|
+
//
|
|
132
|
+
// NOTE(ericv): This method exists only for the purpose of implementing
|
|
133
|
+
// S2ClosestEdgeQuery::Options::include_interiors() efficiently. Its API is
|
|
134
|
+
// unlikely to be useful for other purposes.
|
|
135
|
+
using ShapeVisitor = std::function<bool (S2Shape* containing_shape,
|
|
136
|
+
const S2Point& target_point)>;
|
|
137
|
+
virtual bool VisitContainingShapes(const S2ShapeIndex& query_index,
|
|
138
|
+
const ShapeVisitor& visitor) = 0;
|
|
139
|
+
|
|
140
|
+
// Specifies that whenever one of the UpdateMinDistance() methods above
|
|
141
|
+
// returns "true", the returned distance is allowed to be up to "max_error"
|
|
142
|
+
// larger than the true minimum distance. In other words, it gives this
|
|
143
|
+
// target object permission to terminate its distance calculation as soon as
|
|
144
|
+
// it has determined that (1) the minimum distance is less than "min_dist"
|
|
145
|
+
// and (2) the best possible further improvement is less than "max_error".
|
|
146
|
+
//
|
|
147
|
+
// If the target takes advantage of "max_error" to optimize its distance
|
|
148
|
+
// calculation, this method must return "true". (Most target types can use
|
|
149
|
+
// the default implementation which simply returns false.)
|
|
150
|
+
virtual bool set_max_error(const Delta& max_error) { return false; }
|
|
151
|
+
|
|
152
|
+
// The following method is provided as a convenience for classes that
|
|
153
|
+
// compute distances to a collection of indexed geometry, such as
|
|
154
|
+
// S2ClosestPointQuery, S2ClosestEdgeQuery, and S2ClosestCellQuery. It
|
|
155
|
+
// returns the maximum number of indexed objects for which it is faster to
|
|
156
|
+
// compute the distance by brute force (e.g., by testing every edge) rather
|
|
157
|
+
// than by using an index. (The appropriate value is different for each
|
|
158
|
+
// index type and can be estimated for a given (distance target, index type)
|
|
159
|
+
// pair by running benchmarks.)
|
|
160
|
+
//
|
|
161
|
+
// By default this method returns -1, indicating that it is not implemented.
|
|
162
|
+
virtual int max_brute_force_index_size() const { return -1; }
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
#endif // S2_S2DISTANCE_TARGET_H_
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Copyright Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
#include "s2/s2earth.h"
|
|
17
|
+
|
|
18
|
+
#include <cmath>
|
|
19
|
+
#include <algorithm>
|
|
20
|
+
|
|
21
|
+
namespace {
|
|
22
|
+
|
|
23
|
+
// http://en.wikipedia.org/wiki/Haversine_formula
|
|
24
|
+
// Haversine(x) has very good numerical stability around zero.
|
|
25
|
+
// Haversine(x) == (1-cos(x))/2 == sin(x/2)^2; must be implemented with the
|
|
26
|
+
// second form to reap the numerical benefits.
|
|
27
|
+
double Haversine(const double radians) {
|
|
28
|
+
const double sinHalf = sin(radians / 2);
|
|
29
|
+
return sinHalf * sinHalf;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
} // namespace
|
|
33
|
+
|
|
34
|
+
double S2Earth::ToLongitudeRadians(const util::units::Meters& distance,
|
|
35
|
+
double latitude_radians) {
|
|
36
|
+
double scalar = cos(latitude_radians);
|
|
37
|
+
if (scalar == 0) return M_PI * 2;
|
|
38
|
+
return std::min(ToRadians(distance) / scalar, M_PI * 2);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Sourced from http://www.movable-type.co.uk/scripts/latlong.html.
|
|
42
|
+
S1Angle S2Earth::GetInitialBearing(const S2LatLng& a, const S2LatLng& b) {
|
|
43
|
+
const double lat1 = a.lat().radians();
|
|
44
|
+
const double cosLat2 = cos(b.lat().radians());
|
|
45
|
+
const double lat_diff = b.lat().radians() - a.lat().radians();
|
|
46
|
+
const double lng_diff = b.lng().radians() - a.lng().radians();
|
|
47
|
+
|
|
48
|
+
const double x =
|
|
49
|
+
sin(lat_diff) + sin(lat1) * cosLat2 * 2 * Haversine(lng_diff);
|
|
50
|
+
const double y = sin(lng_diff) * cosLat2;
|
|
51
|
+
return S1Angle::Radians(atan2(y, x));
|
|
52
|
+
}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
// Copyright 2005 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
//
|
|
18
|
+
// The earth modeled as a sphere. There are lots of convenience
|
|
19
|
+
// functions so that it doesn't take 2 lines of code just to do
|
|
20
|
+
// a single conversion.
|
|
21
|
+
|
|
22
|
+
#ifndef S2_S2EARTH_H_
|
|
23
|
+
#define S2_S2EARTH_H_
|
|
24
|
+
|
|
25
|
+
#include "s2/s1angle.h"
|
|
26
|
+
#include "s2/s1chord_angle.h"
|
|
27
|
+
#include "s2/s2latlng.h"
|
|
28
|
+
#include "s2/s2point.h"
|
|
29
|
+
#include "s2/util/units/length-units.h"
|
|
30
|
+
|
|
31
|
+
class S2Earth {
|
|
32
|
+
public:
|
|
33
|
+
// These functions convert between distances on the unit sphere
|
|
34
|
+
// (expressed as angles subtended from the sphere's center) and
|
|
35
|
+
// distances on the Earth's surface. This is possible only because
|
|
36
|
+
// the Earth is modeled as a sphere; otherwise a given angle would
|
|
37
|
+
// correspond to a range of distances depending on where the
|
|
38
|
+
// corresponding line segment was located.
|
|
39
|
+
//
|
|
40
|
+
// Note that you will lose precision if you use the ToDistance() method,
|
|
41
|
+
// since Meters is a single-precision type. If you need more precision,
|
|
42
|
+
// use one of the direct conversion methods below.
|
|
43
|
+
inline static S1Angle ToAngle(const util::units::Meters& distance);
|
|
44
|
+
inline static S1ChordAngle ToChordAngle(const util::units::Meters& distance);
|
|
45
|
+
inline static util::units::Meters ToDistance(const S1Angle& angle);
|
|
46
|
+
inline static util::units::Meters ToDistance(const S1ChordAngle& cangle);
|
|
47
|
+
|
|
48
|
+
// Convenience functions. These methods also return a double-precision
|
|
49
|
+
// result, unlike the generic ToDistance() method.
|
|
50
|
+
inline static double ToRadians(const util::units::Meters& distance);
|
|
51
|
+
inline static double ToMeters(const S1Angle& angle);
|
|
52
|
+
inline static double ToMeters(const S1ChordAngle& cangle);
|
|
53
|
+
inline static double ToKm(const S1Angle& angle);
|
|
54
|
+
inline static double ToKm(const S1ChordAngle& cangle);
|
|
55
|
+
inline static double KmToRadians(double km);
|
|
56
|
+
inline static double RadiansToKm(double radians);
|
|
57
|
+
inline static double MetersToRadians(double meters);
|
|
58
|
+
inline static double RadiansToMeters(double radians);
|
|
59
|
+
|
|
60
|
+
// These functions convert between areas on the unit sphere
|
|
61
|
+
// (as returned by the S2 library) and areas on the Earth's surface.
|
|
62
|
+
// Note that the area of a region on the unit sphere is equal to the
|
|
63
|
+
// solid angle it subtends from the sphere's center (measured in steradians).
|
|
64
|
+
inline static double SquareKmToSteradians(double km2);
|
|
65
|
+
inline static double SquareMetersToSteradians(double m2);
|
|
66
|
+
inline static double SteradiansToSquareKm(double steradians);
|
|
67
|
+
inline static double SteradiansToSquareMeters(double steradians);
|
|
68
|
+
|
|
69
|
+
// Convenience function for the frequent case where you need to call
|
|
70
|
+
// ToRadians in order to convert an east-west distance on the globe to
|
|
71
|
+
// radians. The output is a function of how close to the poles you are
|
|
72
|
+
// (i.e. at the bulge at the equator, one unit of longitude represents a
|
|
73
|
+
// much farther distance). The function will never return more than 2*PI
|
|
74
|
+
// radians, even if you're trying to go 100 million miles west at the north
|
|
75
|
+
// pole.
|
|
76
|
+
static double ToLongitudeRadians(const util::units::Meters& distance,
|
|
77
|
+
double latitude_radians);
|
|
78
|
+
|
|
79
|
+
// Computes the initial bearing from a to b. This is the bearing an observer
|
|
80
|
+
// at point a has when facing point b. A bearing of 0 degrees is north, and it
|
|
81
|
+
// increases clockwise (90 degrees is east, etc).
|
|
82
|
+
// If a == b, a == -b, or a is one of the Earths' poles, the return value is
|
|
83
|
+
// undefined.
|
|
84
|
+
static S1Angle GetInitialBearing(const S2LatLng& a, const S2LatLng& b);
|
|
85
|
+
|
|
86
|
+
// Returns the distance between two points. Example:
|
|
87
|
+
// double miles = Miles(geostore::S2Earth::GetDistance(a, b)).value();
|
|
88
|
+
//
|
|
89
|
+
// Note that these methods only have single-precision accuracy, since
|
|
90
|
+
// Meters is a single-precision type. If you ned more precision, use one
|
|
91
|
+
// of the methods below.
|
|
92
|
+
inline static util::units::Meters GetDistance(const S2Point& a,
|
|
93
|
+
const S2Point& b);
|
|
94
|
+
inline static util::units::Meters GetDistance(const S2LatLng& a,
|
|
95
|
+
const S2LatLng& b);
|
|
96
|
+
|
|
97
|
+
// Convenience functions. These methods also return a double-precision
|
|
98
|
+
// result, unlike the generic GetDistance() method.
|
|
99
|
+
inline static double GetDistanceKm(const S2Point& a, const S2Point& b);
|
|
100
|
+
inline static double GetDistanceKm(const S2LatLng& a, const S2LatLng& b);
|
|
101
|
+
inline static double GetDistanceMeters(const S2Point& a, const S2Point& b);
|
|
102
|
+
inline static double GetDistanceMeters(const S2LatLng& a, const S2LatLng& b);
|
|
103
|
+
|
|
104
|
+
// Returns the Earth's mean radius, which is the radius of the equivalent
|
|
105
|
+
// sphere with the same surface area. According to NASA, this value is
|
|
106
|
+
// 6371.01 +/- 0.02 km. The equatorial radius is 6378.136 km, and the polar
|
|
107
|
+
// radius is 6356.752 km. They differ by one part in 298.257.
|
|
108
|
+
//
|
|
109
|
+
// Reference: http://ssd.jpl.nasa.gov/phys_props_earth.html, which quotes
|
|
110
|
+
// Yoder, C.F. 1995. "Astrometric and Geodetic Properties of Earth and the
|
|
111
|
+
// Solar System" in Global Earth Physics, A Handbook of Physical Constants,
|
|
112
|
+
// AGU Reference Shelf 1, American Geophysical Union, Table 2.
|
|
113
|
+
inline static util::units::Meters Radius();
|
|
114
|
+
|
|
115
|
+
// Convenience functions.
|
|
116
|
+
inline static double RadiusKm();
|
|
117
|
+
inline static double RadiusMeters();
|
|
118
|
+
|
|
119
|
+
// Returns the altitude of the lowest known point on Earth. The lowest known
|
|
120
|
+
// point on Earth is the Challenger Deep with an altitude of -10898 meters
|
|
121
|
+
// above the surface of the spherical earth.
|
|
122
|
+
inline static util::units::Meters LowestAltitude();
|
|
123
|
+
|
|
124
|
+
// Convenience functions.
|
|
125
|
+
inline static double LowestAltitudeKm();
|
|
126
|
+
inline static double LowestAltitudeMeters();
|
|
127
|
+
|
|
128
|
+
// Returns the altitude of the highest known point on Earth. The highest
|
|
129
|
+
// known point on Earth is Mount Everest with an altitude of 8846 meters
|
|
130
|
+
// above the surface of the spherical earth.
|
|
131
|
+
inline static util::units::Meters HighestAltitude();
|
|
132
|
+
|
|
133
|
+
// Convenience functions.
|
|
134
|
+
inline static double HighestAltitudeKm();
|
|
135
|
+
inline static double HighestAltitudeMeters();
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
inline S1Angle S2Earth::ToAngle(const util::units::Meters& distance) {
|
|
139
|
+
return S1Angle::Radians(ToRadians(distance));
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
inline S1ChordAngle S2Earth::ToChordAngle(const util::units::Meters& distance) {
|
|
143
|
+
return S1ChordAngle(ToAngle(distance));
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
inline util::units::Meters S2Earth::ToDistance(const S1Angle& angle) {
|
|
147
|
+
return util::units::Meters(ToMeters(angle));
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
inline util::units::Meters S2Earth::ToDistance(const S1ChordAngle& cangle) {
|
|
151
|
+
return util::units::Meters(ToMeters(cangle));
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
inline double S2Earth::ToRadians(const util::units::Meters& distance) {
|
|
155
|
+
return distance.value() / RadiusMeters();
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
inline double S2Earth::ToMeters(const S1Angle& angle) {
|
|
159
|
+
return angle.radians() * RadiusMeters();
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
inline double S2Earth::ToKm(const S1Angle& angle) {
|
|
163
|
+
return angle.radians() * RadiusKm();
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
inline double S2Earth::ToMeters(const S1ChordAngle& cangle) {
|
|
167
|
+
return ToMeters(cangle.ToAngle());
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
inline double S2Earth::ToKm(const S1ChordAngle& cangle) {
|
|
171
|
+
return ToKm(cangle.ToAngle());
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
inline double S2Earth::KmToRadians(double km) {
|
|
175
|
+
return km / RadiusKm();
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
inline double S2Earth::RadiansToKm(double radians) {
|
|
179
|
+
return radians * RadiusKm();
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
inline double S2Earth::MetersToRadians(double meters) {
|
|
183
|
+
return meters / RadiusMeters();
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
inline double S2Earth::RadiansToMeters(double radians) {
|
|
187
|
+
return radians * RadiusMeters();
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
inline double S2Earth::SquareKmToSteradians(double km2) {
|
|
191
|
+
return km2 / (RadiusKm() * RadiusKm());
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
inline double S2Earth::SquareMetersToSteradians(double m2) {
|
|
195
|
+
return m2 / (RadiusMeters() * RadiusMeters());
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
inline double S2Earth::SteradiansToSquareKm(double steradians) {
|
|
199
|
+
return steradians * RadiusKm() * RadiusKm();
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
inline double S2Earth::SteradiansToSquareMeters(double steradians) {
|
|
203
|
+
return steradians * RadiusMeters() * RadiusMeters();
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
inline util::units::Meters S2Earth::GetDistance(const S2Point& a,
|
|
207
|
+
const S2Point& b) {
|
|
208
|
+
return ToDistance(S1Angle(a, b));
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
inline util::units::Meters S2Earth::GetDistance(const S2LatLng& a,
|
|
212
|
+
const S2LatLng& b) {
|
|
213
|
+
return ToDistance(a.GetDistance(b));
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
inline double S2Earth::GetDistanceKm(const S2Point& a, const S2Point& b) {
|
|
217
|
+
return RadiansToKm(a.Angle(b));
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
inline double S2Earth::GetDistanceKm(const S2LatLng& a, const S2LatLng& b) {
|
|
221
|
+
return ToKm(a.GetDistance(b));
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
inline double S2Earth::GetDistanceMeters(const S2Point& a, const S2Point& b) {
|
|
225
|
+
return RadiansToMeters(a.Angle(b));
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
inline double S2Earth::GetDistanceMeters(const S2LatLng& a, const S2LatLng& b) {
|
|
229
|
+
return ToMeters(a.GetDistance(b));
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
inline util::units::Meters S2Earth::Radius() {
|
|
233
|
+
return util::units::Meters(RadiusMeters());
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
inline double S2Earth::RadiusKm() {
|
|
237
|
+
return 0.001 * RadiusMeters();
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
inline double S2Earth::RadiusMeters() {
|
|
241
|
+
return 6371010.0;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
inline util::units::Meters S2Earth::LowestAltitude() {
|
|
245
|
+
return util::units::Meters(LowestAltitudeMeters());
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
inline double S2Earth::LowestAltitudeKm() {
|
|
249
|
+
return 0.001 * LowestAltitudeMeters();
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
inline double S2Earth::LowestAltitudeMeters() {
|
|
253
|
+
return -10898;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
inline util::units::Meters S2Earth::HighestAltitude() {
|
|
257
|
+
return util::units::Meters(HighestAltitudeMeters());
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
inline double S2Earth::HighestAltitudeKm() {
|
|
261
|
+
return 0.001 * HighestAltitudeMeters();
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
inline double S2Earth::HighestAltitudeMeters() {
|
|
265
|
+
return 8846;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
#endif // S2_S2EARTH_H_
|