@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,165 @@
|
|
|
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/s2latlng.h"
|
|
19
|
+
|
|
20
|
+
#include <cmath>
|
|
21
|
+
#include <cstdio>
|
|
22
|
+
#include <unordered_map>
|
|
23
|
+
|
|
24
|
+
#include <gtest/gtest.h>
|
|
25
|
+
|
|
26
|
+
#include "s2/base/logging.h"
|
|
27
|
+
#include "s2/s2pointutil.h"
|
|
28
|
+
#include "s2/s2testing.h"
|
|
29
|
+
#include "s2/third_party/absl/base/macros.h"
|
|
30
|
+
#include "s2/third_party/absl/strings/str_cat.h"
|
|
31
|
+
|
|
32
|
+
using absl::StrCat;
|
|
33
|
+
using std::fabs;
|
|
34
|
+
|
|
35
|
+
TEST(S2LatLng, TestBasic) {
|
|
36
|
+
S2LatLng ll_rad = S2LatLng::FromRadians(M_PI_4, M_PI_2);
|
|
37
|
+
EXPECT_EQ(M_PI_4, ll_rad.lat().radians());
|
|
38
|
+
EXPECT_EQ(M_PI_2, ll_rad.lng().radians());
|
|
39
|
+
EXPECT_TRUE(ll_rad.is_valid());
|
|
40
|
+
S2LatLng ll_deg = S2LatLng::FromDegrees(45, 90);
|
|
41
|
+
EXPECT_EQ(ll_rad, ll_deg);
|
|
42
|
+
EXPECT_TRUE(ll_deg.is_valid());
|
|
43
|
+
EXPECT_FALSE(S2LatLng::FromDegrees(-91, 0).is_valid());
|
|
44
|
+
EXPECT_FALSE(S2LatLng::FromDegrees(0, 181).is_valid());
|
|
45
|
+
|
|
46
|
+
S2LatLng bad = S2LatLng::FromDegrees(120, 200);
|
|
47
|
+
EXPECT_FALSE(bad.is_valid());
|
|
48
|
+
S2LatLng better = bad.Normalized();
|
|
49
|
+
EXPECT_TRUE(better.is_valid());
|
|
50
|
+
EXPECT_EQ(S1Angle::Degrees(90), better.lat());
|
|
51
|
+
EXPECT_DOUBLE_EQ(S1Angle::Degrees(-160).radians(), better.lng().radians());
|
|
52
|
+
|
|
53
|
+
bad = S2LatLng::FromDegrees(-100, -360);
|
|
54
|
+
EXPECT_FALSE(bad.is_valid());
|
|
55
|
+
better = bad.Normalized();
|
|
56
|
+
EXPECT_TRUE(better.is_valid());
|
|
57
|
+
EXPECT_EQ(S1Angle::Degrees(-90), better.lat());
|
|
58
|
+
EXPECT_DOUBLE_EQ(0.0, better.lng().radians());
|
|
59
|
+
|
|
60
|
+
EXPECT_TRUE((S2LatLng::FromDegrees(10, 20) + S2LatLng::FromDegrees(20, 30)).
|
|
61
|
+
ApproxEquals(S2LatLng::FromDegrees(30, 50)));
|
|
62
|
+
EXPECT_TRUE((S2LatLng::FromDegrees(10, 20) - S2LatLng::FromDegrees(20, 30)).
|
|
63
|
+
ApproxEquals(S2LatLng::FromDegrees(-10, -10)));
|
|
64
|
+
EXPECT_TRUE((0.5 * S2LatLng::FromDegrees(10, 20)).
|
|
65
|
+
ApproxEquals(S2LatLng::FromDegrees(5, 10)));
|
|
66
|
+
|
|
67
|
+
// Check that Invalid() returns an invalid point.
|
|
68
|
+
S2LatLng invalid = S2LatLng::Invalid();
|
|
69
|
+
EXPECT_FALSE(invalid.is_valid());
|
|
70
|
+
|
|
71
|
+
// Check that the default constructor sets latitude and longitude to 0.
|
|
72
|
+
S2LatLng default_ll;
|
|
73
|
+
EXPECT_TRUE(default_ll.is_valid());
|
|
74
|
+
EXPECT_EQ(0, default_ll.lat().radians());
|
|
75
|
+
EXPECT_EQ(0, default_ll.lng().radians());
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
TEST(S2LatLng, TestConversion) {
|
|
79
|
+
// Test special cases: poles, "date line"
|
|
80
|
+
EXPECT_DOUBLE_EQ(90.0,
|
|
81
|
+
S2LatLng(S2Point(S2LatLng::FromDegrees(90.0, 65.0)))
|
|
82
|
+
.lat().degrees());
|
|
83
|
+
EXPECT_EQ(-M_PI_2,
|
|
84
|
+
S2LatLng(S2Point(S2LatLng::FromRadians(-M_PI_2, 1)))
|
|
85
|
+
.lat().radians());
|
|
86
|
+
EXPECT_DOUBLE_EQ(180.0,
|
|
87
|
+
fabs(S2LatLng(S2Point(S2LatLng::FromDegrees(12.2, 180.0)))
|
|
88
|
+
.lng().degrees()));
|
|
89
|
+
EXPECT_EQ(M_PI,
|
|
90
|
+
fabs(S2LatLng(S2Point(S2LatLng::FromRadians(0.1, -M_PI)))
|
|
91
|
+
.lng().radians()));
|
|
92
|
+
|
|
93
|
+
// Test a bunch of random points.
|
|
94
|
+
for (int i = 0; i < 100000; ++i) {
|
|
95
|
+
S2Point p = S2Testing::RandomPoint();
|
|
96
|
+
EXPECT_TRUE(S2::ApproxEquals(p, S2Point(S2LatLng(p)))) << p;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
TEST(S2LatLng, TestDistance) {
|
|
101
|
+
EXPECT_EQ(0.0,
|
|
102
|
+
S2LatLng::FromDegrees(90, 0).GetDistance(
|
|
103
|
+
S2LatLng::FromDegrees(90, 0)).radians());
|
|
104
|
+
EXPECT_NEAR(77.0,
|
|
105
|
+
S2LatLng::FromDegrees(-37, 25).GetDistance(
|
|
106
|
+
S2LatLng::FromDegrees(-66, -155)).degrees(),
|
|
107
|
+
1e-13);
|
|
108
|
+
EXPECT_NEAR(115.0,
|
|
109
|
+
S2LatLng::FromDegrees(0, 165).GetDistance(
|
|
110
|
+
S2LatLng::FromDegrees(0, -80)).degrees(),
|
|
111
|
+
1e-13);
|
|
112
|
+
EXPECT_NEAR(180.0,
|
|
113
|
+
S2LatLng::FromDegrees(47, -127).GetDistance(
|
|
114
|
+
S2LatLng::FromDegrees(-47, 53)).degrees(),
|
|
115
|
+
2e-6);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
TEST(S2LatLng, TestToString) {
|
|
119
|
+
struct {
|
|
120
|
+
double lat, lng;
|
|
121
|
+
double expected_lat, expected_lng;
|
|
122
|
+
} values[] = {
|
|
123
|
+
{0, 0, 0, 0},
|
|
124
|
+
{1.5, 91.7, 1.5, 91.7},
|
|
125
|
+
{9.9, -0.31, 9.9, -0.31},
|
|
126
|
+
{sqrt(2), -sqrt(5), 1.414214, -2.236068},
|
|
127
|
+
{91.3, 190.4, 90, -169.6},
|
|
128
|
+
{-100, -710, -90, 10},
|
|
129
|
+
};
|
|
130
|
+
int i = 0;
|
|
131
|
+
for (const auto& v : values) {
|
|
132
|
+
SCOPED_TRACE(StrCat("Iteration ", i++));
|
|
133
|
+
S2LatLng p = S2LatLng::FromDegrees(v.lat, v.lng);
|
|
134
|
+
string output;
|
|
135
|
+
p.ToStringInDegrees(&output);
|
|
136
|
+
|
|
137
|
+
double lat, lng;
|
|
138
|
+
ASSERT_EQ(2, std::sscanf(output.c_str(), "%lf,%lf", &lat, &lng));
|
|
139
|
+
EXPECT_NEAR(v.expected_lat, lat, 1e-8);
|
|
140
|
+
EXPECT_NEAR(v.expected_lng, lng, 1e-8);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Test the variant that returns a string.
|
|
145
|
+
TEST(S2LatLng, TestToStringReturnsString) {
|
|
146
|
+
string s;
|
|
147
|
+
S2LatLng::FromDegrees(0, 1).ToStringInDegrees(&s);
|
|
148
|
+
EXPECT_EQ(S2LatLng::FromDegrees(0, 1).ToStringInDegrees(), s);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
TEST(S2LatLng, TestHashCode) {
|
|
152
|
+
std::unordered_map<S2LatLng, int, S2LatLngHash> map;
|
|
153
|
+
map[S2LatLng::FromDegrees(0, 10)] = 1;
|
|
154
|
+
map[S2LatLng::FromDegrees(2, 12)] = 2;
|
|
155
|
+
map[S2LatLng::FromDegrees(5, 15)] = 3;
|
|
156
|
+
map[S2LatLng::FromDegrees(7, 17)] = 4;
|
|
157
|
+
map[S2LatLng::FromDegrees(11, 19)] = 5;
|
|
158
|
+
EXPECT_EQ(map.size(), 5);
|
|
159
|
+
EXPECT_EQ(1, map[S2LatLng::FromDegrees(0, 10)]);
|
|
160
|
+
EXPECT_EQ(2, map[S2LatLng::FromDegrees(2, 12)]);
|
|
161
|
+
EXPECT_EQ(3, map[S2LatLng::FromDegrees(5, 15)]);
|
|
162
|
+
EXPECT_EQ(4, map[S2LatLng::FromDegrees(7, 17)]);
|
|
163
|
+
EXPECT_EQ(5, map[S2LatLng::FromDegrees(11, 19)]);
|
|
164
|
+
}
|
|
165
|
+
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// Copyright 2013 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
|
|
18
|
+
#include "s2/s2lax_loop_shape.h"
|
|
19
|
+
|
|
20
|
+
#include <vector>
|
|
21
|
+
|
|
22
|
+
#include "s2/s2loop.h"
|
|
23
|
+
#include "s2/s2shapeutil_get_reference_point.h"
|
|
24
|
+
|
|
25
|
+
using std::vector;
|
|
26
|
+
using ReferencePoint = S2Shape::ReferencePoint;
|
|
27
|
+
|
|
28
|
+
S2LaxLoopShape::S2LaxLoopShape(const vector<S2Point>& vertices) {
|
|
29
|
+
Init(vertices);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
S2LaxLoopShape::S2LaxLoopShape(const S2Loop& loop) {
|
|
33
|
+
Init(loop);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
void S2LaxLoopShape::Init(const vector<S2Point>& vertices) {
|
|
37
|
+
num_vertices_ = vertices.size();
|
|
38
|
+
vertices_.reset(new S2Point[num_vertices_]);
|
|
39
|
+
std::copy(vertices.begin(), vertices.end(), vertices_.get());
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
void S2LaxLoopShape::Init(const S2Loop& loop) {
|
|
43
|
+
S2_DCHECK(!loop.is_full()) << "Full loops not supported; use S2LaxPolygonShape";
|
|
44
|
+
if (loop.is_empty()) {
|
|
45
|
+
num_vertices_ = 0;
|
|
46
|
+
vertices_ = nullptr;
|
|
47
|
+
} else {
|
|
48
|
+
num_vertices_ = loop.num_vertices();
|
|
49
|
+
vertices_.reset(new S2Point[num_vertices_]);
|
|
50
|
+
std::copy(&loop.vertex(0), &loop.vertex(0) + num_vertices_,
|
|
51
|
+
vertices_.get());
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
S2Shape::Edge S2LaxLoopShape::edge(int e0) const {
|
|
56
|
+
S2_DCHECK_LT(e0, num_edges());
|
|
57
|
+
int e1 = e0 + 1;
|
|
58
|
+
if (e1 == num_vertices()) e1 = 0;
|
|
59
|
+
return Edge(vertices_[e0], vertices_[e1]);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
S2Shape::Edge S2LaxLoopShape::chain_edge(int i, int j) const {
|
|
63
|
+
S2_DCHECK_EQ(i, 0);
|
|
64
|
+
S2_DCHECK_LT(j, num_edges());
|
|
65
|
+
int k = (j + 1 == num_vertices()) ? 0 : j + 1;
|
|
66
|
+
return Edge(vertices_[j], vertices_[k]);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
S2Shape::ReferencePoint S2LaxLoopShape::GetReferencePoint() const {
|
|
70
|
+
return s2shapeutil::GetReferencePoint(*this);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
S2VertexIdLaxLoopShape::S2VertexIdLaxLoopShape(
|
|
74
|
+
const std::vector<int32>& vertex_ids, const S2Point* vertex_array) {
|
|
75
|
+
Init(vertex_ids, vertex_array);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
void S2VertexIdLaxLoopShape::Init(const std::vector<int32>& vertex_ids,
|
|
79
|
+
const S2Point* vertex_array) {
|
|
80
|
+
num_vertices_ = vertex_ids.size();
|
|
81
|
+
vertex_ids_.reset(new int32[num_vertices_]);
|
|
82
|
+
std::copy(vertex_ids.begin(), vertex_ids.end(), vertex_ids_.get());
|
|
83
|
+
vertex_array_ = vertex_array;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
S2Shape::Edge S2VertexIdLaxLoopShape::edge(int e0) const {
|
|
87
|
+
S2_DCHECK_LT(e0, num_edges());
|
|
88
|
+
int e1 = e0 + 1;
|
|
89
|
+
if (e1 == num_vertices()) e1 = 0;
|
|
90
|
+
return Edge(vertex(e0), vertex(e1));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
S2Shape::Edge S2VertexIdLaxLoopShape::chain_edge(int i, int j) const {
|
|
94
|
+
S2_DCHECK_EQ(i, 0);
|
|
95
|
+
S2_DCHECK_LT(j, num_edges());
|
|
96
|
+
int k = (j + 1 == num_vertices()) ? 0 : j + 1;
|
|
97
|
+
return Edge(vertex(j), vertex(k));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
S2Shape::ReferencePoint S2VertexIdLaxLoopShape::GetReferencePoint() const {
|
|
101
|
+
// GetReferencePoint interprets a loop with no vertices as "full".
|
|
102
|
+
if (num_vertices() == 0) return ReferencePoint::Contained(false);
|
|
103
|
+
return s2shapeutil::GetReferencePoint(*this);
|
|
104
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
// Copyright 2013 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
//
|
|
18
|
+
// This file defines various S2Shape types representing loops:
|
|
19
|
+
//
|
|
20
|
+
// S2LaxLoopShape
|
|
21
|
+
// - like S2Loop::Shape but allows duplicate vertices & edges, more compact
|
|
22
|
+
// representation, and faster to initialize.
|
|
23
|
+
//
|
|
24
|
+
// S2LaxClosedPolylineShape
|
|
25
|
+
// - like S2LaxLoopShape, but defines a loop that does not have an interior
|
|
26
|
+
// (a closed polyline).
|
|
27
|
+
//
|
|
28
|
+
// S2VertexIdLaxLoopShape
|
|
29
|
+
// - like S2LaxLoopShape, but vertices are specified as indices into an
|
|
30
|
+
// existing vertex array.
|
|
31
|
+
|
|
32
|
+
#ifndef S2_S2LAX_LOOP_SHAPE_H_
|
|
33
|
+
#define S2_S2LAX_LOOP_SHAPE_H_
|
|
34
|
+
|
|
35
|
+
#include <algorithm>
|
|
36
|
+
#include <memory>
|
|
37
|
+
#include <vector>
|
|
38
|
+
|
|
39
|
+
#include "s2/s2loop.h"
|
|
40
|
+
#include "s2/s2shape.h"
|
|
41
|
+
|
|
42
|
+
// S2LaxLoopShape represents a closed loop of edges surrounding an interior
|
|
43
|
+
// region. It is similar to S2Loop::Shape except that this class allows
|
|
44
|
+
// duplicate vertices and edges. Loops may have any number of vertices,
|
|
45
|
+
// including 0, 1, or 2. (A one-vertex loop defines a degenerate edge
|
|
46
|
+
// consisting of a single point.)
|
|
47
|
+
//
|
|
48
|
+
// Note that S2LaxLoopShape is faster to initialize and more compact than
|
|
49
|
+
// S2Loop::Shape, but does not support the same operations as S2Loop.
|
|
50
|
+
class S2LaxLoopShape : public S2Shape {
|
|
51
|
+
public:
|
|
52
|
+
// Constructs an empty loop.
|
|
53
|
+
S2LaxLoopShape() : num_vertices_(0) {}
|
|
54
|
+
|
|
55
|
+
// Constructs an S2LaxLoopShape with the given vertices.
|
|
56
|
+
explicit S2LaxLoopShape(const std::vector<S2Point>& vertices);
|
|
57
|
+
|
|
58
|
+
// Constructs an S2LaxLoopShape from the given S2Loop, by copying its data.
|
|
59
|
+
explicit S2LaxLoopShape(const S2Loop& loop);
|
|
60
|
+
|
|
61
|
+
// Initializes an S2LaxLoopShape with the given vertices.
|
|
62
|
+
void Init(const std::vector<S2Point>& vertices);
|
|
63
|
+
|
|
64
|
+
// Initializes an S2LaxLoopShape from the given S2Loop, by copying its data.
|
|
65
|
+
//
|
|
66
|
+
// REQUIRES: !loop->is_full()
|
|
67
|
+
// [Use S2LaxPolygonShape if you need to represent a full loop.]
|
|
68
|
+
void Init(const S2Loop& loop);
|
|
69
|
+
|
|
70
|
+
int num_vertices() const { return num_vertices_; }
|
|
71
|
+
const S2Point& vertex(int i) const { return vertices_[i]; }
|
|
72
|
+
|
|
73
|
+
// S2Shape interface:
|
|
74
|
+
int num_edges() const final { return num_vertices(); }
|
|
75
|
+
Edge edge(int e) const final;
|
|
76
|
+
// Not final; overridden by S2LaxClosedPolylineShape.
|
|
77
|
+
int dimension() const override { return 2; }
|
|
78
|
+
// Not final; overridden by S2LaxClosedPolylineShape.
|
|
79
|
+
ReferencePoint GetReferencePoint() const override;
|
|
80
|
+
int num_chains() const final { return std::min(1, num_vertices_); }
|
|
81
|
+
Chain chain(int i) const final { return Chain(0, num_vertices_); }
|
|
82
|
+
Edge chain_edge(int i, int j) const final;
|
|
83
|
+
ChainPosition chain_position(int e) const final {
|
|
84
|
+
return ChainPosition(0, e);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
private:
|
|
88
|
+
// For clients that have many small loops, we save some memory by
|
|
89
|
+
// representing the vertices as an array rather than using std::vector.
|
|
90
|
+
int32 num_vertices_;
|
|
91
|
+
std::unique_ptr<S2Point[]> vertices_;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
// S2LaxClosedPolylineShape is like S2LaxPolylineShape except that the last
|
|
95
|
+
// vertex is implicitly joined to the first. It is also like S2LaxLoopShape
|
|
96
|
+
// except that it does not have an interior (which makes it more efficient to
|
|
97
|
+
// index).
|
|
98
|
+
class S2LaxClosedPolylineShape : public S2LaxLoopShape {
|
|
99
|
+
public:
|
|
100
|
+
// See S2LaxLoopShape for constructors.
|
|
101
|
+
using S2LaxLoopShape::S2LaxLoopShape;
|
|
102
|
+
|
|
103
|
+
int dimension() const final { return 1; }
|
|
104
|
+
ReferencePoint GetReferencePoint() const final {
|
|
105
|
+
return ReferencePoint::Contained(false);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
// S2VertexIdLaxLoopShape is just like S2LaxLoopShape, except that vertices are
|
|
110
|
+
// specified as indices into a vertex array. This representation can be more
|
|
111
|
+
// compact when many loops are arranged in a mesh structure.
|
|
112
|
+
class S2VertexIdLaxLoopShape : public S2Shape {
|
|
113
|
+
public:
|
|
114
|
+
// Constructs an empty loop.
|
|
115
|
+
S2VertexIdLaxLoopShape() : num_vertices_(0) {}
|
|
116
|
+
|
|
117
|
+
// Constructs the shape from the given vertex array and indices.
|
|
118
|
+
// "vertex_ids" is a vector of indices into "vertex_array".
|
|
119
|
+
//
|
|
120
|
+
// ENSURES: loop->vertex(i) == (*vertex_array)[vertex_ids[i]]
|
|
121
|
+
// REQUIRES: "vertex_array" persists for the lifetime of this object.
|
|
122
|
+
explicit S2VertexIdLaxLoopShape(const std::vector<int32>& vertex_ids,
|
|
123
|
+
const S2Point* vertex_array);
|
|
124
|
+
|
|
125
|
+
// Initializes the shape from the given vertex array and indices.
|
|
126
|
+
// "vertex_ids" is a vector of indices into "vertex_array".
|
|
127
|
+
void Init(const std::vector<int32>& vertex_ids,
|
|
128
|
+
const S2Point* vertex_array);
|
|
129
|
+
|
|
130
|
+
// Returns the number of vertices in the loop.
|
|
131
|
+
int num_vertices() const { return num_vertices_; }
|
|
132
|
+
int32 vertex_id(int i) const { return vertex_ids_[i]; }
|
|
133
|
+
const S2Point& vertex(int i) const { return vertex_array_[vertex_id(i)]; }
|
|
134
|
+
|
|
135
|
+
// S2Shape interface:
|
|
136
|
+
int num_edges() const final { return num_vertices(); }
|
|
137
|
+
Edge edge(int e) const final;
|
|
138
|
+
int dimension() const final { return 2; }
|
|
139
|
+
ReferencePoint GetReferencePoint() const final;
|
|
140
|
+
int num_chains() const final { return std::min(1, num_vertices_); }
|
|
141
|
+
Chain chain(int i) const final { return Chain(0, num_vertices_); }
|
|
142
|
+
Edge chain_edge(int i, int j) const final;
|
|
143
|
+
ChainPosition chain_position(int e) const final {
|
|
144
|
+
return ChainPosition(0, e);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
private:
|
|
148
|
+
int32 num_vertices_;
|
|
149
|
+
std::unique_ptr<int32[]> vertex_ids_;
|
|
150
|
+
const S2Point* vertex_array_;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
#endif // S2_S2LAX_LOOP_SHAPE_H_
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// Copyright 2013 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
|
|
18
|
+
#include "s2/s2lax_loop_shape.h"
|
|
19
|
+
|
|
20
|
+
#include <vector>
|
|
21
|
+
|
|
22
|
+
#include <gtest/gtest.h>
|
|
23
|
+
#include "s2/s2loop.h"
|
|
24
|
+
#include "s2/s2shapeutil_contains_brute_force.h"
|
|
25
|
+
#include "s2/s2text_format.h"
|
|
26
|
+
|
|
27
|
+
using std::vector;
|
|
28
|
+
|
|
29
|
+
TEST(S2LaxLoopShape, EmptyLoop) {
|
|
30
|
+
// Test S2Loop constructor.
|
|
31
|
+
S2LaxLoopShape shape;
|
|
32
|
+
shape.Init(S2Loop(S2Loop::kEmpty()));
|
|
33
|
+
EXPECT_EQ(0, shape.num_vertices());
|
|
34
|
+
EXPECT_EQ(0, shape.num_edges());
|
|
35
|
+
EXPECT_EQ(0, shape.num_chains());
|
|
36
|
+
EXPECT_EQ(2, shape.dimension());
|
|
37
|
+
EXPECT_TRUE(shape.is_empty());
|
|
38
|
+
EXPECT_FALSE(shape.is_full());
|
|
39
|
+
EXPECT_FALSE(shape.GetReferencePoint().contained);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
TEST(S2LaxLoopShape, NonEmptyLoop) {
|
|
43
|
+
// Test vector<S2Point> constructor.
|
|
44
|
+
vector<S2Point> vertices = s2textformat::ParsePoints("0:0, 0:1, 1:1, 1:0");
|
|
45
|
+
S2LaxLoopShape shape(vertices);
|
|
46
|
+
EXPECT_EQ(vertices.size(), shape.num_vertices());
|
|
47
|
+
EXPECT_EQ(vertices.size(), shape.num_edges());
|
|
48
|
+
EXPECT_EQ(1, shape.num_chains());
|
|
49
|
+
EXPECT_EQ(0, shape.chain(0).start);
|
|
50
|
+
EXPECT_EQ(vertices.size(), shape.chain(0).length);
|
|
51
|
+
for (int i = 0; i < vertices.size(); ++i) {
|
|
52
|
+
EXPECT_EQ(vertices[i], shape.vertex(i));
|
|
53
|
+
auto edge = shape.edge(i);
|
|
54
|
+
EXPECT_EQ(vertices[i], edge.v0);
|
|
55
|
+
EXPECT_EQ(vertices[(i + 1) % vertices.size()], edge.v1);
|
|
56
|
+
}
|
|
57
|
+
EXPECT_EQ(2, shape.dimension());
|
|
58
|
+
EXPECT_FALSE(shape.is_empty());
|
|
59
|
+
EXPECT_FALSE(shape.is_full());
|
|
60
|
+
EXPECT_FALSE(shape.GetReferencePoint().contained);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
TEST(S2LaxClosedPolylineShape, NoInterior) {
|
|
64
|
+
vector<S2Point> vertices = s2textformat::ParsePoints("0:0, 0:1, 1:1, 1:0");
|
|
65
|
+
S2LaxClosedPolylineShape shape(vertices);
|
|
66
|
+
EXPECT_EQ(1, shape.dimension());
|
|
67
|
+
EXPECT_FALSE(shape.is_empty());
|
|
68
|
+
EXPECT_FALSE(shape.is_full());
|
|
69
|
+
EXPECT_FALSE(shape.GetReferencePoint().contained);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
TEST(S2VertexIdLaxLoopShape, EmptyLoop) {
|
|
73
|
+
S2VertexIdLaxLoopShape shape(vector<int32>(), nullptr);
|
|
74
|
+
EXPECT_EQ(0, shape.num_edges());
|
|
75
|
+
EXPECT_EQ(0, shape.num_vertices());
|
|
76
|
+
EXPECT_EQ(0, shape.num_chains());
|
|
77
|
+
EXPECT_EQ(2, shape.dimension());
|
|
78
|
+
EXPECT_TRUE(shape.is_empty());
|
|
79
|
+
EXPECT_FALSE(shape.is_full());
|
|
80
|
+
EXPECT_FALSE(shape.GetReferencePoint().contained);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
TEST(S2VertexIdLaxLoopShape, InvertedLoop) {
|
|
84
|
+
vector<S2Point> vertex_array =
|
|
85
|
+
s2textformat::ParsePoints("0:0, 0:1, 1:1, 1:0");
|
|
86
|
+
vector<int32> vertex_ids { 0, 3, 2, 1 }; // Inverted.
|
|
87
|
+
S2VertexIdLaxLoopShape shape(vertex_ids, &vertex_array[0]);
|
|
88
|
+
EXPECT_EQ(4, shape.num_edges());
|
|
89
|
+
EXPECT_EQ(4, shape.num_vertices());
|
|
90
|
+
EXPECT_EQ(1, shape.num_chains());
|
|
91
|
+
EXPECT_EQ(0, shape.chain(0).start);
|
|
92
|
+
EXPECT_EQ(4, shape.chain(0).length);
|
|
93
|
+
EXPECT_EQ(&vertex_array[0], &shape.vertex(0));
|
|
94
|
+
EXPECT_EQ(&vertex_array[3], &shape.vertex(1));
|
|
95
|
+
EXPECT_EQ(&vertex_array[2], &shape.vertex(2));
|
|
96
|
+
EXPECT_EQ(&vertex_array[1], &shape.vertex(3));
|
|
97
|
+
EXPECT_EQ(2, shape.dimension());
|
|
98
|
+
EXPECT_FALSE(shape.is_empty());
|
|
99
|
+
EXPECT_FALSE(shape.is_full());
|
|
100
|
+
EXPECT_TRUE(s2shapeutil::ContainsBruteForce(shape, S2::Origin()));
|
|
101
|
+
}
|