@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,379 @@
|
|
|
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_S2POLYLINE_H_
|
|
19
|
+
#define S2_S2POLYLINE_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/s1angle.h"
|
|
27
|
+
#include "s2/s2debug.h"
|
|
28
|
+
#include "s2/s2error.h"
|
|
29
|
+
#include "s2/s2latlng_rect.h"
|
|
30
|
+
#include "s2/s2region.h"
|
|
31
|
+
#include "s2/s2shape.h"
|
|
32
|
+
#include "s2/third_party/absl/base/macros.h"
|
|
33
|
+
#include "s2/third_party/absl/memory/memory.h"
|
|
34
|
+
|
|
35
|
+
class Decoder;
|
|
36
|
+
class Encoder;
|
|
37
|
+
class S1Angle;
|
|
38
|
+
class S2Cap;
|
|
39
|
+
class S2Cell;
|
|
40
|
+
class S2LatLng;
|
|
41
|
+
|
|
42
|
+
// An S2Polyline represents a sequence of zero or more vertices connected by
|
|
43
|
+
// straight edges (geodesics). Edges of length 0 and 180 degrees are not
|
|
44
|
+
// allowed, i.e. adjacent vertices should not be identical or antipodal.
|
|
45
|
+
class S2Polyline final : public S2Region {
|
|
46
|
+
public:
|
|
47
|
+
// Creates an empty S2Polyline that should be initialized by calling Init()
|
|
48
|
+
// or Decode().
|
|
49
|
+
S2Polyline();
|
|
50
|
+
|
|
51
|
+
#ifndef SWIG
|
|
52
|
+
// S2Polyline is movable, but only privately copyable.
|
|
53
|
+
S2Polyline(S2Polyline&&);
|
|
54
|
+
S2Polyline& operator=(S2Polyline&&);
|
|
55
|
+
#endif // SWIG
|
|
56
|
+
|
|
57
|
+
// Convenience constructors that call Init() with the given vertices.
|
|
58
|
+
explicit S2Polyline(const std::vector<S2Point>& vertices);
|
|
59
|
+
explicit S2Polyline(const std::vector<S2LatLng>& vertices);
|
|
60
|
+
|
|
61
|
+
// Convenience constructors to disable the automatic validity checking
|
|
62
|
+
// controlled by the --s2debug flag. Example:
|
|
63
|
+
//
|
|
64
|
+
// S2Polyline* line = new S2Polyline(vertices, S2Debug::DISABLE);
|
|
65
|
+
//
|
|
66
|
+
// This is equivalent to:
|
|
67
|
+
//
|
|
68
|
+
// S2Polyline* line = new S2Polyline;
|
|
69
|
+
// line->set_s2debug_override(S2Debug::DISABLE);
|
|
70
|
+
// line->Init(vertices);
|
|
71
|
+
//
|
|
72
|
+
// The main reason to use this constructors is if you intend to call
|
|
73
|
+
// IsValid() explicitly. See set_s2debug_override() for details.
|
|
74
|
+
S2Polyline(const std::vector<S2Point>& vertices, S2Debug override);
|
|
75
|
+
S2Polyline(const std::vector<S2LatLng>& vertices, S2Debug override);
|
|
76
|
+
|
|
77
|
+
// Initialize a polyline that connects the given vertices. Empty polylines are
|
|
78
|
+
// allowed. Adjacent vertices should not be identical or antipodal. All
|
|
79
|
+
// vertices should be unit length.
|
|
80
|
+
void Init(const std::vector<S2Point>& vertices);
|
|
81
|
+
|
|
82
|
+
// Convenience initialization function that accepts latitude-longitude
|
|
83
|
+
// coordinates rather than S2Points.
|
|
84
|
+
void Init(const std::vector<S2LatLng>& vertices);
|
|
85
|
+
|
|
86
|
+
~S2Polyline() override;
|
|
87
|
+
|
|
88
|
+
// Allows overriding the automatic validity checks controlled by the
|
|
89
|
+
// --s2debug flag. If this flag is true, then polylines are automatically
|
|
90
|
+
// checked for validity as they are initialized. The main reason to disable
|
|
91
|
+
// this flag is if you intend to call IsValid() explicitly, like this:
|
|
92
|
+
//
|
|
93
|
+
// S2Polyline line;
|
|
94
|
+
// line.set_s2debug_override(S2Debug::DISABLE);
|
|
95
|
+
// line.Init(...);
|
|
96
|
+
// if (!line.IsValid()) { ... }
|
|
97
|
+
//
|
|
98
|
+
// Without the call to set_s2debug_override(), invalid data would cause a
|
|
99
|
+
// fatal error in Init() whenever the --s2debug flag is enabled.
|
|
100
|
+
void set_s2debug_override(S2Debug override);
|
|
101
|
+
S2Debug s2debug_override() const;
|
|
102
|
+
|
|
103
|
+
// Return true if the given vertices form a valid polyline.
|
|
104
|
+
bool IsValid() const;
|
|
105
|
+
|
|
106
|
+
// Returns true if this is *not* a valid polyline and sets "error"
|
|
107
|
+
// appropriately. Otherwise returns false and leaves "error" unchanged.
|
|
108
|
+
//
|
|
109
|
+
// REQUIRES: error != nullptr
|
|
110
|
+
bool FindValidationError(S2Error* error) const;
|
|
111
|
+
|
|
112
|
+
int num_vertices() const { return num_vertices_; }
|
|
113
|
+
const S2Point& vertex(int k) const {
|
|
114
|
+
S2_DCHECK_GE(k, 0);
|
|
115
|
+
S2_DCHECK_LT(k, num_vertices_);
|
|
116
|
+
return vertices_[k];
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Return the length of the polyline.
|
|
120
|
+
S1Angle GetLength() const;
|
|
121
|
+
|
|
122
|
+
// Return the true centroid of the polyline multiplied by the length of the
|
|
123
|
+
// polyline (see s2centroids.h for details on centroids). The result is not
|
|
124
|
+
// unit length, so you may want to normalize it.
|
|
125
|
+
//
|
|
126
|
+
// Prescaling by the polyline length makes it easy to compute the centroid
|
|
127
|
+
// of several polylines (by simply adding up their centroids).
|
|
128
|
+
S2Point GetCentroid() const;
|
|
129
|
+
|
|
130
|
+
// Return the point whose distance from vertex 0 along the polyline is the
|
|
131
|
+
// given fraction of the polyline's total length. Fractions less than zero
|
|
132
|
+
// or greater than one are clamped. The return value is unit length. This
|
|
133
|
+
// cost of this function is currently linear in the number of vertices.
|
|
134
|
+
// The polyline must not be empty.
|
|
135
|
+
S2Point Interpolate(double fraction) const;
|
|
136
|
+
|
|
137
|
+
// Like Interpolate(), but also return the index of the next polyline
|
|
138
|
+
// vertex after the interpolated point P. This allows the caller to easily
|
|
139
|
+
// construct a given suffix of the polyline by concatenating P with the
|
|
140
|
+
// polyline vertices starting at "next_vertex". Note that P is guaranteed
|
|
141
|
+
// to be different than vertex(*next_vertex), so this will never result in
|
|
142
|
+
// a duplicate vertex.
|
|
143
|
+
//
|
|
144
|
+
// The polyline must not be empty. Note that if "fraction" >= 1.0, then
|
|
145
|
+
// "next_vertex" will be set to num_vertices() (indicating that no vertices
|
|
146
|
+
// from the polyline need to be appended). The value of "next_vertex" is
|
|
147
|
+
// always between 1 and num_vertices().
|
|
148
|
+
//
|
|
149
|
+
// This method can also be used to construct a prefix of the polyline, by
|
|
150
|
+
// taking the polyline vertices up to "next_vertex - 1" and appending the
|
|
151
|
+
// returned point P if it is different from the last vertex (since in this
|
|
152
|
+
// case there is no guarantee of distinctness).
|
|
153
|
+
S2Point GetSuffix(double fraction, int* next_vertex) const;
|
|
154
|
+
|
|
155
|
+
// The inverse operation of GetSuffix/Interpolate. Given a point on the
|
|
156
|
+
// polyline, returns the ratio of the distance to the point from the
|
|
157
|
+
// beginning of the polyline over the length of the polyline. The return
|
|
158
|
+
// value is always betwen 0 and 1 inclusive. See GetSuffix() for the
|
|
159
|
+
// meaning of "next_vertex".
|
|
160
|
+
//
|
|
161
|
+
// The polyline should not be empty. If it has fewer than 2 vertices, the
|
|
162
|
+
// return value is zero.
|
|
163
|
+
double UnInterpolate(const S2Point& point, int next_vertex) const;
|
|
164
|
+
|
|
165
|
+
// Given a point, returns a point on the polyline that is closest to the given
|
|
166
|
+
// point. See GetSuffix() for the meaning of "next_vertex", which is chosen
|
|
167
|
+
// here w.r.t. the projected point as opposed to the interpolated point in
|
|
168
|
+
// GetSuffix().
|
|
169
|
+
//
|
|
170
|
+
// The polyline must be non-empty.
|
|
171
|
+
S2Point Project(const S2Point& point, int* next_vertex) const;
|
|
172
|
+
|
|
173
|
+
// Returns true if the point given is on the right hand side of the polyline,
|
|
174
|
+
// using a naive definition of "right-hand-sideness" where the point is on
|
|
175
|
+
// the RHS of the polyline iff the point is on the RHS of the line segment in
|
|
176
|
+
// the polyline which it is closest to.
|
|
177
|
+
//
|
|
178
|
+
// The polyline must have at least 2 vertices.
|
|
179
|
+
bool IsOnRight(const S2Point& point) const;
|
|
180
|
+
|
|
181
|
+
// Return true if this polyline intersects the given polyline. If the
|
|
182
|
+
// polylines share a vertex they are considered to be intersecting. When a
|
|
183
|
+
// polyline endpoint is the only intersection with the other polyline, the
|
|
184
|
+
// function may return true or false arbitrarily.
|
|
185
|
+
//
|
|
186
|
+
// The running time is quadratic in the number of vertices. (To intersect
|
|
187
|
+
// polylines more efficiently, or compute the actual intersection geometry,
|
|
188
|
+
// use S2BooleanOperation.)
|
|
189
|
+
bool Intersects(const S2Polyline* line) const;
|
|
190
|
+
|
|
191
|
+
// Reverse the order of the polyline vertices.
|
|
192
|
+
void Reverse();
|
|
193
|
+
|
|
194
|
+
// Return a subsequence of vertex indices such that the polyline connecting
|
|
195
|
+
// these vertices is never further than "tolerance" from the original
|
|
196
|
+
// polyline. Provided the first and last vertices are distinct, they are
|
|
197
|
+
// always preserved; if they are not, the subsequence may contain only a
|
|
198
|
+
// single index.
|
|
199
|
+
//
|
|
200
|
+
// Some useful properties of the algorithm:
|
|
201
|
+
//
|
|
202
|
+
// - It runs in linear time.
|
|
203
|
+
//
|
|
204
|
+
// - The output is always a valid polyline. In particular, adjacent
|
|
205
|
+
// output vertices are never identical or antipodal.
|
|
206
|
+
//
|
|
207
|
+
// - The method is not optimal, but it tends to produce 2-3% fewer
|
|
208
|
+
// vertices than the Douglas-Peucker algorithm with the same tolerance.
|
|
209
|
+
//
|
|
210
|
+
// - The output is *parametrically* equivalent to the original polyline to
|
|
211
|
+
// within the given tolerance. For example, if a polyline backtracks on
|
|
212
|
+
// itself and then proceeds onwards, the backtracking will be preserved
|
|
213
|
+
// (to within the given tolerance). This is different than the
|
|
214
|
+
// Douglas-Peucker algorithm, which only guarantees geometric equivalence.
|
|
215
|
+
//
|
|
216
|
+
// See also S2PolylineSimplifier, which uses the same algorithm but is more
|
|
217
|
+
// efficient and supports more features, and also S2Builder, which can
|
|
218
|
+
// simplify polylines and polygons, supports snapping (e.g. to E7 lat/lng
|
|
219
|
+
// coordinates or S2CellId centers), and can split polylines at intersection
|
|
220
|
+
// points.
|
|
221
|
+
void SubsampleVertices(S1Angle tolerance, std::vector<int>* indices) const;
|
|
222
|
+
|
|
223
|
+
// Return true if two polylines are exactly the same.
|
|
224
|
+
bool Equals(const S2Polyline* b) const;
|
|
225
|
+
|
|
226
|
+
// Return true if two polylines have the same number of vertices, and
|
|
227
|
+
// corresponding vertex pairs are separated by no more than "max_error".
|
|
228
|
+
// (For testing purposes.)
|
|
229
|
+
bool ApproxEquals(const S2Polyline& b,
|
|
230
|
+
S1Angle max_error = S1Angle::Radians(1e-15)) const;
|
|
231
|
+
|
|
232
|
+
// Return true if "covered" is within "max_error" of a contiguous subpath of
|
|
233
|
+
// this polyline over its entire length. Specifically, this method returns
|
|
234
|
+
// true if this polyline has parameterization a:[0,1] -> S^2, "covered" has
|
|
235
|
+
// parameterization b:[0,1] -> S^2, and there is a non-decreasing function
|
|
236
|
+
// f:[0,1] -> [0,1] such that distance(a(f(t)), b(t)) <= max_error for all t.
|
|
237
|
+
//
|
|
238
|
+
// You can think of this as testing whether it is possible to drive a car
|
|
239
|
+
// along "covered" and a car along some subpath of this polyline such that no
|
|
240
|
+
// car ever goes backward, and the cars are always within "max_error" of each
|
|
241
|
+
// other.
|
|
242
|
+
//
|
|
243
|
+
// This function is well-defined for empty polylines:
|
|
244
|
+
// anything.covers(empty) = true
|
|
245
|
+
// empty.covers(nonempty) = false
|
|
246
|
+
bool NearlyCovers(const S2Polyline& covered, S1Angle max_error) const;
|
|
247
|
+
|
|
248
|
+
// Returns the total number of bytes used by the polyline.
|
|
249
|
+
size_t SpaceUsed() const;
|
|
250
|
+
|
|
251
|
+
////////////////////////////////////////////////////////////////////////
|
|
252
|
+
// S2Region interface (see s2region.h for details):
|
|
253
|
+
|
|
254
|
+
S2Polyline* Clone() const override;
|
|
255
|
+
S2Cap GetCapBound() const override;
|
|
256
|
+
S2LatLngRect GetRectBound() const override;
|
|
257
|
+
bool Contains(const S2Cell& cell) const override { return false; }
|
|
258
|
+
bool MayIntersect(const S2Cell& cell) const override;
|
|
259
|
+
|
|
260
|
+
// Always return false, because "containment" is not numerically
|
|
261
|
+
// well-defined except at the polyline vertices.
|
|
262
|
+
bool Contains(const S2Point& p) const override { return false; }
|
|
263
|
+
|
|
264
|
+
// Appends a serialized representation of the S2Polyline to "encoder".
|
|
265
|
+
//
|
|
266
|
+
// REQUIRES: "encoder" uses the default constructor, so that its buffer
|
|
267
|
+
// can be enlarged as necessary by calling Ensure(int).
|
|
268
|
+
void Encode(Encoder* const encoder) const;
|
|
269
|
+
|
|
270
|
+
// Decodes an S2Polyline encoded with Encode(). Returns true on success.
|
|
271
|
+
bool Decode(Decoder* const decoder);
|
|
272
|
+
|
|
273
|
+
#ifndef SWIG
|
|
274
|
+
// Wrapper class for indexing a polyline (see S2ShapeIndex). Once this
|
|
275
|
+
// object is inserted into an S2ShapeIndex it is owned by that index, and
|
|
276
|
+
// will be automatically deleted when no longer needed by the index. Note
|
|
277
|
+
// that this class does not take ownership of the polyline itself (see
|
|
278
|
+
// OwningShape below). You can also subtype this class to store additional
|
|
279
|
+
// data (see S2Shape for details).
|
|
280
|
+
class Shape : public S2Shape {
|
|
281
|
+
public:
|
|
282
|
+
static constexpr TypeTag kTypeTag = 2;
|
|
283
|
+
|
|
284
|
+
Shape() : polyline_(nullptr) {} // Must call Init().
|
|
285
|
+
|
|
286
|
+
// Initialization. Does not take ownership of "polyline".
|
|
287
|
+
//
|
|
288
|
+
// Note that a polyline with one vertex is defined to have no edges. Use
|
|
289
|
+
// S2LaxPolylineShape or S2LaxClosedPolylineShape if you want to define a
|
|
290
|
+
// polyline consisting of a single degenerate edge.
|
|
291
|
+
explicit Shape(const S2Polyline* polyline) { Init(polyline); }
|
|
292
|
+
void Init(const S2Polyline* polyline);
|
|
293
|
+
|
|
294
|
+
const S2Polyline* polyline() const { return polyline_; }
|
|
295
|
+
|
|
296
|
+
// Encodes the polyline using S2Polyline::Encode().
|
|
297
|
+
void Encode(Encoder* encoder) const {
|
|
298
|
+
// TODO(geometry-library): Support compressed encodings.
|
|
299
|
+
polyline_->Encode(encoder);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// Decoding is defined only for S2Polyline::OwningShape below.
|
|
303
|
+
|
|
304
|
+
// S2Shape interface:
|
|
305
|
+
|
|
306
|
+
int num_edges() const final {
|
|
307
|
+
return std::max(0, polyline_->num_vertices() - 1);
|
|
308
|
+
}
|
|
309
|
+
Edge edge(int e) const final {
|
|
310
|
+
return Edge(polyline_->vertex(e), polyline_->vertex(e + 1));
|
|
311
|
+
}
|
|
312
|
+
int dimension() const final { return 1; }
|
|
313
|
+
ReferencePoint GetReferencePoint() const final {
|
|
314
|
+
return ReferencePoint::Contained(false);
|
|
315
|
+
}
|
|
316
|
+
int num_chains() const final;
|
|
317
|
+
Chain chain(int i) const final;
|
|
318
|
+
Edge chain_edge(int i, int j) const final {
|
|
319
|
+
S2_DCHECK_EQ(i, 0);
|
|
320
|
+
return Edge(polyline_->vertex(j), polyline_->vertex(j + 1));
|
|
321
|
+
}
|
|
322
|
+
ChainPosition chain_position(int e) const final {
|
|
323
|
+
return ChainPosition(0, e);
|
|
324
|
+
}
|
|
325
|
+
TypeTag type_tag() const override { return kTypeTag; }
|
|
326
|
+
|
|
327
|
+
private:
|
|
328
|
+
const S2Polyline* polyline_;
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
// Like Shape, except that the S2Polyline is automatically deleted when this
|
|
332
|
+
// object is deleted by the S2ShapeIndex. This is useful when an S2Polyline
|
|
333
|
+
// is constructed solely for the purpose of indexing it.
|
|
334
|
+
class OwningShape : public Shape {
|
|
335
|
+
public:
|
|
336
|
+
OwningShape() {} // Must call Init().
|
|
337
|
+
|
|
338
|
+
explicit OwningShape(std::unique_ptr<const S2Polyline> polyline)
|
|
339
|
+
: Shape(polyline.get()), owned_polyline_(std::move(polyline)) {}
|
|
340
|
+
|
|
341
|
+
void Init(std::unique_ptr<const S2Polyline> polyline) {
|
|
342
|
+
Shape::Init(polyline.get());
|
|
343
|
+
owned_polyline_ = std::move(polyline);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
bool Init(Decoder* decoder) {
|
|
347
|
+
auto polyline = absl::make_unique<S2Polyline>();
|
|
348
|
+
if (!polyline->Decode(decoder)) return false;
|
|
349
|
+
Shape::Init(polyline.get());
|
|
350
|
+
owned_polyline_ = std::move(polyline);
|
|
351
|
+
return true;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
private:
|
|
355
|
+
std::unique_ptr<const S2Polyline> owned_polyline_;
|
|
356
|
+
};
|
|
357
|
+
#endif // SWIG
|
|
358
|
+
|
|
359
|
+
private:
|
|
360
|
+
// Internal copy constructor used only by Clone() that makes a deep copy of
|
|
361
|
+
// its argument.
|
|
362
|
+
S2Polyline(const S2Polyline& src);
|
|
363
|
+
|
|
364
|
+
// Allows overriding the automatic validity checking controlled by the
|
|
365
|
+
// --s2debug flag.
|
|
366
|
+
S2Debug s2debug_override_;
|
|
367
|
+
|
|
368
|
+
// We store the vertices in an array rather than a vector because we don't
|
|
369
|
+
// need any STL methods, and computing the number of vertices using size()
|
|
370
|
+
// would be relatively expensive (due to division by sizeof(S2Point) == 24).
|
|
371
|
+
int num_vertices_ = 0;
|
|
372
|
+
std::unique_ptr<S2Point[]> vertices_;
|
|
373
|
+
|
|
374
|
+
#ifndef SWIG
|
|
375
|
+
void operator=(const S2Polyline&) = delete;
|
|
376
|
+
#endif // SWIG
|
|
377
|
+
};
|
|
378
|
+
|
|
379
|
+
#endif // S2_S2POLYLINE_H_
|