@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,434 @@
|
|
|
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
|
+
#ifndef S2_S2LATLNG_RECT_H_
|
|
19
|
+
#define S2_S2LATLNG_RECT_H_
|
|
20
|
+
|
|
21
|
+
#include <cmath>
|
|
22
|
+
#include <iosfwd>
|
|
23
|
+
#include <iostream>
|
|
24
|
+
|
|
25
|
+
#include "s2/base/logging.h"
|
|
26
|
+
#include "s2/_fp_contract_off.h"
|
|
27
|
+
#include "s2/r1interval.h"
|
|
28
|
+
#include "s2/s1angle.h"
|
|
29
|
+
#include "s2/s1interval.h"
|
|
30
|
+
#include "s2/s2latlng.h"
|
|
31
|
+
#include "s2/s2region.h"
|
|
32
|
+
|
|
33
|
+
class Decoder;
|
|
34
|
+
class Encoder;
|
|
35
|
+
class S2Cap;
|
|
36
|
+
class S2Cell;
|
|
37
|
+
|
|
38
|
+
// An S2LatLngRect represents a closed latitude-longitude rectangle. It is
|
|
39
|
+
// capable of representing the empty and full rectangles as well as single
|
|
40
|
+
// points. Note that the latitude-longitude space is considered to have a
|
|
41
|
+
// *cylindrical* topology rather than a spherical one, i.e. the poles have
|
|
42
|
+
// multiple lat/lng representations. An S2LatLngRect may be defined so that
|
|
43
|
+
// includes some representations of a pole but not others. Use the
|
|
44
|
+
// PolarClosure() method if you want to expand a rectangle so that it contains
|
|
45
|
+
// all possible representations of any contained poles.
|
|
46
|
+
//
|
|
47
|
+
// Because S2LatLngRect uses S1Interval to store the longitude range,
|
|
48
|
+
// longitudes of -180 degrees are treated specially. Except for empty
|
|
49
|
+
// and full longitude spans, -180 degree longitudes will turn into +180
|
|
50
|
+
// degrees. This sign flip causes lng_lo() to be greater than lng_hi(),
|
|
51
|
+
// indicating that the rectangle will wrap around through -180 instead of
|
|
52
|
+
// through +179. Thus the math is consistent within the library, but the sign
|
|
53
|
+
// flip can be surprising, especially when working with map projections where
|
|
54
|
+
// -180 and +180 are at opposite ends of the flattened map. See the comments
|
|
55
|
+
// on S1Interval for more details.
|
|
56
|
+
//
|
|
57
|
+
// This class is intended to be copied by value as desired. It uses
|
|
58
|
+
// the default copy constructor and assignment operator, however it is
|
|
59
|
+
// not a "plain old datatype" (POD) because it has virtual functions.
|
|
60
|
+
class S2LatLngRect final : public S2Region {
|
|
61
|
+
public:
|
|
62
|
+
// Construct a rectangle from minimum and maximum latitudes and longitudes.
|
|
63
|
+
// If lo.lng() > hi.lng(), the rectangle spans the 180 degree longitude
|
|
64
|
+
// line. Both points must be normalized, with lo.lat() <= hi.lat().
|
|
65
|
+
// The rectangle contains all the points p such that 'lo' <= p <= 'hi',
|
|
66
|
+
// where '<=' is defined in the obvious way.
|
|
67
|
+
S2LatLngRect(const S2LatLng& lo, const S2LatLng& hi);
|
|
68
|
+
|
|
69
|
+
// Construct a rectangle from latitude and longitude intervals. The two
|
|
70
|
+
// intervals must either be both empty or both non-empty, and the latitude
|
|
71
|
+
// interval must not extend outside [-90, +90] degrees.
|
|
72
|
+
// Note that both intervals (and hence the rectangle) are closed.
|
|
73
|
+
S2LatLngRect(const R1Interval& lat, const S1Interval& lng);
|
|
74
|
+
|
|
75
|
+
// The default constructor creates an empty S2LatLngRect.
|
|
76
|
+
S2LatLngRect();
|
|
77
|
+
|
|
78
|
+
// Construct a rectangle of the given size centered around the given point.
|
|
79
|
+
// "center" needs to be normalized, but "size" does not. The latitude
|
|
80
|
+
// interval of the result is clamped to [-90,90] degrees, and the longitude
|
|
81
|
+
// interval of the result is Full() if and only if the longitude size is
|
|
82
|
+
// 360 degrees or more. Examples of clamping (in degrees):
|
|
83
|
+
//
|
|
84
|
+
// center=(80,170), size=(40,60) -> lat=[60,90], lng=[140,-160]
|
|
85
|
+
// center=(10,40), size=(210,400) -> lat=[-90,90], lng=[-180,180]
|
|
86
|
+
// center=(-90,180), size=(20,50) -> lat=[-90,-80], lng=[155,-155]
|
|
87
|
+
static S2LatLngRect FromCenterSize(const S2LatLng& center,
|
|
88
|
+
const S2LatLng& size);
|
|
89
|
+
|
|
90
|
+
// Construct a rectangle containing a single (normalized) point.
|
|
91
|
+
static S2LatLngRect FromPoint(const S2LatLng& p);
|
|
92
|
+
|
|
93
|
+
// Construct the minimal bounding rectangle containing the two given
|
|
94
|
+
// normalized points. This is equivalent to starting with an empty
|
|
95
|
+
// rectangle and calling AddPoint() twice. Note that it is different than
|
|
96
|
+
// the S2LatLngRect(lo, hi) constructor, where the first point is always
|
|
97
|
+
// used as the lower-left corner of the resulting rectangle.
|
|
98
|
+
static S2LatLngRect FromPointPair(const S2LatLng& p1, const S2LatLng& p2);
|
|
99
|
+
|
|
100
|
+
// Accessor methods.
|
|
101
|
+
S1Angle lat_lo() const { return S1Angle::Radians(lat_.lo()); }
|
|
102
|
+
S1Angle lat_hi() const { return S1Angle::Radians(lat_.hi()); }
|
|
103
|
+
S1Angle lng_lo() const { return S1Angle::Radians(lng_.lo()); }
|
|
104
|
+
S1Angle lng_hi() const { return S1Angle::Radians(lng_.hi()); }
|
|
105
|
+
const R1Interval& lat() const { return lat_; }
|
|
106
|
+
const S1Interval& lng() const { return lng_; }
|
|
107
|
+
R1Interval *mutable_lat() { return &lat_; }
|
|
108
|
+
S1Interval *mutable_lng() { return &lng_; }
|
|
109
|
+
S2LatLng lo() const { return S2LatLng(lat_lo(), lng_lo()); }
|
|
110
|
+
S2LatLng hi() const { return S2LatLng(lat_hi(), lng_hi()); }
|
|
111
|
+
|
|
112
|
+
// The canonical empty and full rectangles, as derived from the Empty
|
|
113
|
+
// and Full R1 and S1 Intervals.
|
|
114
|
+
// Empty: lat_lo=1, lat_hi=0, lng_lo=Pi, lng_hi=-Pi (radians)
|
|
115
|
+
static S2LatLngRect Empty();
|
|
116
|
+
// Full: lat_lo=-Pi/2, lat_hi=Pi/2, lng_lo=-Pi, lng_hi=Pi (radians)
|
|
117
|
+
static S2LatLngRect Full();
|
|
118
|
+
|
|
119
|
+
// The full allowable range of latitudes and longitudes.
|
|
120
|
+
static R1Interval FullLat() { return R1Interval(-M_PI_2, M_PI_2); }
|
|
121
|
+
static S1Interval FullLng() { return S1Interval::Full(); }
|
|
122
|
+
|
|
123
|
+
// Returns true if the rectangle is valid, which essentially just means
|
|
124
|
+
// that the latitude bounds do not exceed Pi/2 in absolute value and
|
|
125
|
+
// the longitude bounds do not exceed Pi in absolute value. Also, if
|
|
126
|
+
// either the latitude or longitude bound is empty then both must be.
|
|
127
|
+
bool is_valid() const;
|
|
128
|
+
|
|
129
|
+
// Returns true if the rectangle is empty, i.e. it contains no points at all.
|
|
130
|
+
bool is_empty() const;
|
|
131
|
+
|
|
132
|
+
// Returns true if the rectangle is full, i.e. it contains all points.
|
|
133
|
+
bool is_full() const;
|
|
134
|
+
|
|
135
|
+
// Returns true if the rectangle is a point, i.e. lo() == hi()
|
|
136
|
+
bool is_point() const;
|
|
137
|
+
|
|
138
|
+
// Returns true if lng_.lo() > lng_.hi(), i.e. the rectangle crosses
|
|
139
|
+
// the 180 degree longitude line.
|
|
140
|
+
bool is_inverted() const { return lng_.is_inverted(); }
|
|
141
|
+
|
|
142
|
+
// Returns the k-th vertex of the rectangle (k = 0,1,2,3) in CCW order
|
|
143
|
+
// (lower left, lower right, upper right, upper left). For convenience, the
|
|
144
|
+
// argument is reduced modulo 4 to the range [0..3].
|
|
145
|
+
S2LatLng GetVertex(int k) const;
|
|
146
|
+
|
|
147
|
+
// Returns the center of the rectangle in latitude-longitude space
|
|
148
|
+
// (in general this is not the center of the region on the sphere).
|
|
149
|
+
S2LatLng GetCenter() const;
|
|
150
|
+
|
|
151
|
+
// Returns the width and height of this rectangle in latitude-longitude
|
|
152
|
+
// space. Empty rectangles have a negative width and height.
|
|
153
|
+
S2LatLng GetSize() const;
|
|
154
|
+
|
|
155
|
+
// Returns the surface area of this rectangle on the unit sphere.
|
|
156
|
+
double Area() const;
|
|
157
|
+
|
|
158
|
+
// Returns the true centroid of the rectangle multiplied by its surface area
|
|
159
|
+
// (see s2centroids.h for details on centroids). The result is not unit
|
|
160
|
+
// length, so you may want to normalize it. Note that in general the
|
|
161
|
+
// centroid is *not* at the center of the rectangle, and in fact it may not
|
|
162
|
+
// even be contained by the rectangle. (It is the "center of mass" of the
|
|
163
|
+
// rectangle viewed as subset of the unit sphere, i.e. it is the point in
|
|
164
|
+
// space about which this curved shape would rotate.)
|
|
165
|
+
//
|
|
166
|
+
// The reason for multiplying the result by the rectangle area is to make it
|
|
167
|
+
// easier to compute the centroid of more complicated shapes. The centroid
|
|
168
|
+
// of a union of disjoint regions can be computed simply by adding their
|
|
169
|
+
// GetCentroid() results.
|
|
170
|
+
S2Point GetCentroid() const;
|
|
171
|
+
|
|
172
|
+
// More efficient version of Contains() that accepts a S2LatLng rather than
|
|
173
|
+
// an S2Point. The argument must be normalized.
|
|
174
|
+
bool Contains(const S2LatLng& ll) const;
|
|
175
|
+
|
|
176
|
+
// Returns true if and only if the given point is contained in the interior
|
|
177
|
+
// of the region (i.e. the region excluding its boundary). The point 'p'
|
|
178
|
+
// does not need to be normalized.
|
|
179
|
+
bool InteriorContains(const S2Point& p) const;
|
|
180
|
+
|
|
181
|
+
// More efficient version of InteriorContains() that accepts a S2LatLng
|
|
182
|
+
// rather than an S2Point. The argument must be normalized.
|
|
183
|
+
bool InteriorContains(const S2LatLng& ll) const;
|
|
184
|
+
|
|
185
|
+
// Returns true if and only if the rectangle contains the given other
|
|
186
|
+
// rectangle.
|
|
187
|
+
bool Contains(const S2LatLngRect& other) const;
|
|
188
|
+
|
|
189
|
+
// Returns true if and only if the interior of this rectangle contains all
|
|
190
|
+
// points of the given other rectangle (including its boundary).
|
|
191
|
+
bool InteriorContains(const S2LatLngRect& other) const;
|
|
192
|
+
|
|
193
|
+
// Returns true if this rectangle and the given other rectangle have any
|
|
194
|
+
// points in common.
|
|
195
|
+
bool Intersects(const S2LatLngRect& other) const;
|
|
196
|
+
|
|
197
|
+
// Returns true if this rectangle intersects the given cell. (This is an
|
|
198
|
+
// exact test and may be fairly expensive, see also MayIntersect below.)
|
|
199
|
+
bool Intersects(const S2Cell& cell) const;
|
|
200
|
+
|
|
201
|
+
// Returns true if and only if the interior of this rectangle intersects
|
|
202
|
+
// any point (including the boundary) of the given other rectangle.
|
|
203
|
+
bool InteriorIntersects(const S2LatLngRect& other) const;
|
|
204
|
+
|
|
205
|
+
// Returns true if the boundary of this rectangle intersects the given
|
|
206
|
+
// geodesic edge (v0, v1).
|
|
207
|
+
bool BoundaryIntersects(const S2Point& v0, const S2Point& v1) const;
|
|
208
|
+
|
|
209
|
+
// Increase the size of the bounding rectangle to include the given point.
|
|
210
|
+
// The rectangle is expanded by the minimum amount possible. The S2LatLng
|
|
211
|
+
// argument must be normalized.
|
|
212
|
+
void AddPoint(const S2Point& p);
|
|
213
|
+
void AddPoint(const S2LatLng& ll);
|
|
214
|
+
|
|
215
|
+
// Returns a rectangle that has been expanded by margin.lat() on each side in
|
|
216
|
+
// the latitude direction, and by margin.lng() on each side in the longitude
|
|
217
|
+
// direction. If either margin is negative, then shrinks the rectangle on
|
|
218
|
+
// the corresponding sides instead. The resulting rectangle may be empty.
|
|
219
|
+
//
|
|
220
|
+
// As noted above, the latitude-longitude space has the topology of a
|
|
221
|
+
// cylinder. Longitudes "wrap around" at +/-180 degrees, while latitudes
|
|
222
|
+
// are clamped to range [-90, 90]. This means that any expansion (positive
|
|
223
|
+
// or negative) of the full longitude range remains full (since the
|
|
224
|
+
// "rectangle" is actually a continuous band around the cylinder), while
|
|
225
|
+
// expansion of the full latitude range remains full only if the margin is
|
|
226
|
+
// positive.
|
|
227
|
+
//
|
|
228
|
+
// If either the latitude or longitude interval becomes empty after
|
|
229
|
+
// expansion by a negative margin, the result is empty.
|
|
230
|
+
//
|
|
231
|
+
// Note that if an expanded rectangle contains a pole, it may not contain
|
|
232
|
+
// all possible lat/lng representations of that pole (see header above).
|
|
233
|
+
// Use the PolarClosure() method if you do not want this behavior.
|
|
234
|
+
//
|
|
235
|
+
// If you are trying to grow a rectangle by a certain *distance* on the
|
|
236
|
+
// sphere (e.g. 5km), use the ExpandedByDistance() method instead.
|
|
237
|
+
S2LatLngRect Expanded(const S2LatLng& margin) const;
|
|
238
|
+
|
|
239
|
+
// If the rectangle does not include either pole, returns it unmodified.
|
|
240
|
+
// Otherwise expands the longitude range to Full() so that the rectangle
|
|
241
|
+
// contains all possible representations of the contained pole(s).
|
|
242
|
+
S2LatLngRect PolarClosure() const;
|
|
243
|
+
|
|
244
|
+
// Returns the smallest rectangle containing the union of this rectangle and
|
|
245
|
+
// the given rectangle.
|
|
246
|
+
S2LatLngRect Union(const S2LatLngRect& other) const;
|
|
247
|
+
|
|
248
|
+
// Returns the smallest rectangle containing the intersection of this
|
|
249
|
+
// rectangle and the given rectangle. Note that the region of intersection
|
|
250
|
+
// may consist of two disjoint rectangles, in which case a single rectangle
|
|
251
|
+
// spanning both of them is returned.
|
|
252
|
+
S2LatLngRect Intersection(const S2LatLngRect& other) const;
|
|
253
|
+
|
|
254
|
+
// Expands this rectangle so that it contains all points within the given
|
|
255
|
+
// distance of the boundary, and return the smallest such rectangle. If the
|
|
256
|
+
// distance is negative, then instead shrinks this rectangle so that it
|
|
257
|
+
// excludes all points within the given absolute distance of the boundary,
|
|
258
|
+
// and returns the largest such rectangle.
|
|
259
|
+
//
|
|
260
|
+
// Unlike Expanded(), this method treats the rectangle as a set of points on
|
|
261
|
+
// the sphere, and measures distances on the sphere. For example, you can
|
|
262
|
+
// use this method to find a rectangle that contains all points within 5km
|
|
263
|
+
// of a given rectangle. Because this method uses the topology of the
|
|
264
|
+
// sphere, note the following:
|
|
265
|
+
//
|
|
266
|
+
// - The full and empty rectangles have no boundary on the sphere. Any
|
|
267
|
+
// expansion (positive or negative) of these rectangles leaves them
|
|
268
|
+
// unchanged.
|
|
269
|
+
//
|
|
270
|
+
// - Any rectangle that covers the full longitude range does not have an
|
|
271
|
+
// east or west boundary, therefore no expansion (positive or negative)
|
|
272
|
+
// will occur in that direction.
|
|
273
|
+
//
|
|
274
|
+
// - Any rectangle that covers the full longitude range and also includes
|
|
275
|
+
// a pole will not be expanded or contracted at that pole, because it
|
|
276
|
+
// does not have a boundary there.
|
|
277
|
+
//
|
|
278
|
+
// - If a rectangle is within the given distance of a pole, the result will
|
|
279
|
+
// include the full longitude range (because all longitudes are present
|
|
280
|
+
// at the poles).
|
|
281
|
+
//
|
|
282
|
+
// Expansion and contraction are defined such that they are inverses whenver
|
|
283
|
+
// possible, i.e.
|
|
284
|
+
//
|
|
285
|
+
// rect.ExpandedByDistance(x).ExpandedByDistance(-x) == rect
|
|
286
|
+
//
|
|
287
|
+
// (approximately), so long as the first operation does not cause a
|
|
288
|
+
// rectangle boundary to disappear (i.e., the longitude range newly becomes
|
|
289
|
+
// full or empty, or the latitude range expands to include a pole).
|
|
290
|
+
S2LatLngRect ExpandedByDistance(S1Angle distance) const;
|
|
291
|
+
|
|
292
|
+
// Returns the minimum distance (measured along the surface of the sphere) to
|
|
293
|
+
// the given S2LatLngRect. Both S2LatLngRects must be non-empty.
|
|
294
|
+
S1Angle GetDistance(const S2LatLngRect& other) const;
|
|
295
|
+
|
|
296
|
+
// Returns the minimum distance (measured along the surface of the sphere)
|
|
297
|
+
// from a given point to the rectangle (both its boundary and its interior).
|
|
298
|
+
// The latlng must be valid.
|
|
299
|
+
S1Angle GetDistance(const S2LatLng& p) const;
|
|
300
|
+
|
|
301
|
+
// Returns the (directed or undirected) Hausdorff distance (measured along the
|
|
302
|
+
// surface of the sphere) to the given S2LatLngRect. The directed Hausdorff
|
|
303
|
+
// distance from rectangle A to rectangle B is given by
|
|
304
|
+
// h(A, B) = max_{p in A} min_{q in B} d(p, q).
|
|
305
|
+
// The Hausdorff distance between rectangle A and rectangle B is given by
|
|
306
|
+
// H(A, B) = max{h(A, B), h(B, A)}.
|
|
307
|
+
S1Angle GetDirectedHausdorffDistance(const S2LatLngRect& other) const;
|
|
308
|
+
S1Angle GetHausdorffDistance(const S2LatLngRect& other) const;
|
|
309
|
+
|
|
310
|
+
// Returns true if two rectangles contains the same set of points.
|
|
311
|
+
bool operator==(const S2LatLngRect& other) const;
|
|
312
|
+
|
|
313
|
+
// Returns the opposite of what operator == returns.
|
|
314
|
+
bool operator!=(const S2LatLngRect& other) const;
|
|
315
|
+
|
|
316
|
+
// Returns true if the latitude and longitude intervals of the two rectangles
|
|
317
|
+
// are the same up to the given tolerance (see r1interval.h and s1interval.h
|
|
318
|
+
// for details).
|
|
319
|
+
bool ApproxEquals(const S2LatLngRect& other,
|
|
320
|
+
S1Angle max_error = S1Angle::Radians(1e-15)) const;
|
|
321
|
+
|
|
322
|
+
// ApproxEquals() with separate tolerances for latitude and longitude.
|
|
323
|
+
bool ApproxEquals(const S2LatLngRect& other, const S2LatLng& max_error) const;
|
|
324
|
+
|
|
325
|
+
////////////////////////////////////////////////////////////////////////
|
|
326
|
+
// S2Region interface (see s2region.h for details):
|
|
327
|
+
|
|
328
|
+
S2LatLngRect* Clone() const override;
|
|
329
|
+
S2Cap GetCapBound() const override;
|
|
330
|
+
S2LatLngRect GetRectBound() const override;
|
|
331
|
+
bool Contains(const S2Cell& cell) const override;
|
|
332
|
+
|
|
333
|
+
// This test is cheap but is NOT exact. Use Intersects() if you want a more
|
|
334
|
+
// accurate and more expensive test. Note that when this method is used by
|
|
335
|
+
// an S2RegionCoverer, the accuracy isn't all that important since if a cell
|
|
336
|
+
// may intersect the region then it is subdivided, and the accuracy of this
|
|
337
|
+
// method goes up as the cells get smaller.
|
|
338
|
+
bool MayIntersect(const S2Cell& cell) const override;
|
|
339
|
+
|
|
340
|
+
// The point 'p' does not need to be normalized.
|
|
341
|
+
bool Contains(const S2Point& p) const override;
|
|
342
|
+
|
|
343
|
+
// Appends a serialized representation of the S2LatLngRect to "encoder".
|
|
344
|
+
//
|
|
345
|
+
// REQUIRES: "encoder" uses the default constructor, so that its buffer
|
|
346
|
+
// can be enlarged as necessary by calling Ensure(int).
|
|
347
|
+
void Encode(Encoder* const encoder) const;
|
|
348
|
+
|
|
349
|
+
// Decodes an S2LatLngRect encoded with Encode(). Returns true on success.
|
|
350
|
+
bool Decode(Decoder* const decoder);
|
|
351
|
+
|
|
352
|
+
// Returns true if the edge AB intersects the given edge of constant
|
|
353
|
+
// longitude.
|
|
354
|
+
static bool IntersectsLngEdge(const S2Point& a, const S2Point& b,
|
|
355
|
+
const R1Interval& lat, double lng);
|
|
356
|
+
|
|
357
|
+
// Returns true if the edge AB intersects the given edge of constant
|
|
358
|
+
// latitude. Requires the vectors to have unit length.
|
|
359
|
+
static bool IntersectsLatEdge(const S2Point& a, const S2Point& b,
|
|
360
|
+
double lat, const S1Interval& lng);
|
|
361
|
+
|
|
362
|
+
private:
|
|
363
|
+
// Helper function. See .cc for description.
|
|
364
|
+
static S1Angle GetDirectedHausdorffDistance(double lng_diff,
|
|
365
|
+
const R1Interval& a_lat,
|
|
366
|
+
const R1Interval& b_lat);
|
|
367
|
+
|
|
368
|
+
// Helper function. See .cc for description.
|
|
369
|
+
static S1Angle GetInteriorMaxDistance(const R1Interval& a_lat,
|
|
370
|
+
const S2Point& b);
|
|
371
|
+
|
|
372
|
+
// Helper function. See .cc for description.
|
|
373
|
+
static S2Point GetBisectorIntersection(const R1Interval& lat, double lng);
|
|
374
|
+
|
|
375
|
+
R1Interval lat_;
|
|
376
|
+
S1Interval lng_;
|
|
377
|
+
};
|
|
378
|
+
|
|
379
|
+
inline S2LatLngRect::S2LatLngRect(const S2LatLng& lo, const S2LatLng& hi)
|
|
380
|
+
: lat_(lo.lat().radians(), hi.lat().radians()),
|
|
381
|
+
lng_(lo.lng().radians(), hi.lng().radians()) {
|
|
382
|
+
S2_DLOG_IF(ERROR, !is_valid())
|
|
383
|
+
<< "Invalid rect: " << lo << ", " << hi;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
inline S2LatLngRect::S2LatLngRect(const R1Interval& lat, const S1Interval& lng)
|
|
387
|
+
: lat_(lat), lng_(lng) {
|
|
388
|
+
S2_DLOG_IF(ERROR, !is_valid())
|
|
389
|
+
<< "Invalid rect: " << lat << ", " << lng;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
inline S2LatLngRect::S2LatLngRect()
|
|
393
|
+
: lat_(R1Interval::Empty()), lng_(S1Interval::Empty()) {
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
inline S2LatLngRect S2LatLngRect::Empty() {
|
|
397
|
+
return S2LatLngRect();
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
inline S2LatLngRect S2LatLngRect::Full() {
|
|
401
|
+
return S2LatLngRect(FullLat(), FullLng());
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
inline bool S2LatLngRect::is_valid() const {
|
|
405
|
+
// The lat/lng ranges must either be both empty or both non-empty.
|
|
406
|
+
return (std::fabs(lat_.lo()) <= M_PI_2 &&
|
|
407
|
+
std::fabs(lat_.hi()) <= M_PI_2 &&
|
|
408
|
+
lng_.is_valid() &&
|
|
409
|
+
lat_.is_empty() == lng_.is_empty());
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
inline bool S2LatLngRect::is_empty() const {
|
|
413
|
+
return lat_.is_empty();
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
inline bool S2LatLngRect::is_full() const {
|
|
417
|
+
return lat_ == FullLat() && lng_.is_full();
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
inline bool S2LatLngRect::is_point() const {
|
|
421
|
+
return lat_.lo() == lat_.hi() && lng_.lo() == lng_.hi();
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
inline bool S2LatLngRect::operator==(const S2LatLngRect& other) const {
|
|
425
|
+
return lat() == other.lat() && lng() == other.lng();
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
inline bool S2LatLngRect::operator!=(const S2LatLngRect& other) const {
|
|
429
|
+
return !operator==(other);
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
std::ostream& operator<<(std::ostream& os, const S2LatLngRect& r);
|
|
433
|
+
|
|
434
|
+
#endif // S2_S2LATLNG_RECT_H_
|