@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,83 @@
|
|
|
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_S2REGION_UNION_H_
|
|
19
|
+
#define S2_S2REGION_UNION_H_
|
|
20
|
+
|
|
21
|
+
#include <memory>
|
|
22
|
+
#include <vector>
|
|
23
|
+
|
|
24
|
+
#include "s2/base/logging.h"
|
|
25
|
+
#include "s2/_fp_contract_off.h"
|
|
26
|
+
#include "s2/s2region.h"
|
|
27
|
+
#include "s2/third_party/absl/base/macros.h"
|
|
28
|
+
|
|
29
|
+
class Decoder;
|
|
30
|
+
class Encoder;
|
|
31
|
+
class S2Cap;
|
|
32
|
+
class S2Cell;
|
|
33
|
+
class S2LatLngRect;
|
|
34
|
+
|
|
35
|
+
// An S2RegionUnion represents a union of possibly overlapping regions.
|
|
36
|
+
// It is convenient for computing a covering of a set of regions.
|
|
37
|
+
class S2RegionUnion final : public S2Region {
|
|
38
|
+
public:
|
|
39
|
+
// Create an empty region. Can be made non-empty by calling Init() or Add().
|
|
40
|
+
S2RegionUnion() = default;
|
|
41
|
+
|
|
42
|
+
// Create a region representing the union of the given regions.
|
|
43
|
+
explicit S2RegionUnion(std::vector<std::unique_ptr<S2Region>> regions);
|
|
44
|
+
|
|
45
|
+
// Use {} instead of = default to work around gcc bug.
|
|
46
|
+
~S2RegionUnion() override {}
|
|
47
|
+
|
|
48
|
+
// Initialize region by taking ownership of the given regions.
|
|
49
|
+
void Init(std::vector<std::unique_ptr<S2Region>> regions);
|
|
50
|
+
|
|
51
|
+
// Releases ownership of the regions of this union and returns them,
|
|
52
|
+
// leaving this region empty.
|
|
53
|
+
std::vector<std::unique_ptr<S2Region>> Release();
|
|
54
|
+
|
|
55
|
+
// Add the given region to the union. This method can be called repeatedly
|
|
56
|
+
// as an alternative to Init().
|
|
57
|
+
void Add(std::unique_ptr<S2Region> region);
|
|
58
|
+
|
|
59
|
+
// Accessor methods.
|
|
60
|
+
int num_regions() const { return regions_.size(); }
|
|
61
|
+
const S2Region* region(int i) const { return regions_[i].get(); }
|
|
62
|
+
|
|
63
|
+
////////////////////////////////////////////////////////////////////////
|
|
64
|
+
// S2Region interface (see s2region.h for details):
|
|
65
|
+
|
|
66
|
+
S2RegionUnion* Clone() const override;
|
|
67
|
+
S2Cap GetCapBound() const override;
|
|
68
|
+
S2LatLngRect GetRectBound() const override;
|
|
69
|
+
bool Contains(const S2Point& p) const override;
|
|
70
|
+
bool Contains(const S2Cell& cell) const override;
|
|
71
|
+
bool MayIntersect(const S2Cell& cell) const override;
|
|
72
|
+
|
|
73
|
+
private:
|
|
74
|
+
// Internal copy constructor used only by Clone() that makes a deep copy of
|
|
75
|
+
// its argument.
|
|
76
|
+
S2RegionUnion(const S2RegionUnion& src);
|
|
77
|
+
|
|
78
|
+
std::vector<std::unique_ptr<S2Region>> regions_;
|
|
79
|
+
|
|
80
|
+
void operator=(const S2RegionUnion&) = delete;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
#endif // S2_S2REGION_UNION_H_
|
|
@@ -0,0 +1,89 @@
|
|
|
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
|
+
#include "s2/s2region_union.h"
|
|
19
|
+
|
|
20
|
+
#include <memory>
|
|
21
|
+
#include <vector>
|
|
22
|
+
|
|
23
|
+
#include <gtest/gtest.h>
|
|
24
|
+
#include "s2/third_party/absl/memory/memory.h"
|
|
25
|
+
#include "s2/s2cap.h"
|
|
26
|
+
#include "s2/s2cell.h"
|
|
27
|
+
#include "s2/s2cell_id.h"
|
|
28
|
+
#include "s2/s2latlng.h"
|
|
29
|
+
#include "s2/s2latlng_rect.h"
|
|
30
|
+
#include "s2/s2point_region.h"
|
|
31
|
+
#include "s2/s2region_coverer.h"
|
|
32
|
+
#include "s2/s2text_format.h"
|
|
33
|
+
|
|
34
|
+
using absl::make_unique;
|
|
35
|
+
using std::unique_ptr;
|
|
36
|
+
using std::vector;
|
|
37
|
+
|
|
38
|
+
namespace {
|
|
39
|
+
|
|
40
|
+
TEST(S2RegionUnionTest, Basic) {
|
|
41
|
+
S2RegionUnion ru_empty((vector<unique_ptr<S2Region>>()));
|
|
42
|
+
EXPECT_EQ(0, ru_empty.num_regions());
|
|
43
|
+
EXPECT_EQ(S2Cap::Empty(), ru_empty.GetCapBound());
|
|
44
|
+
EXPECT_EQ(S2LatLngRect::Empty(), ru_empty.GetRectBound());
|
|
45
|
+
unique_ptr<S2Region> empty_clone(ru_empty.Clone());
|
|
46
|
+
|
|
47
|
+
vector<unique_ptr<S2Region>> two_point_region;
|
|
48
|
+
two_point_region.emplace_back(
|
|
49
|
+
new S2PointRegion(S2LatLng::FromDegrees(35, 40).ToPoint()));
|
|
50
|
+
two_point_region.emplace_back(
|
|
51
|
+
new S2PointRegion(S2LatLng::FromDegrees(-35, -40).ToPoint()));
|
|
52
|
+
|
|
53
|
+
auto two_points_orig =
|
|
54
|
+
make_unique<S2RegionUnion>(std::move(two_point_region));
|
|
55
|
+
// two_point_region is in a valid, but unspecified, state.
|
|
56
|
+
|
|
57
|
+
// Check that Clone() returns a deep copy.
|
|
58
|
+
unique_ptr<S2RegionUnion> two_points(two_points_orig->Clone());
|
|
59
|
+
two_points_orig.reset();
|
|
60
|
+
// The bounds below may not be exactly equal because the S2PointRegion
|
|
61
|
+
// version converts each S2LatLng value to an S2Point and back.
|
|
62
|
+
EXPECT_TRUE(s2textformat::MakeLatLngRect("-35:-40,35:40").ApproxEquals(
|
|
63
|
+
two_points->GetRectBound()))
|
|
64
|
+
<< two_points->GetRectBound();
|
|
65
|
+
|
|
66
|
+
S2Cell face0 = S2Cell::FromFace(0);
|
|
67
|
+
EXPECT_TRUE(two_points->MayIntersect(face0));
|
|
68
|
+
EXPECT_FALSE(two_points->Contains(face0));
|
|
69
|
+
|
|
70
|
+
EXPECT_TRUE(two_points->Contains(S2LatLng::FromDegrees(35, 40).ToPoint()));
|
|
71
|
+
EXPECT_TRUE(two_points->Contains(S2LatLng::FromDegrees(-35, -40).ToPoint()));
|
|
72
|
+
EXPECT_FALSE(two_points->Contains(S2LatLng::FromDegrees(0, 0).ToPoint()));
|
|
73
|
+
|
|
74
|
+
// Check that we can Add() another region.
|
|
75
|
+
unique_ptr<S2RegionUnion> three_points(two_points->Clone());
|
|
76
|
+
EXPECT_FALSE(three_points->Contains(S2LatLng::FromDegrees(10, 10).ToPoint()));
|
|
77
|
+
three_points->Add(
|
|
78
|
+
make_unique<S2PointRegion>(S2LatLng::FromDegrees(10, 10).ToPoint()));
|
|
79
|
+
EXPECT_TRUE(three_points->Contains(S2LatLng::FromDegrees(10, 10).ToPoint()));
|
|
80
|
+
|
|
81
|
+
S2RegionCoverer coverer;
|
|
82
|
+
coverer.mutable_options()->set_max_cells(1);
|
|
83
|
+
vector<S2CellId> covering;
|
|
84
|
+
coverer.GetCovering(*two_points, &covering);
|
|
85
|
+
EXPECT_EQ(1, covering.size());
|
|
86
|
+
EXPECT_EQ(face0.id(), covering[0]);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
} // namespace
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
// Copyright 2012 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_S2SHAPE_H_
|
|
19
|
+
#define S2_S2SHAPE_H_
|
|
20
|
+
|
|
21
|
+
#include "s2/base/integral_types.h"
|
|
22
|
+
#include "s2/s2point.h"
|
|
23
|
+
#include "s2/s2pointutil.h"
|
|
24
|
+
|
|
25
|
+
// The purpose of S2Shape is to represent polygonal geometry in a flexible
|
|
26
|
+
// way. It is organized as a collection of edges that optionally defines an
|
|
27
|
+
// interior. All geometry represented by an S2Shape must have the same
|
|
28
|
+
// dimension, which means that an S2Shape can represent either a set of
|
|
29
|
+
// points, a set of polylines, or a set of polygons.
|
|
30
|
+
//
|
|
31
|
+
// S2Shape is defined as an abstract base class in order to give clients
|
|
32
|
+
// control over the underlying data representation. Sometimes an S2Shape does
|
|
33
|
+
// not have any data of its own, but instead "wraps" some other class. There
|
|
34
|
+
// are various useful subtypes defined in *_shape.h, and some S2 classes also
|
|
35
|
+
// have a nested "Shape" class (e.g., S2Polygon::Shape). It is easy for
|
|
36
|
+
// clients to implement their own subtypes, since the interface is minimal.
|
|
37
|
+
//
|
|
38
|
+
// S2Shape operations are typically defined on S2ShapeIndex objects rather
|
|
39
|
+
// than individual shapes. An S2ShapeIndex is simply a collection of
|
|
40
|
+
// S2Shapes, possibly of different dimensions (e.g. 10 points and 3 polygons),
|
|
41
|
+
// organized into a data structure for efficient edge access.
|
|
42
|
+
//
|
|
43
|
+
// The edges of an S2Shape are identified by a contiguous range of "edge ids"
|
|
44
|
+
// starting at 0. The edges are further subdivided into "chains", where each
|
|
45
|
+
// chain consists of a sequence of edges connected end-to-end (a polyline).
|
|
46
|
+
// For example, an S2Shape representing two polylines AB and CDE would have
|
|
47
|
+
// three edges (AB, CD, DE) grouped into two chains: (AB) and (CD, DE).
|
|
48
|
+
// Similarly, an S2Shape representing 5 points would have 5 chains consisting
|
|
49
|
+
// of one edge each.
|
|
50
|
+
//
|
|
51
|
+
// S2Shape has methods that allow edges to be accessed either using the global
|
|
52
|
+
// numbering (edge id) or within a particular chain. The global numbering is
|
|
53
|
+
// sufficient for most purposes, but the chain representation is useful for
|
|
54
|
+
// certain algorithms such as intersection (see S2BooleanOperation).
|
|
55
|
+
class S2Shape {
|
|
56
|
+
public:
|
|
57
|
+
// An edge, consisting of two vertices "v0" and "v1". Zero-length edges are
|
|
58
|
+
// allowed, and can be used to represent points.
|
|
59
|
+
struct Edge {
|
|
60
|
+
S2Point v0, v1;
|
|
61
|
+
Edge() = default;
|
|
62
|
+
Edge(const S2Point& _v0, const S2Point& _v1) : v0(_v0), v1(_v1) {}
|
|
63
|
+
|
|
64
|
+
// TODO(ericv): Define all 6 comparisons.
|
|
65
|
+
friend bool operator==(const Edge& x, const Edge& y) {
|
|
66
|
+
return x.v0 == y.v0 && x.v1 == y.v1;
|
|
67
|
+
}
|
|
68
|
+
friend bool operator<(const Edge& x, const Edge& y) {
|
|
69
|
+
return x.v0 < y.v0 || (x.v0 == y.v0 && x.v1 < y.v1); }
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
// A range of edge ids corresponding to a chain of zero or more connected
|
|
73
|
+
// edges, specified as a (start, length) pair. The chain is defined to
|
|
74
|
+
// consist of edge ids {start, start + 1, ..., start + length - 1}.
|
|
75
|
+
struct Chain {
|
|
76
|
+
int32 start, length;
|
|
77
|
+
Chain() = default;
|
|
78
|
+
Chain(int32 _start, int32 _length) : start(_start), length(_length) {}
|
|
79
|
+
|
|
80
|
+
friend bool operator==(const Chain& x, const Chain& y) {
|
|
81
|
+
return x.start == y.start && x.length == y.length;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
// The position of an edge within a given edge chain, specified as a
|
|
86
|
+
// (chain_id, offset) pair. Chains are numbered sequentially starting from
|
|
87
|
+
// zero, and offsets are measured from the start of each chain.
|
|
88
|
+
struct ChainPosition {
|
|
89
|
+
int32 chain_id, offset;
|
|
90
|
+
ChainPosition() = default;
|
|
91
|
+
ChainPosition(int32 _chain_id, int32 _offset)
|
|
92
|
+
: chain_id(_chain_id), offset(_offset) {}
|
|
93
|
+
|
|
94
|
+
friend bool operator==(const ChainPosition& x, const ChainPosition& y) {
|
|
95
|
+
return x.chain_id == y.chain_id && x.offset == y.offset;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
// A ReferencePoint consists of a point P and a boolean indicating whether P
|
|
100
|
+
// is contained by a particular shape.
|
|
101
|
+
struct ReferencePoint {
|
|
102
|
+
S2Point point;
|
|
103
|
+
bool contained;
|
|
104
|
+
ReferencePoint() = default;
|
|
105
|
+
ReferencePoint(S2Point _point, bool _contained)
|
|
106
|
+
: point(_point), contained(_contained) {}
|
|
107
|
+
|
|
108
|
+
// Returns a ReferencePoint with the given "contained" value and a default
|
|
109
|
+
// "point". It should be used when all points or no points are contained.
|
|
110
|
+
static ReferencePoint Contained(bool _contained) {
|
|
111
|
+
return ReferencePoint(S2::Origin(), _contained);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
friend bool operator==(const ReferencePoint& x, const ReferencePoint& y) {
|
|
115
|
+
return x.point == y.point && x.contained == y.contained;
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
// A 32-bit tag that can be used to identify the type of an encoded S2Shape.
|
|
120
|
+
// All encodable types have a non-zero type tag. The tag associated with a
|
|
121
|
+
// given shape type can be accessed as Shape::kTypeTag, while the tag
|
|
122
|
+
// associated with a given object can be accessed as shape.type_tag().
|
|
123
|
+
//
|
|
124
|
+
// Type tags in the range 0..8191 are reserved for use by the S2 library.
|
|
125
|
+
using TypeTag = uint32;
|
|
126
|
+
|
|
127
|
+
// Indicates that a given S2Shape type cannot be encoded.
|
|
128
|
+
static constexpr TypeTag kNoTypeTag = 0;
|
|
129
|
+
|
|
130
|
+
// The minimum allowable tag for user-defined S2Shape types.
|
|
131
|
+
static constexpr TypeTag kMinUserTypeTag = 8192;
|
|
132
|
+
|
|
133
|
+
S2Shape() : id_(-1) {}
|
|
134
|
+
virtual ~S2Shape() {}
|
|
135
|
+
|
|
136
|
+
// Returns the number of edges in this shape. Edges have ids ranging from 0
|
|
137
|
+
// to num_edges() - 1.
|
|
138
|
+
virtual int num_edges() const = 0;
|
|
139
|
+
|
|
140
|
+
// Returns the endpoints of the given edge id.
|
|
141
|
+
//
|
|
142
|
+
// REQUIRES: 0 <= id < num_edges()
|
|
143
|
+
virtual Edge edge(int edge_id) const = 0;
|
|
144
|
+
|
|
145
|
+
// Returns the dimension of the geometry represented by this shape.
|
|
146
|
+
//
|
|
147
|
+
// 0 - Point geometry. Each point is represented as a degenerate edge.
|
|
148
|
+
//
|
|
149
|
+
// 1 - Polyline geometry. Polyline edges may be degenerate. A shape may
|
|
150
|
+
// represent any number of polylines. Polylines edges may intersect.
|
|
151
|
+
//
|
|
152
|
+
// 2 - Polygon geometry. Edges should be oriented such that the polygon
|
|
153
|
+
// interior is always on the left. In theory the edges may be returned
|
|
154
|
+
// in any order, but typically the edges are organized as a collection
|
|
155
|
+
// of edge chains where each chain represents one polygon loop.
|
|
156
|
+
// Polygons may have degeneracies (e.g., degenerate edges or sibling
|
|
157
|
+
// pairs consisting of an edge and its corresponding reversed edge).
|
|
158
|
+
// A polygon loop may also be full (containing all points on the
|
|
159
|
+
// sphere); by convention this is represented as a chain with no edges.
|
|
160
|
+
// (See S2LaxPolygonShape for details.)
|
|
161
|
+
//
|
|
162
|
+
// Note that this method allows degenerate geometry of different dimensions
|
|
163
|
+
// to be distinguished, e.g. it allows a point to be distinguished from a
|
|
164
|
+
// polyline or polygon that has been simplified to a single point.
|
|
165
|
+
virtual int dimension() const = 0;
|
|
166
|
+
|
|
167
|
+
// Returns true if the shape contains no points. (Note that the full
|
|
168
|
+
// polygon is represented as a chain with zero edges.)
|
|
169
|
+
bool is_empty() const {
|
|
170
|
+
return num_edges() == 0 && (dimension() < 2 || num_chains() == 0);
|
|
171
|
+
}
|
|
172
|
+
// Returns true if the shape contains all points on the sphere.
|
|
173
|
+
bool is_full() const {
|
|
174
|
+
return num_edges() == 0 && dimension() == 2 && num_chains() > 0;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Returns an arbitrary point P along with a boolean indicating whether P is
|
|
178
|
+
// contained by the shape. (The boolean value must be false for shapes that
|
|
179
|
+
// do not have an interior.)
|
|
180
|
+
//
|
|
181
|
+
// This ReferencePoint may then be used to compute the containment of other
|
|
182
|
+
// points by counting edge crossings.
|
|
183
|
+
virtual ReferencePoint GetReferencePoint() const = 0;
|
|
184
|
+
|
|
185
|
+
// Returns the number of contiguous edge chains in the shape. For example,
|
|
186
|
+
// a shape whose edges are [AB, BC, CD, AE, EF] would consist of two chains
|
|
187
|
+
// (AB,BC,CD and AE,EF). Every chain is assigned a "chain id" numbered
|
|
188
|
+
// sequentially starting from zero.
|
|
189
|
+
//
|
|
190
|
+
// Note that it is always acceptable to implement this method by returning
|
|
191
|
+
// num_edges() (i.e. every chain consists of a single edge), but this may
|
|
192
|
+
// reduce the efficiency of some algorithms.
|
|
193
|
+
virtual int num_chains() const = 0;
|
|
194
|
+
|
|
195
|
+
// Returns the range of edge ids corresponding to the given edge chain. The
|
|
196
|
+
// edge chains must form contiguous, non-overlapping ranges that cover the
|
|
197
|
+
// entire range of edge ids. This is spelled out more formally below:
|
|
198
|
+
//
|
|
199
|
+
// REQUIRES: 0 <= i < num_chains()
|
|
200
|
+
// REQUIRES: chain(i).length >= 0, for all i
|
|
201
|
+
// REQUIRES: chain(0).start == 0
|
|
202
|
+
// REQUIRES: chain(i).start + chain(i).length == chain(i+1).start,
|
|
203
|
+
// for i < num_chains() - 1
|
|
204
|
+
// REQUIRES: chain(i).start + chain(i).length == num_edges(),
|
|
205
|
+
// for i == num_chains() - 1
|
|
206
|
+
virtual Chain chain(int chain_id) const = 0;
|
|
207
|
+
|
|
208
|
+
// Returns the edge at offset "offset" within edge chain "chain_id".
|
|
209
|
+
// Equivalent to "shape.edge(shape.chain(chain_id).start + offset)"
|
|
210
|
+
// but may be more efficient.
|
|
211
|
+
virtual Edge chain_edge(int chain_id, int offset) const = 0;
|
|
212
|
+
|
|
213
|
+
// Finds the chain containing the given edge, and returns the position of
|
|
214
|
+
// that edge as a (chain_id, offset) pair.
|
|
215
|
+
//
|
|
216
|
+
// REQUIRES: shape.chain(pos.chain_id).start + pos.offset == edge_id
|
|
217
|
+
// REQUIRES: shape.chain(pos.chain_id + 1).start > edge_id
|
|
218
|
+
//
|
|
219
|
+
// where pos == shape.chain_position(edge_id).
|
|
220
|
+
virtual ChainPosition chain_position(int edge_id) const = 0;
|
|
221
|
+
|
|
222
|
+
// A unique id assigned to this shape by S2ShapeIndex. Shape ids are
|
|
223
|
+
// assigned sequentially starting from 0 in the order shapes are added.
|
|
224
|
+
//
|
|
225
|
+
// TODO(ericv): Consider eliminating this method.
|
|
226
|
+
int id() const { return id_; }
|
|
227
|
+
|
|
228
|
+
// Returns an integer that can be used to identify the type of an encoded
|
|
229
|
+
// S2Shape (see TypeTag above).
|
|
230
|
+
virtual TypeTag type_tag() const { return kNoTypeTag; }
|
|
231
|
+
|
|
232
|
+
// Virtual methods that return pointers of your choice. These methods are
|
|
233
|
+
// intended to help with the problem of attaching additional data to S2Shape
|
|
234
|
+
// objects. For example, you could return a pointer to a source object, or
|
|
235
|
+
// a pointer to a bundle of additional data allocated with the S2Shape.
|
|
236
|
+
// Because this method exists in all S2Shapes, you can override it in each
|
|
237
|
+
// type of shape you have and call it without knowing the concrete subtype.
|
|
238
|
+
// For example, if you have polyline and polygon shapes, you can do this:
|
|
239
|
+
//
|
|
240
|
+
// class MyPolyline : public S2Polyline::Shape {
|
|
241
|
+
// public:
|
|
242
|
+
// virtual void* mutable_user_data() { return &my_data_; }
|
|
243
|
+
// private:
|
|
244
|
+
// MyData my_data_;
|
|
245
|
+
// };
|
|
246
|
+
// class MyPolygon : public S2Polygon::Shape {
|
|
247
|
+
// public:
|
|
248
|
+
// virtual void* mutable_user_data() { return &my_data_; }
|
|
249
|
+
// private:
|
|
250
|
+
// MyData my_data_;
|
|
251
|
+
// };
|
|
252
|
+
// ...
|
|
253
|
+
// S2Shape* shape = index.shape(id);
|
|
254
|
+
// const MyData* data = static_cast<const MyData*>(shape->user_data());
|
|
255
|
+
//
|
|
256
|
+
// This is not the only way to map from an S2Shape back to your source
|
|
257
|
+
// data. Other reasonable techniques include:
|
|
258
|
+
//
|
|
259
|
+
// - Every shape has an id() assigned by S2ShapeIndex. Ids are assigned
|
|
260
|
+
// sequentially starting from 0 in the order the shapes are added to the
|
|
261
|
+
// index. You can use this id to look up arbitrary data stored in your
|
|
262
|
+
// own vector.
|
|
263
|
+
//
|
|
264
|
+
// - If all of your shapes are the same type, then you can create your own
|
|
265
|
+
// subclass of some existing S2Shape type (such as S2Polyline::Shape) and
|
|
266
|
+
// add your own methods and fields. You can access this data by
|
|
267
|
+
// downcasting the S2Shape pointers returned by S2ShapeIndex methods.
|
|
268
|
+
virtual const void* user_data() const { return nullptr; }
|
|
269
|
+
virtual void* mutable_user_data() { return nullptr; }
|
|
270
|
+
|
|
271
|
+
private:
|
|
272
|
+
// Next available type tag available for use within the S2 library: 6.
|
|
273
|
+
|
|
274
|
+
friend class EncodedS2ShapeIndex;
|
|
275
|
+
friend class MutableS2ShapeIndex;
|
|
276
|
+
|
|
277
|
+
int id_; // Assigned by S2ShapeIndex when the shape is added.
|
|
278
|
+
|
|
279
|
+
S2Shape(const S2Shape&) = delete;
|
|
280
|
+
void operator=(const S2Shape&) = delete;
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
#endif // S2_S2SHAPE_H_
|