Skip to content

Commit

Permalink
Giant update (#217)
Browse files Browse the repository at this point in the history
* Add new files
  * s2buffer_operation
  * s2builderutil_get_snapped_winding_delta
  * s2builderutil_lax_polyline_layer
  * s2memory_tracker
  * s2shapeutil_conversion
  * s2winding_operation
  * s2wrapped_shape
  * thread_testing
* Expose some new functions in pywraps2
* Remove internal absl; depend on released absl
* Temporarily require C++17 (until someone complains)
* Require SWIG 4
* Remove internal files that are no longer needed
* Improved documentation of EncodedS2ShapeIndex
  • Loading branch information
jmr authored Nov 12, 2021
1 parent 2a87778 commit 7f0dc0b
Show file tree
Hide file tree
Showing 252 changed files with 16,786 additions and 5,057 deletions.
46 changes: 39 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@ endif()
# undefined symbol errors since ABSL_HAVE_STD_STRING_VIEW etc will
# end up defined differently. There is probably a better way to achieve
# this than assuming what absl used. s2geometry should actually work fine
# with C++11.
# with C++11, but there are a few places that use std::exchange instead of
# absl::exchange, is_x_t, and some atomic constructors that would need
# to change. File a bug if you need support for earlier versions.
# TODO(jrosenstock,b/205952836): Use absl functions if possible.
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# No compiler-specific extensions, i.e. -std=c++17, not -std=gnu++17.
Expand Down Expand Up @@ -74,7 +77,9 @@ find_package(OpenSSL REQUIRED)
find_package(Threads REQUIRED)

if (WITH_PYTHON)
find_package(SWIG)
# Should be easy to make it work with swig3, but some args to %pythonprepend
# seem to be different and were changed.
find_package(SWIG 4.0)
# Use Python3_ROOT_DIR to help find python3, if the correct location is not
# being found by default.
find_package(Python3 COMPONENTS Interpreter Development)
Expand Down Expand Up @@ -109,8 +114,6 @@ endif()
include_directories(src)

add_library(s2
src/s2/base/stringprintf.cc
src/s2/base/strtoint.cc
src/s2/encoded_s2cell_id_vector.cc
src/s2/encoded_s2point_vector.cc
src/s2/encoded_s2shape_index.cc
Expand All @@ -122,11 +125,14 @@ add_library(s2
src/s2/s1chord_angle.cc
src/s2/s1interval.cc
src/s2/s2boolean_operation.cc
src/s2/s2buffer_operation.cc
src/s2/s2builder.cc
src/s2/s2builder_graph.cc
src/s2/s2builderutil_closed_set_normalizer.cc
src/s2/s2builderutil_find_polygon_degeneracies.cc
src/s2/s2builderutil_get_snapped_winding_delta.cc
src/s2/s2builderutil_lax_polygon_layer.cc
src/s2/s2builderutil_lax_polyline_layer.cc
src/s2/s2builderutil_s2point_vector_layer.cc
src/s2/s2builderutil_s2polygon_layer.cc
src/s2/s2builderutil_s2polyline_layer.cc
Expand All @@ -152,7 +158,6 @@ add_library(s2
src/s2/s2edge_crossings.cc
src/s2/s2edge_distances.cc
src/s2/s2edge_tessellator.cc
src/s2/s2error.cc
src/s2/s2furthest_edge_query.cc
src/s2/s2latlng.cc
src/s2/s2latlng_rect.cc
Expand All @@ -163,6 +168,7 @@ add_library(s2
src/s2/s2loop.cc
src/s2/s2loop_measures.cc
src/s2/s2measures.cc
src/s2/s2memory_tracker.cc
src/s2/s2metrics.cc
src/s2/s2max_distance_targets.cc
src/s2/s2min_distance_targets.cc
Expand Down Expand Up @@ -190,12 +196,14 @@ add_library(s2
src/s2/s2shapeutil_build_polygon_boundaries.cc
src/s2/s2shapeutil_coding.cc
src/s2/s2shapeutil_contains_brute_force.cc
src/s2/s2shapeutil_conversion.cc
src/s2/s2shapeutil_edge_iterator.cc
src/s2/s2shapeutil_get_reference_point.cc
src/s2/s2shapeutil_range_iterator.cc
src/s2/s2shapeutil_visit_crossing_edge_pairs.cc
src/s2/s2text_format.cc
src/s2/s2wedge_relations.cc
src/s2/s2winding_operation.cc
src/s2/strings/ostringstream.cc
src/s2/strings/serialize.cc
src/s2/util/bits/bit-interleave.cc
Expand All @@ -208,7 +216,8 @@ add_library(s2
add_library(s2testing STATIC
src/s2/s2builderutil_testing.cc
src/s2/s2shapeutil_testing.cc
src/s2/s2testing.cc)
src/s2/s2testing.cc
src/s2/thread_testing.cc)
target_link_libraries(
s2
${GFLAGS_LIBRARIES} ${GLOG_LIBRARIES} ${OPENSSL_LIBRARIES}
Expand All @@ -219,11 +228,15 @@ target_link_libraries(
absl::dynamic_annotations
absl::endian
absl::fixed_array
absl::flat_hash_map
absl::flat_hash_set
absl::hash
absl::inlined_vector
absl::int128
absl::log_severity
absl::memory
absl::span
absl::str_format
absl::strings
absl::type_traits
absl::utility
Expand Down Expand Up @@ -262,13 +275,16 @@ install(FILES src/s2/_fp_contract_off.h
src/s2/s1chord_angle.h
src/s2/s1interval.h
src/s2/s2boolean_operation.h
src/s2/s2buffer_operation.h
src/s2/s2builder.h
src/s2/s2builder_graph.h
src/s2/s2builder_layer.h
src/s2/s2builderutil_closed_set_normalizer.h
src/s2/s2builderutil_find_polygon_degeneracies.h
src/s2/s2builderutil_get_snapped_winding_delta.h
src/s2/s2builderutil_graph_shape.h
src/s2/s2builderutil_lax_polygon_layer.h
src/s2/s2builderutil_lax_polyline_layer.h
src/s2/s2builderutil_s2point_vector_layer.h
src/s2/s2builderutil_s2polygon_layer.h
src/s2/s2builderutil_s2polyline_layer.h
Expand Down Expand Up @@ -299,6 +315,7 @@ install(FILES src/s2/_fp_contract_off.h
src/s2/s2edge_clipping.h
src/s2/s2edge_crosser.h
src/s2/s2edge_crossings.h
src/s2/s2edge_crossings_internal.h
src/s2/s2edge_distances.h
src/s2/s2edge_tessellator.h
src/s2/s2edge_vector_shape.h
Expand All @@ -313,6 +330,7 @@ install(FILES src/s2/_fp_contract_off.h
src/s2/s2loop.h
src/s2/s2loop_measures.h
src/s2/s2measures.h
src/s2/s2memory_tracker.h
src/s2/s2metrics.h
src/s2/s2max_distance_targets.h
src/s2/s2min_distance_targets.h
Expand All @@ -330,6 +348,7 @@ install(FILES src/s2/_fp_contract_off.h
src/s2/s2polyline_measures.h
src/s2/s2polyline_simplifier.h
src/s2/s2predicates.h
src/s2/s2predicates_internal.h
src/s2/s2projections.h
src/s2/s2r2rect.h
src/s2/s2region.h
Expand All @@ -345,6 +364,7 @@ install(FILES src/s2/_fp_contract_off.h
src/s2/s2shapeutil_build_polygon_boundaries.h
src/s2/s2shapeutil_coding.h
src/s2/s2shapeutil_contains_brute_force.h
src/s2/s2shapeutil_conversion.h
src/s2/s2shapeutil_count_edges.h
src/s2/s2shapeutil_edge_iterator.h
src/s2/s2shapeutil_get_reference_point.h
Expand All @@ -356,7 +376,10 @@ install(FILES src/s2/_fp_contract_off.h
src/s2/s2testing.h
src/s2/s2text_format.h
src/s2/s2wedge_relations.h
src/s2/s2winding_operation.h
src/s2/s2wrapped_shape.h
src/s2/sequence_lexicon.h
src/s2/thread_testing.h
src/s2/value_lexicon.h
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/s2")
install(FILES src/s2/base/casts.h
Expand Down Expand Up @@ -387,8 +410,9 @@ install(FILES src/s2/util/hash/mix.h
install(FILES src/s2/util/math/mathutil.h
src/s2/util/math/matrix3x3.h
src/s2/util/math/vector.h
src/s2/util/math/vector3_hash.h
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/s2/util/math")
install(FILES src/s2/util/math/exactfloat/exactfloat.h
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/s2/util/math/exactfloat")
install(FILES src/s2/util/units/length-units.h
src/s2/util/units/physical-units.h
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/s2/util/units")
Expand Down Expand Up @@ -416,11 +440,14 @@ if (GTEST_ROOT)
src/s2/s1chord_angle_test.cc
src/s2/s1interval_test.cc
src/s2/s2boolean_operation_test.cc
src/s2/s2buffer_operation_test.cc
src/s2/s2builder_graph_test.cc
src/s2/s2builder_test.cc
src/s2/s2builderutil_closed_set_normalizer_test.cc
src/s2/s2builderutil_find_polygon_degeneracies_test.cc
src/s2/s2builderutil_get_snapped_winding_delta_test.cc
src/s2/s2builderutil_lax_polygon_layer_test.cc
src/s2/s2builderutil_lax_polyline_layer_test.cc
src/s2/s2builderutil_s2point_vector_layer_test.cc
src/s2/s2builderutil_s2polygon_layer_test.cc
src/s2/s2builderutil_s2polyline_layer_test.cc
Expand Down Expand Up @@ -462,6 +489,7 @@ if (GTEST_ROOT)
src/s2/s2loop_measures_test.cc
src/s2/s2loop_test.cc
src/s2/s2measures_test.cc
src/s2/s2memory_tracker_test.cc
src/s2/s2metrics_test.cc
src/s2/s2max_distance_targets_test.cc
src/s2/s2min_distance_targets_test.cc
Expand Down Expand Up @@ -492,6 +520,7 @@ if (GTEST_ROOT)
src/s2/s2shapeutil_build_polygon_boundaries_test.cc
src/s2/s2shapeutil_coding_test.cc
src/s2/s2shapeutil_contains_brute_force_test.cc
src/s2/s2shapeutil_conversion_test.cc
src/s2/s2shapeutil_count_edges_test.cc
src/s2/s2shapeutil_edge_iterator_test.cc
src/s2/s2shapeutil_get_reference_point_test.cc
Expand All @@ -500,6 +529,8 @@ if (GTEST_ROOT)
src/s2/s2testing_test.cc
src/s2/s2text_format_test.cc
src/s2/s2wedge_relations_test.cc
src/s2/s2winding_operation_test.cc
src/s2/s2wrapped_shape_test.cc
src/s2/sequence_lexicon_test.cc
src/s2/value_lexicon_test.cc)

Expand All @@ -514,6 +545,7 @@ if (GTEST_ROOT)
absl::base
absl::btree
absl::core_headers
absl::flags_reflection
absl::memory
absl::span
absl::strings
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ S2 documentation can be found on [s2geometry.io](http://s2geometry.io).
## Requirements for End Users

* [CMake](http://www.cmake.org/)
* A C++ compiler with C++11 support, such as [g++](https://gcc.gnu.org/)
\>= 4.7.
* A C++ compiler with C++17 support, such as [g++ 7](https://gcc.gnu.org/)
* [Abseil](https://github.com/abseil/abseil-cpp) (standard library extensions)
* [OpenSSL](https://github.com/openssl/openssl) (for its bignum library)
* [gflags command line flags](https://github.com/gflags/gflags), optional
Expand Down Expand Up @@ -143,7 +142,7 @@ For more info read: [The CMake Cache](https://cmake.org/cmake/help/latest/guide/
If you want the Python interface, you need to run cmake using
`-DWITH_PYTHON=ON`. You will also need to install the following dependencies:

* [SWIG](https://github.com/swig/swig) (for Python support, optional)
* [SWIG 4](https://github.com/swig/swig) (for Python support, optional)
* python3-dev (for Python support, optional)

which can be installed via
Expand All @@ -157,7 +156,8 @@ or on macOS:
```
sudo port install swig
```
Expect to see some warnings if you build with swig 2.0.
Version 4.0 is required, but it should be easy to make it work 3.0 or probably
even 2.0.

Python 3 is required.

Expand Down
14 changes: 8 additions & 6 deletions doc/examples/point_index.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@
#include <cinttypes>
#include <cstdint>
#include <cstdio>

#include "s2/base/commandlineflags.h"
#include "s2/s2earth.h"
#include "absl/flags/flag.h"
#include "s2/s1chord_angle.h"
#include "s2/s2closest_point_query.h"
#include "s2/s2point_index.h"
Expand All @@ -21,24 +23,24 @@ S2_DEFINE_double(query_radius_km, 100, "Query radius in kilometers");
int main(int argc, char **argv) {
// Build an index containing random points anywhere on the Earth.
S2PointIndex<int> index;
for (int i = 0; i < FLAGS_num_index_points; ++i) {
for (int i = 0; i < absl::GetFlag(FLAGS_num_index_points); ++i) {
index.Add(S2Testing::RandomPoint(), i);
}

// Create a query to search within the given radius of a target point.
S2ClosestPointQuery<int> query(&index);
query.mutable_options()->set_max_distance(
S1Angle::Radians(S2Earth::KmToRadians(FLAGS_query_radius_km)));
query.mutable_options()->set_max_distance(S1Angle::Radians(
S2Earth::KmToRadians(absl::GetFlag(FLAGS_query_radius_km))));

// Repeatedly choose a random target point, and count how many index points
// are within the given radius of that point.
int64_t num_found = 0;
for (int i = 0; i < FLAGS_num_queries; ++i) {
for (int i = 0; i < absl::GetFlag(FLAGS_num_queries); ++i) {
S2ClosestPointQuery<int>::PointTarget target(S2Testing::RandomPoint());
num_found += query.FindClosestPoints(&target).size();
}

std::printf("Found %" PRId64 " points in %d queries\n",
num_found, FLAGS_num_queries);
std::printf("Found %" PRId64 " points in %d queries\n", num_found,
absl::GetFlag(FLAGS_num_queries));
return 0;
}
21 changes: 12 additions & 9 deletions doc/examples/term_index.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@

#include "s2/base/commandlineflags.h"
#include "s2/s2earth.h"
#include "absl/container/btree_set.h"
#include "absl/container/flat_hash_map.h"
#include "absl/flags/flag.h"
#include "s2/s2cap.h"
#include "s2/s2point_index.h"
#include "s2/s2region_term_indexer.h"
Expand All @@ -41,14 +44,14 @@ int main(int argc, char **argv) {
// region types include polygons, polylines, rectangles, discs, buffered
// geometry, etc.)
std::vector<S2Point> documents;
documents.reserve(FLAGS_num_documents);
for (int docid = 0; docid < FLAGS_num_documents; ++docid) {
documents.reserve(absl::GetFlag(FLAGS_num_documents));
for (int docid = 0; docid < absl::GetFlag(FLAGS_num_documents); ++docid) {
documents.push_back(S2Testing::RandomPoint());
}

// We use a hash map as our inverted index. The key is an index term, and
// the value is the set of "document ids" where this index term is present.
std::unordered_map<string, std::vector<int>> index;
absl::flat_hash_map<std::string, std::vector<int>> index;

// Create an indexer suitable for an index that contains points only.
// (You may also want to adjust min_level() or max_level() if you plan
Expand All @@ -66,19 +69,19 @@ int main(int argc, char **argv) {
}

// Convert the query radius to an angle representation.
S1Angle radius =
S1Angle::Radians(S2Earth::KmToRadians(FLAGS_query_radius_km));
S1Angle radius = S1Angle::Radians(
S2Earth::KmToRadians(absl::GetFlag(FLAGS_query_radius_km)));

// Count the number of documents (points) found in all queries.
int64_t num_found = 0;
for (int i = 0; i < FLAGS_num_queries; ++i) {
for (int i = 0; i < absl::GetFlag(FLAGS_num_queries); ++i) {
// Choose a random center for query.
S2Cap query_region(S2Testing::RandomPoint(), radius);

// Convert the query region to a set of terms, and compute the union of
// the document ids associated with those terms. (An actual information
// retrieval system would do something more sophisticated.)
std::set<int> candidates;
absl::btree_set<int> candidates;
for (const auto& term : indexer.GetQueryTerms(query_region, kPrefix)) {
candidates.insert(index[term].begin(), index[term].end());
}
Expand All @@ -95,7 +98,7 @@ int main(int argc, char **argv) {
// Now do something with the results (in this example we just count them).
num_found += result.size();
}
std::printf("Found %" PRId64 " points in %d queries\n",
num_found, FLAGS_num_queries);
std::printf("Found %" PRId64 " points in %d queries\n", num_found,
absl::GetFlag(FLAGS_num_queries));
return 0;
}
Loading

0 comments on commit 7f0dc0b

Please sign in to comment.