@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,109 @@
|
|
|
1
|
+
// Copyright 2017 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
|
|
18
|
+
#include "s2/s2projections.h"
|
|
19
|
+
|
|
20
|
+
#include <cmath>
|
|
21
|
+
#include "s2/s2latlng.h"
|
|
22
|
+
|
|
23
|
+
using std::fabs;
|
|
24
|
+
|
|
25
|
+
namespace S2 {
|
|
26
|
+
|
|
27
|
+
R2Point Projection::WrapDestination(const R2Point& a, const R2Point& b) const {
|
|
28
|
+
R2Point wrap = wrap_distance();
|
|
29
|
+
double x = b.x(), y = b.y();
|
|
30
|
+
// The code below ensures that "b" is unmodified unless wrapping is required.
|
|
31
|
+
if (wrap.x() > 0 && fabs(x - a.x()) > 0.5 * wrap.x()) {
|
|
32
|
+
x = a.x() + remainder(x - a.x(), wrap.x());
|
|
33
|
+
}
|
|
34
|
+
if (wrap.y() > 0 && fabs(y - a.y()) > 0.5 * wrap.y()) {
|
|
35
|
+
y = a.y() + remainder(y - a.y(), wrap.y());
|
|
36
|
+
}
|
|
37
|
+
return R2Point(x, y);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Default implementation, suitable for any projection where edges are defined
|
|
41
|
+
// as straight lines in the 2D projected space.
|
|
42
|
+
R2Point Projection::Interpolate(double f,
|
|
43
|
+
const R2Point& a, const R2Point& b) const {
|
|
44
|
+
return (1 - f) * a + f * b;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
PlateCarreeProjection::PlateCarreeProjection(double x_scale)
|
|
48
|
+
: x_wrap_(2 * x_scale),
|
|
49
|
+
to_radians_(M_PI / x_scale),
|
|
50
|
+
from_radians_(x_scale / M_PI) {
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
R2Point PlateCarreeProjection::Project(const S2Point& p) const {
|
|
54
|
+
return FromLatLng(S2LatLng(p));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
R2Point PlateCarreeProjection::FromLatLng(const S2LatLng& ll) const {
|
|
58
|
+
return R2Point(from_radians_ * ll.lng().radians(),
|
|
59
|
+
from_radians_ * ll.lat().radians());
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
S2Point PlateCarreeProjection::Unproject(const R2Point& p) const {
|
|
63
|
+
return ToLatLng(p).ToPoint();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
S2LatLng PlateCarreeProjection::ToLatLng(const R2Point& p) const {
|
|
67
|
+
return S2LatLng::FromRadians(to_radians_ * p.y(),
|
|
68
|
+
to_radians_ * remainder(p.x(), x_wrap_));
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
R2Point PlateCarreeProjection::wrap_distance() const {
|
|
72
|
+
return R2Point(x_wrap_, 0);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
MercatorProjection::MercatorProjection(double max_x)
|
|
76
|
+
: x_wrap_(2 * max_x),
|
|
77
|
+
to_radians_(M_PI / max_x),
|
|
78
|
+
from_radians_(max_x / M_PI) {
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
R2Point MercatorProjection::Project(const S2Point& p) const {
|
|
82
|
+
return FromLatLng(S2LatLng(p));
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
R2Point MercatorProjection::FromLatLng(const S2LatLng& ll) const {
|
|
86
|
+
// This formula is more accurate near zero than the log(tan()) version.
|
|
87
|
+
// Note that latitudes of +/- 90 degrees yield "y" values of +/- infinity.
|
|
88
|
+
double sin_phi = sin(ll.lat());
|
|
89
|
+
double y = 0.5 * log((1 + sin_phi) / (1 - sin_phi));
|
|
90
|
+
return R2Point(from_radians_ * ll.lng().radians(), from_radians_ * y);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
S2Point MercatorProjection::Unproject(const R2Point& p) const {
|
|
94
|
+
return ToLatLng(p).ToPoint();
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
S2LatLng MercatorProjection::ToLatLng(const R2Point& p) const {
|
|
98
|
+
// This formula is more accurate near zero than the atan(exp()) version.
|
|
99
|
+
double x = to_radians_ * remainder(p.x(), x_wrap_);
|
|
100
|
+
double k = exp(2 * to_radians_ * p.y());
|
|
101
|
+
double y = std::isinf(k) ? M_PI_2 : asin((k - 1) / (k + 1));
|
|
102
|
+
return S2LatLng::FromRadians(y, x);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
R2Point MercatorProjection::wrap_distance() const {
|
|
106
|
+
return R2Point(x_wrap_, 0);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
} // namespace S2
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
// Copyright 2017 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
//
|
|
18
|
+
// Defines a few simple map projections. (Clients that need more complex
|
|
19
|
+
// projections should use a third-party library such as GeographicLib to
|
|
20
|
+
// implement their own projection subtypes.)
|
|
21
|
+
|
|
22
|
+
#ifndef S2_S2PROJECTIONS_H_
|
|
23
|
+
#define S2_S2PROJECTIONS_H_
|
|
24
|
+
|
|
25
|
+
#include "s2/r2.h"
|
|
26
|
+
#include "s2/s2latlng.h"
|
|
27
|
+
#include "s2/s2point.h"
|
|
28
|
+
|
|
29
|
+
namespace S2 {
|
|
30
|
+
|
|
31
|
+
// For the purposes of the S2 library, a projection is a function that maps
|
|
32
|
+
// between S2Points and R2Points. It can also define the coordinate wrapping
|
|
33
|
+
// behavior along each axis.
|
|
34
|
+
class Projection {
|
|
35
|
+
public:
|
|
36
|
+
virtual ~Projection() {}
|
|
37
|
+
|
|
38
|
+
// Converts a point on the sphere to a projected 2D point.
|
|
39
|
+
virtual R2Point Project(const S2Point& p) const = 0;
|
|
40
|
+
|
|
41
|
+
// Converts a projected 2D point to a point on the sphere.
|
|
42
|
+
//
|
|
43
|
+
// If wrapping is defined for a given axis (see below), then this method
|
|
44
|
+
// should accept any real number for the corresponding coordinate.
|
|
45
|
+
virtual S2Point Unproject(const R2Point& p) const = 0;
|
|
46
|
+
|
|
47
|
+
// Convenience function equivalent to Project(ll.ToPoint()), but the
|
|
48
|
+
// implementation may be more efficient.
|
|
49
|
+
virtual R2Point FromLatLng(const S2LatLng& ll) const = 0;
|
|
50
|
+
|
|
51
|
+
// Convenience function equivalent to S2LatLng(Unproject(p)), but the
|
|
52
|
+
// implementation may be more efficient.
|
|
53
|
+
virtual S2LatLng ToLatLng(const R2Point& p) const = 0;
|
|
54
|
+
|
|
55
|
+
// Returns the point obtained by interpolating the given fraction of the
|
|
56
|
+
// distance along the line from A to B. Almost all projections should
|
|
57
|
+
// use the default implementation of this method, which simply interpolates
|
|
58
|
+
// linearly in R2 space. Fractions < 0 or > 1 result in extrapolation
|
|
59
|
+
// instead.
|
|
60
|
+
//
|
|
61
|
+
// The only reason to override this method is if you want edges to be
|
|
62
|
+
// defined as something other than straight lines in the 2D projected
|
|
63
|
+
// coordinate system. For example, using a third-party library such as
|
|
64
|
+
// GeographicLib you could define edges as geodesics over an ellipsoid model
|
|
65
|
+
// of the Earth. (Note that very few data sets define edges this way.)
|
|
66
|
+
//
|
|
67
|
+
// Also note that there is no reason to define a projection where edges are
|
|
68
|
+
// geodesics over the sphere, because this is the native S2 interpretation.
|
|
69
|
+
virtual R2Point Interpolate(double f, const R2Point& a, const R2Point& b)
|
|
70
|
+
const;
|
|
71
|
+
|
|
72
|
+
// Defines the coordinate wrapping distance along each axis. If this value
|
|
73
|
+
// is non-zero for a given axis, the coordinates are assumed to "wrap" with
|
|
74
|
+
// the given period. For example, if wrap_distance.y() == 360 then (x, y)
|
|
75
|
+
// and (x, y + 360) should map to the same S2Point.
|
|
76
|
+
//
|
|
77
|
+
// This information is used to ensure that edges takes the shortest path
|
|
78
|
+
// between two given points. For example, if coordinates represent
|
|
79
|
+
// (latitude, longitude) pairs in degrees and wrap_distance().y() == 360,
|
|
80
|
+
// then the edge (5:179, 5:-179) would be interpreted as spanning 2 degrees
|
|
81
|
+
// of longitude rather than 358 degrees.
|
|
82
|
+
//
|
|
83
|
+
// If a given axis does not wrap, its wrap_distance should be set to zero.
|
|
84
|
+
virtual R2Point wrap_distance() const = 0;
|
|
85
|
+
|
|
86
|
+
// Helper function that wraps the coordinates of B if necessary in order to
|
|
87
|
+
// obtain the shortest edge AB. For example, suppose that A = [170, 20],
|
|
88
|
+
// B = [-170, 20], and the projection wraps so that [x, y] == [x + 360, y].
|
|
89
|
+
// Then this function would return [190, 20] for point B (reducing the edge
|
|
90
|
+
// length in the "x" direction from 340 to 20).
|
|
91
|
+
R2Point WrapDestination(const R2Point& a, const R2Point& b) const;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
// PlateCarreeProjection defines the "plate carree" (square plate) projection,
|
|
95
|
+
// which converts points on the sphere to (longitude, latitude) pairs.
|
|
96
|
+
// Coordinates can be scaled so that they represent radians, degrees, etc, but
|
|
97
|
+
// the projection is always centered around (latitude=0, longitude=0).
|
|
98
|
+
//
|
|
99
|
+
// Note that (x, y) coordinates are backwards compared to the usual (latitude,
|
|
100
|
+
// longitude) ordering, in order to match the usual convention for graphs in
|
|
101
|
+
// which "x" is horizontal and "y" is vertical.
|
|
102
|
+
class PlateCarreeProjection final : public Projection {
|
|
103
|
+
public:
|
|
104
|
+
// Constructs the plate carree projection where the x coordinates
|
|
105
|
+
// (longitude) span [-x_scale, x_scale] and the y coordinates (latitude)
|
|
106
|
+
// span [-x_scale/2, x_scale/2]. For example if x_scale==180 then the x
|
|
107
|
+
// range is [-180, 180] and the y range is [-90, 90].
|
|
108
|
+
//
|
|
109
|
+
// By default coordinates are expressed in radians, i.e. the x range is
|
|
110
|
+
// [-Pi, Pi] and the y range is [-Pi/2, Pi/2].
|
|
111
|
+
explicit PlateCarreeProjection(double x_scale = M_PI);
|
|
112
|
+
|
|
113
|
+
R2Point Project(const S2Point& p) const override;
|
|
114
|
+
S2Point Unproject(const R2Point& p) const override;
|
|
115
|
+
R2Point FromLatLng(const S2LatLng& ll) const override;
|
|
116
|
+
S2LatLng ToLatLng(const R2Point& p) const override;
|
|
117
|
+
R2Point wrap_distance() const override;
|
|
118
|
+
|
|
119
|
+
private:
|
|
120
|
+
double x_wrap_;
|
|
121
|
+
double to_radians_; // Multiplier to convert coordinates to radians.
|
|
122
|
+
double from_radians_; // Multiplier to convert coordinates from radians.
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
// MercatorProjection defines the spherical Mercator projection. Google Maps
|
|
126
|
+
// uses this projection together with WGS84 coordinates, in which case it is
|
|
127
|
+
// known as the "Web Mercator" projection (see Wikipedia). This class makes
|
|
128
|
+
// no assumptions regarding the coordinate system of its input points, but
|
|
129
|
+
// simply applies the spherical Mercator projection to them.
|
|
130
|
+
//
|
|
131
|
+
// The Mercator projection is finite in width (x) but infinite in height (y).
|
|
132
|
+
// "x" corresponds to longitude, and spans a finite range such as [-180, 180]
|
|
133
|
+
// (with coordinate wrapping), while "y" is a function of latitude and spans
|
|
134
|
+
// an infinite range. (As "y" coordinates get larger, points get closer to
|
|
135
|
+
// the north pole but never quite reach it.) The north and south poles have
|
|
136
|
+
// infinite "y" values. (Note that this will cause problems if you tessellate
|
|
137
|
+
// a Mercator edge where one endpoint is a pole. If you need to do this, clip
|
|
138
|
+
// the edge first so that the "y" coordinate is no more than about 5 * max_x.)
|
|
139
|
+
class MercatorProjection final : public Projection {
|
|
140
|
+
public:
|
|
141
|
+
// Constructs a Mercator projection where "x" corresponds to longitude in
|
|
142
|
+
// the range [-max_x, max_x] , and "y" corresponds to latitude and can be
|
|
143
|
+
// any real number. The horizontal and vertical scales are equal locally.
|
|
144
|
+
explicit MercatorProjection(double max_x);
|
|
145
|
+
|
|
146
|
+
R2Point Project(const S2Point& p) const override;
|
|
147
|
+
S2Point Unproject(const R2Point& p) const override;
|
|
148
|
+
R2Point FromLatLng(const S2LatLng& ll) const override;
|
|
149
|
+
S2LatLng ToLatLng(const R2Point& p) const override;
|
|
150
|
+
R2Point wrap_distance() const override;
|
|
151
|
+
|
|
152
|
+
private:
|
|
153
|
+
double x_wrap_;
|
|
154
|
+
double to_radians_; // Multiplier to convert coordinates to radians.
|
|
155
|
+
double from_radians_; // Multiplier to convert coordinates from radians.
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
} // namespace S2
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
#endif // S2_S2PROJECTIONS_H_
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Copyright 2017 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
|
|
18
|
+
#include "s2/s2projections.h"
|
|
19
|
+
|
|
20
|
+
#include <limits>
|
|
21
|
+
#include <gtest/gtest.h>
|
|
22
|
+
#include "s2/s2latlng.h"
|
|
23
|
+
#include "s2/s2pointutil.h"
|
|
24
|
+
#include "s2/s2testing.h"
|
|
25
|
+
|
|
26
|
+
namespace S2 {
|
|
27
|
+
|
|
28
|
+
TEST(PlateCarreeProjection, Interpolate) {
|
|
29
|
+
PlateCarreeProjection proj(180);
|
|
30
|
+
|
|
31
|
+
// Test that coordinates and/or arguments are not accidentally reversed.
|
|
32
|
+
EXPECT_EQ(R2Point(1.5, 6),
|
|
33
|
+
proj.Interpolate(0.25, R2Point(1, 5), R2Point(3, 9)));
|
|
34
|
+
|
|
35
|
+
// Test extrapolation.
|
|
36
|
+
EXPECT_EQ(R2Point(-3, 0), proj.Interpolate(-2, R2Point(1, 0), R2Point(3, 0)));
|
|
37
|
+
|
|
38
|
+
// Check that interpolation is exact at both endpoints.
|
|
39
|
+
R2Point a(1.234, -5.456e-20), b(2.1234e-20, 7.456);
|
|
40
|
+
EXPECT_EQ(a, proj.Interpolate(0, a, b));
|
|
41
|
+
EXPECT_EQ(b, proj.Interpolate(1, a, b));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
void TestProjectUnproject(const Projection& projection,
|
|
45
|
+
const R2Point& px, const S2Point& x) {
|
|
46
|
+
// The arguments are chosen such that projection is exact, but
|
|
47
|
+
// unprojection may not be.
|
|
48
|
+
EXPECT_EQ(px, projection.Project(x)) << projection.Project(x);
|
|
49
|
+
EXPECT_TRUE(S2::ApproxEquals(x, projection.Unproject(px)))
|
|
50
|
+
<< x << " vs. " << projection.Unproject(px);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
TEST(PlateCarreeProjection, ProjectUnproject) {
|
|
54
|
+
PlateCarreeProjection proj(180);
|
|
55
|
+
TestProjectUnproject(proj, R2Point(0, 0), S2Point(1, 0, 0));
|
|
56
|
+
TestProjectUnproject(proj, R2Point(180, 0), S2Point(-1, 0, 0));
|
|
57
|
+
TestProjectUnproject(proj, R2Point(90, 0), S2Point(0, 1, 0));
|
|
58
|
+
TestProjectUnproject(proj, R2Point(-90, 0), S2Point(0, -1, 0));
|
|
59
|
+
TestProjectUnproject(proj, R2Point(0, 90), S2Point(0, 0, 1));
|
|
60
|
+
TestProjectUnproject(proj, R2Point(0, -90), S2Point(0, 0, -1));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
TEST(MercatorProjection, ProjectUnproject) {
|
|
64
|
+
MercatorProjection proj(180);
|
|
65
|
+
double inf = std::numeric_limits<double>::infinity();
|
|
66
|
+
TestProjectUnproject(proj, R2Point(0, 0), S2Point(1, 0, 0));
|
|
67
|
+
TestProjectUnproject(proj, R2Point(180, 0), S2Point(-1, 0, 0));
|
|
68
|
+
TestProjectUnproject(proj, R2Point(90, 0), S2Point(0, 1, 0));
|
|
69
|
+
TestProjectUnproject(proj, R2Point(-90, 0), S2Point(0, -1, 0));
|
|
70
|
+
TestProjectUnproject(proj, R2Point(0, inf), S2Point(0, 0, 1));
|
|
71
|
+
TestProjectUnproject(proj, R2Point(0, -inf), S2Point(0, 0, -1));
|
|
72
|
+
|
|
73
|
+
// Test one arbitrary point as a sanity check.
|
|
74
|
+
TestProjectUnproject(proj, R2Point(0, 70.255578967830246),
|
|
75
|
+
S2LatLng::FromRadians(1, 0).ToPoint());
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
} // namespace S2
|
|
@@ -0,0 +1,88 @@
|
|
|
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/s2r2rect.h"
|
|
19
|
+
|
|
20
|
+
#include <iosfwd>
|
|
21
|
+
|
|
22
|
+
#include "s2/base/logging.h"
|
|
23
|
+
#include "s2/r1interval.h"
|
|
24
|
+
#include "s2/s2cap.h"
|
|
25
|
+
#include "s2/s2cell.h"
|
|
26
|
+
#include "s2/s2cell_id.h"
|
|
27
|
+
#include "s2/s2coords.h"
|
|
28
|
+
#include "s2/s2latlng_rect.h"
|
|
29
|
+
|
|
30
|
+
S2R2Rect S2R2Rect::FromCell(const S2Cell& cell) {
|
|
31
|
+
// S2Cells have a more efficient GetSizeST() method than S2CellIds.
|
|
32
|
+
double size = cell.GetSizeST();
|
|
33
|
+
return FromCenterSize(cell.id().GetCenterST(), R2Point(size, size));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
S2R2Rect S2R2Rect::FromCellId(S2CellId id) {
|
|
37
|
+
double size = id.GetSizeST();
|
|
38
|
+
return FromCenterSize(id.GetCenterST(), R2Point(size, size));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
S2R2Rect* S2R2Rect::Clone() const {
|
|
42
|
+
return new S2R2Rect(*this);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
S2Point S2R2Rect::ToS2Point(const R2Point& p) {
|
|
46
|
+
return S2::FaceUVtoXYZ(0, S2::STtoUV(p.x()), S2::STtoUV(p.y())).Normalize();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
S2Cap S2R2Rect::GetCapBound() const {
|
|
50
|
+
if (is_empty()) return S2Cap::Empty();
|
|
51
|
+
|
|
52
|
+
// The rectangle is a convex polygon on the sphere, since it is a subset of
|
|
53
|
+
// one cube face. Its bounding cap is also a convex region on the sphere,
|
|
54
|
+
// and therefore we can bound the rectangle by just bounding its vertices.
|
|
55
|
+
// We use the rectangle's center in (s,t)-space as the cap axis. This
|
|
56
|
+
// doesn't yield the minimal cap but it's pretty close.
|
|
57
|
+
S2Cap cap = S2Cap::FromPoint(ToS2Point(GetCenter()));
|
|
58
|
+
for (int k = 0; k < 4; ++k) {
|
|
59
|
+
cap.AddPoint(ToS2Point(GetVertex(k)));
|
|
60
|
+
}
|
|
61
|
+
return cap;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
S2LatLngRect S2R2Rect::GetRectBound() const {
|
|
65
|
+
// This is not very tight but hopefully good enough.
|
|
66
|
+
return GetCapBound().GetRectBound();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
bool S2R2Rect::Contains(const S2Point& p) const {
|
|
70
|
+
if (S2::GetFace(p) != 0) return false;
|
|
71
|
+
double u, v;
|
|
72
|
+
S2::ValidFaceXYZtoUV(0, p, &u, &v);
|
|
73
|
+
return Contains(R2Point(S2::UVtoST(u), S2::UVtoST(v)));
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
bool S2R2Rect::Contains(const S2Cell& cell) const {
|
|
77
|
+
if (cell.face() != 0) return false;
|
|
78
|
+
return Contains(S2R2Rect::FromCell(cell));
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
bool S2R2Rect::MayIntersect(const S2Cell& cell) const {
|
|
82
|
+
if (cell.face() != 0) return false;
|
|
83
|
+
return Intersects(S2R2Rect::FromCell(cell));
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
std::ostream& operator<<(std::ostream& os, const S2R2Rect& r) {
|
|
87
|
+
return os << "[Lo" << r.lo() << ", Hi" << r.hi() << "]";
|
|
88
|
+
}
|