|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r57365 - in sandbox/ggl/formal_review/libs/ggl: . doc doc/doxygen_input doc/doxygen_input/images doc/doxygen_input/pages doc/doxygen_input/sourcecode doc/doxygen_output doc/doxygen_output/html doc/doxygen_output/html/images example example/contrib example/data test test/algorithms test/arithmetic test/core test/iterators test/multi test/multi/algorithms test/point_concept test/policies test/strategies test/test_common test/test_util
From: barend.gehrels_at_[hidden]
Date: 2009-11-04 12:14:01
Author: barendgehrels
Date: 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
New Revision: 57365
URL: http://svn.boost.org/trac/boost/changeset/57365
Log:
Filled formal review tree (ggl/libs)
Added:
sandbox/ggl/formal_review/libs/ggl/
sandbox/ggl/formal_review/libs/ggl/Jamroot (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/
sandbox/ggl/formal_review/libs/ggl/doc/Doxyfile (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/ggl_doxygen_footer.html (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/ggl_doxygen_header.html (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/07_graph_route_example_svg.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/07_graph_route_example_text.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/centroid_polygon.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/centroid_ring.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/clip_linestring.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/clip_polygon.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/clip_segment_segment.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/combine_box_box.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/combine_box_point.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/convexhull_polygon_polygon.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/envelope_polygon.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/linestring.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/multi_polygon.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/output_main.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/polygon.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/simplify_example.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/simplify_linestring.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/speed_comparison.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_convex_hull_cities.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_convex_hull_country.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_intersection_countries.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_intersection_polygon_box.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_intersection_polygon_ring.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_intersection_ring_box.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_intersection_ring_ring.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_intersection_roads.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_simplify_country.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_simplify_road.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_union_polygon_box.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_union_polygon_ring.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_union_ring_box.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_union_ring_ring.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/union_box_box.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/within_polygon.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/within_polygon_example.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/within_ring.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/x01_qt_example_output.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/x02_numeric_adaptor_example_output.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_a_design_rationale.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_c_strategy_rationale.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_examples.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_mainpage.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_pages.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_z_article09.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/boost.vsprops (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_1.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_1.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_2.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_2.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_3.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_3.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_4.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_4.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_5.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_5.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_examples.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_examples.sln (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_examples.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/images/
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/images/draft.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/images/ggl-logo-big.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/images/proposed_boost.png (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/
sandbox/ggl/formal_review/libs/ggl/example/01_point_example.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/01_point_example.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/02_linestring_example.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/02_linestring_example.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/03_polygon_example.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/03_polygon_example.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/06_transformation_example.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/06_transformation_example.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/07_graph_route_example.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/07_graph_route_example.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/Jamfile.v2 (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/boost.vsprops (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/c01_custom_point_example.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/c01_custom_point_example.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/c02_custom_box_example.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/c02_custom_box_example.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/c03_custom_linestring_example.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/c03_custom_linestring_example.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/c04_a_custom_triangle_example.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/c04_a_custom_triangle_example.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/c04_b_custom_triangle_example.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/c04_b_custom_triangle_example.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/c05_custom_point_pointer_example.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/c05_custom_point_pointer_example.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/contrib/
sandbox/ggl/formal_review/libs/ggl/example/contrib/readme.txt (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/custom_examples.sln (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/data/
sandbox/ggl/formal_review/libs/ggl/example/data/cities.sql (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/data/cities.wkt (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/data/roads.wkt (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/ggl_examples.sln (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/soci_examples.sln (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/x01_qt_example.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/x01_qt_example.sln (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/x01_qt_example.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/x02_numeric_adaptor_example.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/x02_numeric_adaptor_example.sln (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/x02_numeric_adaptor_example.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/x03_a_soci_example.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/x03_a_soci_example.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/x03_b_soci_example.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/x03_b_soci_example.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/x03_c_soci_example.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/x03_c_soci_example.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/x03_d_soci_example.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/example/x03_d_soci_example.vcproj (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/
sandbox/ggl/formal_review/libs/ggl/test/Jamfile.v2 (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/
sandbox/ggl/formal_review/libs/ggl/test/algorithms/Jamfile.v2 (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/append.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/area.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/assign.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/centroid.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/combine.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/convert.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/convex_hull.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/correct.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/disjoint.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/distance.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/envelope.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/equals.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/for_each.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/intersection.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/intersects.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/length.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/make.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/overlaps.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/perimeter.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/sectionalize.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/simplify.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_area.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_centroid.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_combine.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_convex_hull.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_envelope.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_equals.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_for_each.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_intersection.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_intersects.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_length.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_overlaps.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_overlay.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_perimeter.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_simplify.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_union.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_within.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/transform.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/union.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/algorithms/within.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/arithmetic/
sandbox/ggl/formal_review/libs/ggl/test/arithmetic/Jamfile.v2 (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/arithmetic/arithmetic.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/arithmetic/dot_product.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/core/
sandbox/ggl/formal_review/libs/ggl/test/core/Jamfile.v2 (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/core/access.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/core/coordinate_dimension.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/core/coordinate_system.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/core/coordinate_type.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/core/geometry_id.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/core/point_type.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/core/radian_access.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/core/reverse_dispatch.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/core/ring.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/core/tag.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/core/topological_dimension.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/ggl_test_common.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/iterators/
sandbox/ggl/formal_review/libs/ggl/test/iterators/Jamfile.v2 (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/iterators/circular_iterator.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/iterators/ever_circling_iterator.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/iterators/segment_iterator.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/multi/
sandbox/ggl/formal_review/libs/ggl/test/multi/Jamfile.v2 (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/
sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/Jamfile.v2 (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_area.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_centroid.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_centroid1.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_convex_hull.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_correct.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_distance.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_envelope.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_for_each.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_length.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_perimeter.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_simplify.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_within.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/point_concept/
sandbox/ggl/formal_review/libs/ggl/test/point_concept/Jamfile.v2 (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/point_concept/array_point.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/point_concept/concept_checker.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/point_concept/function_asserting_a_point.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/point_concept/function_requiring_a_point.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/point_concept/point_with_incorrect_dimension.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/point_concept/point_without_coordinate_type.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/point_concept/point_without_dimension.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/point_concept/point_without_getter.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/point_concept/point_without_setter.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/point_concept/well_formed_point.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/point_concept/well_formed_point_traits.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/policies/
sandbox/ggl/formal_review/libs/ggl/test/policies/Jamfile.v2 (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/policies/compare.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/strategies/
sandbox/ggl/formal_review/libs/ggl/test/strategies/Jamfile.v2 (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/strategies/cross_track.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/strategies/haversine.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/strategies/projected_point.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/strategies/pythagoras.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/strategies/segment_intersection.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/strategies/transformer.cpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/test_common/
sandbox/ggl/formal_review/libs/ggl/test/test_common/test_point.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/test_common/with_pointer.hpp (contents, props changed)
sandbox/ggl/formal_review/libs/ggl/test/test_util/
sandbox/ggl/formal_review/libs/ggl/test/test_util/svg_mapper.hpp (contents, props changed)
Added: sandbox/ggl/formal_review/libs/ggl/Jamroot
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/Jamroot 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,17 @@
+# Boost Build v2 Jamroot for Generic Geometry Library unit
+#
+# Copyright Bruno Lalande 2008
+# Copyright Barend Gehrels, Geodan Holding B.V. Amsterdam, the Netherlands.
+# Copyright (c) 2009 Mateusz Loskot <mateusz_at_[hidden]>
+#
+# Use, modification and distribution is subject to the Boost Software License,
+# Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+project
+ :
+ requirements
+ <include>../../boost
+ <include>.
+ <toolset>gcc:<cxxflags>-pedantic
+ ;
Added: sandbox/ggl/formal_review/libs/ggl/doc/Doxyfile
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/Doxyfile 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,285 @@
+# Doxyfile 1.5.5
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING = UTF-8
+PROJECT_NAME = "Generic Geometry Library"
+PROJECT_NUMBER =
+OUTPUT_DIRECTORY = ./doxygen_output
+CREATE_SUBDIRS = NO
+OUTPUT_LANGUAGE = English
+BRIEF_MEMBER_DESC = YES
+REPEAT_BRIEF = YES
+ABBREVIATE_BRIEF =
+ALWAYS_DETAILED_SEC = YES
+INLINE_INHERITED_MEMB = NO
+FULL_PATH_NAMES = YES
+STRIP_FROM_PATH = c:/svn/geolib/trunk/src/cpp/library/gl/ \
+ c:/svn/ggl/formal_review_request/boost \
+ C:/svn/ggl/formal_review_request/libs/ggl/doc/doxygen_input/pages
+STRIP_FROM_INC_PATH =
+SHORT_NAMES = NO
+JAVADOC_AUTOBRIEF = NO
+QT_AUTOBRIEF = NO
+MULTILINE_CPP_IS_BRIEF = NO
+INHERIT_DOCS = YES
+SEPARATE_MEMBER_PAGES = NO
+TAB_SIZE = 8
+ALIASES =
+OPTIMIZE_OUTPUT_FOR_C = NO
+OPTIMIZE_OUTPUT_JAVA = NO
+OPTIMIZE_FOR_FORTRAN = NO
+OPTIMIZE_OUTPUT_VHDL = NO
+BUILTIN_STL_SUPPORT = YES
+CPP_CLI_SUPPORT = NO
+SIP_SUPPORT = NO
+DISTRIBUTE_GROUP_DOC = NO
+SUBGROUPING = YES
+TYPEDEF_HIDES_STRUCT = NO
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL = YES
+EXTRACT_PRIVATE = NO
+EXTRACT_STATIC = YES
+EXTRACT_LOCAL_CLASSES = NO
+EXTRACT_LOCAL_METHODS = NO
+EXTRACT_ANON_NSPACES = NO
+HIDE_UNDOC_MEMBERS = NO
+HIDE_UNDOC_CLASSES = NO
+HIDE_FRIEND_COMPOUNDS = NO
+HIDE_IN_BODY_DOCS = NO
+INTERNAL_DOCS = NO
+CASE_SENSE_NAMES = NO
+HIDE_SCOPE_NAMES = NO
+SHOW_INCLUDE_FILES = NO
+INLINE_INFO = NO
+SORT_MEMBER_DOCS = NO
+SORT_BRIEF_DOCS = YES
+SORT_GROUP_NAMES = YES
+SORT_BY_SCOPE_NAME = YES
+GENERATE_TODOLIST = NO
+GENERATE_TESTLIST = YES
+GENERATE_BUGLIST = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS =
+MAX_INITIALIZER_LINES = 30
+SHOW_USED_FILES = NO
+SHOW_DIRECTORIES = NO
+FILE_VERSION_FILTER =
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET = YES
+WARNINGS = YES
+WARN_IF_UNDOCUMENTED = YES
+WARN_IF_DOC_ERROR = YES
+WARN_NO_PARAMDOC = NO
+WARN_FORMAT = "$file:$line: $text"
+WARN_LOGFILE =
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT = . .. ../../../boost/ggl/core \
+ ../../../boost/ggl/algorithms \
+ ../../../boost/ggl/algorithms/detail \
+ ../../../boost/ggl/algorithms/overlay \
+ ../../../boost/ggl/arithmetic \
+ ../../../boost/ggl/geometries/concepts \
+ ../../../boost/ggl/geometries/concepts/detail \
+ ../../../boost/ggl/geometries \
+ ../../../boost/ggl/geometries/adapted \
+ ../../../boost/ggl/geometries/register \
+ ../../../boost/ggl/iterators \
+ ../../../boost/ggl/multi/algorithms \
+ ../../../boost/ggl/multi/algorithms/detail \
+ ../../../boost/ggl/multi/core \
+ ../../../boost/ggl/multi/geometries \
+ ../../../boost/ggl/multi/geometries/concepts \
+ ../../../boost/ggl/multi/iterators \
+ ../../../boost/ggl/policies \
+ ../../../boost/ggl/policies/relate \
+ ../../../boost/ggl/strategies \
+ ../../../boost/ggl/strategies/concepts \
+ ../../../boost/ggl/strategies/agnostic \
+ ../../../boost/ggl/strategies/cartesian \
+ ../../../boost/ggl/strategies/spherical \
+ ../../../boost/ggl/strategies/transform \
+ ../../../boost/ggl/util \
+ ../../../boost/ggl/extensions/io/svg \
+ ./doxygen_input/pages
+INPUT_ENCODING = UTF-8
+FILE_PATTERNS = *.hpp
+RECURSIVE = NO
+EXCLUDE = ../../../boost/ggl/util/builder.hpp \
+ ../../../boost/ggl/point_on_line.hpp \
+ ../../../boost/ggl/strategies/cartesian/cart_intersect.hpp \
+ ../../../boost/ggl/util/distance_sort.hpp \
+ ./doxygen_extension_examples.hpp
+EXCLUDE_SYMLINKS = NO
+EXCLUDE_PATTERNS =
+EXCLUDE_SYMBOLS =
+EXAMPLE_PATH = . .. ../example \
+ doxygen_input/sourcecode \
+ ../../../boost/ggl/geometries \
+ ../../../boost/ggl/strategies \
+ ../../../boost/ggl/strategies/cartesian \
+ ../../../boost/ggl/algorithms
+EXAMPLE_PATTERNS =
+EXAMPLE_RECURSIVE = NO
+IMAGE_PATH = doxygen_input/images
+INPUT_FILTER =
+FILTER_PATTERNS =
+FILTER_SOURCE_FILES = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER = YES
+INLINE_SOURCES = NO
+STRIP_CODE_COMMENTS = YES
+REFERENCED_BY_RELATION = NO
+REFERENCES_RELATION = NO
+REFERENCES_LINK_SOURCE = NO
+USE_HTAGS = NO
+VERBATIM_HEADERS = NO
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+COLS_IN_ALPHA_INDEX = 3
+IGNORE_PREFIX =
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML = YES
+HTML_OUTPUT = html
+HTML_FILE_EXTENSION = .html
+HTML_HEADER = doxygen_input/ggl_doxygen_header.html
+HTML_FOOTER = doxygen_input/ggl_doxygen_footer.html
+HTML_STYLESHEET =
+HTML_ALIGN_MEMBERS = YES
+GENERATE_HTMLHELP = NO
+GENERATE_DOCSET = NO
+DOCSET_FEEDNAME = "Generated documentation, by Doxygen"
+DOCSET_BUNDLE_ID = org.doxygen.Project
+HTML_DYNAMIC_SECTIONS = NO
+CHM_FILE =
+HHC_LOCATION =
+GENERATE_CHI = NO
+BINARY_TOC = NO
+TOC_EXPAND = NO
+DISABLE_INDEX = NO
+ENUM_VALUES_PER_LINE = 4
+GENERATE_TREEVIEW = NO
+TREEVIEW_WIDTH = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX = NO
+LATEX_OUTPUT = latex
+LATEX_CMD_NAME = latex
+MAKEINDEX_CMD_NAME = makeindex
+COMPACT_LATEX = NO
+PAPER_TYPE = a4wide
+EXTRA_PACKAGES =
+LATEX_HEADER =
+PDF_HYPERLINKS = YES
+USE_PDFLATEX = YES
+LATEX_BATCHMODE = NO
+LATEX_HIDE_INDICES = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF = NO
+RTF_OUTPUT = rtf
+COMPACT_RTF = NO
+RTF_HYPERLINKS = NO
+RTF_STYLESHEET_FILE =
+RTF_EXTENSIONS_FILE =
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN = NO
+MAN_OUTPUT = man
+MAN_EXTENSION = .3
+MAN_LINKS = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML = NO
+XML_OUTPUT = xml
+XML_SCHEMA =
+XML_DTD =
+XML_PROGRAMLISTING = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD = NO
+PERLMOD_LATEX = NO
+PERLMOD_PRETTY = YES
+PERLMOD_MAKEVAR_PREFIX =
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING = YES
+MACRO_EXPANSION = YES
+EXPAND_ONLY_PREDEF = YES
+SEARCH_INCLUDES = YES
+INCLUDE_PATH =
+INCLUDE_FILE_PATTERNS =
+PREDEFINED = BOOST_CONCEPT_REQUIRES(x)= \
+ BOOST_CONCEPT_ASSERT(x) = \
+ BOOST_STATIC_ASSERT(x) = \
+ DOXYGEN_SHOULD_SKIP_THIS \
+ DOXYGEN_NO_DISPATCH \
+ DOXYGEN_NO_IMPL \
+ DOXYGEN_NO_DETAIL \
+ DOXYGEN_NO_CONCEPT_MEMBERS \
+ DOXYGEN_NO_TRAITS_SPECIALIZATIONS \
+ DOXYGEN_NO_STRATEGY_SPECIALIZATIONS \
+ DOXYGEN_NO_SPECIALIZATIONS
+EXPAND_AS_DEFINED =
+SKIP_FUNCTION_MACROS = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+TAGFILES =
+GENERATE_TAGFILE =
+ALLEXTERNALS = NO
+EXTERNAL_GROUPS = YES
+PERL_PATH = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS = NO
+MSCGEN_PATH =
+HIDE_UNDOC_RELATIONS = YES
+HAVE_DOT = NO
+CLASS_GRAPH = YES
+COLLABORATION_GRAPH = YES
+GROUP_GRAPHS = YES
+UML_LOOK = NO
+TEMPLATE_RELATIONS = NO
+INCLUDE_GRAPH = YES
+INCLUDED_BY_GRAPH = YES
+CALL_GRAPH = NO
+CALLER_GRAPH = NO
+GRAPHICAL_HIERARCHY = YES
+DIRECTORY_GRAPH = YES
+DOT_IMAGE_FORMAT = png
+DOT_PATH =
+DOTFILE_DIRS =
+DOT_GRAPH_MAX_NODES = 50
+MAX_DOT_GRAPH_DEPTH = 0
+DOT_TRANSPARENT = YES
+DOT_MULTI_TARGETS = NO
+GENERATE_LEGEND = YES
+DOT_CLEANUP = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+SEARCHENGINE = NO
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/ggl_doxygen_footer.html
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/ggl_doxygen_footer.html 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,22 @@
+<hr size="1">
+<table width="100%">
+<tbody>
+<tr>
+<td align="left"><small>
+<p>November 5, 2009</p>
+</small></td>
+<td align="right">
+<small>Copyright © 1995-2009 Barend Gehrels, Geodan, Amsterdam<br>
+Copyright © 2008-2009 Bruno Lalande, Paris<br>
+Copyright © 2009 Mateusz Loskot, Cadcorp, London<br>
+</small>
+</td>
+</tr>
+</tbody>
+</table>
+
+<address style="text-align: right;"><small>
+Documentation is generated by Doxygen
+</small></address>
+</body>
+</html>
\ No newline at end of file
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/ggl_doxygen_header.html
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/ggl_doxygen_header.html 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,22 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Generic Geometry Library</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head>
+
+<table cellpadding="2" width="100%">
+<tbody>
+<tr>
+<td valign="top">
+<img alt="GGL" src="images/ggl-logo-big.png" height="80" width="200">
+
+</td>
+<td valign="top" align="right">
+<img alt="Boost C++ Libraries" src="images/proposed_boost.png" height="86" width="277">
+</td>
+</tr>
+</tbody>
+</table>
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/07_graph_route_example_svg.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/07_graph_route_example_text.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/centroid_polygon.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/centroid_ring.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/clip_linestring.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/clip_polygon.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/clip_segment_segment.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/combine_box_box.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/combine_box_point.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/convexhull_polygon_polygon.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/envelope_polygon.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/linestring.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/multi_polygon.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/output_main.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/polygon.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/simplify_example.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/simplify_linestring.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/speed_comparison.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_convex_hull_cities.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_convex_hull_country.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_intersection_countries.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_intersection_polygon_box.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_intersection_polygon_ring.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_intersection_ring_box.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_intersection_ring_ring.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_intersection_roads.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_simplify_country.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_simplify_road.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_union_polygon_box.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_union_polygon_ring.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_union_ring_box.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/svg_union_ring_ring.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/union_box_box.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/within_polygon.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/within_polygon_example.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/within_ring.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/x01_qt_example_output.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/images/x02_numeric_adaptor_example_output.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_a_design_rationale.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_a_design_rationale.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,825 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef _DOXYGEN_DESIGN_RATIONALE_HPP
+#define _DOXYGEN_DESIGN_RATIONALE_HPP
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\page design Design rationale
+
+
+
+
+\section par1 Introduction
+
+Suppose you need C++ software to calculate the distance between two points. You might define a struct:
+
+\code
+struct mypoint
+{
+ double x, y;
+};
+\endcode
+
+And a function, containing the algorithm:
+\code
+double distance(mypoint const& a,
+ mypoint const& b)
+{
+ double dx = a.x - b.x;
+ double dy = a.y - b.y;
+ return sqrt(dx * dx + dy * dy);
+}
+\endcode
+
+Quite simple, and it is usable, but not generic. For a library it has to be designed way further. The design above can only be used for 2D points, for the struct point (and no other struct), in a Cartesian coordinate system.
+A generic library should be able to calculate the distance:
+- for any point class or struct, not on just this mypoint type
+- in more than two dimensions
+- for other coordinate systems, e.g. over the earth or over a sphere
+- between a point and a line or between other geometry combinations
+- in higher precision than double
+- avoiding the square root: often we dont want to do that because it is a relatively expensive function, and for comparing distances it is not necessary.
+In this page we will make the design step by step more generic.
+
+
+
+
+
+
+\section par2 Using templates
+The distance function can be changed into a template function. This is trivial and allows calculating the distance between other point types than just mypoint. We add two template parameters, allowing input of two different point types.
+
+\code
+template <typename P1, typename P2>
+double distance(P1 const& a, P2 const& b)
+{
+ double dx = a.x - b.x;
+ double dy = a.y - b.y;
+ return sqrt(dx * dx + dy * dy);
+}
+\endcode
+
+This template version is slightly better, but not much. Consider a C++ class where member variables are protected
Such a class does not allow to access .x and .y directly. So this paragraph is short and we just go on.
+
+
+
+
+\section par3 Using traits
+We need to take a generic approach and allow any point type as input to the distance function. Instead of accessing .x and .y, we will add a few levels of indirection, using a traits system.
+The function then becomes:
+\code
+template <typename P1, typename P2>
+double distance(P1 const& a, P2 const& b)
+{
+ double dx = get<0>(a) - get<0>(b);
+ double dy = get<1>(a) - get<1>(b);
+ return sqrt(dx * dx + dy * dy);
+}
+\endcode
+
+This adapted distance function uses a generic get function, with dimension as a template parameter, to access the coordinates of a point. This get forwards to the traits system, defined as following:
+\code
+namespace traits
+{
+ template <typename P, int D>
+ struct access {};
+}
+\endcode
+
+which is then specialized for our mypoint type, implementing a static method called get:
+\code
+namespace traits
+{
+ template <>
+ struct access<mypoint, 0>
+ {
+ static double get(mypoint const& p)
+ {
+ return p.x;
+ }
+ };
+ // same for 1: p.y
+ ...
+}
+\endcode
+
+Calling traits::access<point, 0>::get(a) now returns us our x-coordinate. Nice? It is too verbose for a function like this, used so often in the library. We can shorten the syntax by adding an extra function:
+template <int D, typename P>
+\code
+inline double get(P const& p)
+{
+ return traits::access<P, D>::get(p);
+}
+\endcode
+
+This enables us to call get<0>(a), for any point having the traits::access specialization, as shown in the distance algorithm at the start of this paragraph.
+So we wanted to enable classes with methods like .x(), and they are supported as long as there is a specialization of the access struct with a static get function returning .x() for dimension 0, and similar for 1 and .y().
+
+Alternatively we could implement, in the traits class, the dimension as a template parameter in a member template function:
+
+\code
+template <>
+struct access<mypoint>
+{
+ template <int D>
+ static double get(mypoint const& p)
+ // either return x/y using an if-clause
+ // or call a detail-struct specialized
+ // per dimension
+};
+\endcode
+
+This alternative gives in the end the same functionality, either using an if-clause (slower), or adding another level of indirection.
+
+
+
+
+
+
+\section par4 Dimension agnosticism
+Now we can calculate the distance between points in 2D, points of any structure or class. However, we wanted to have 3D as well. So we have to make it dimension agnostic.
+This complicates our distance function. We can use a for-loop to walk through dimensions, but for loops have another performance than the addition which was there originally. However, we can make more usage of templates and make the distance algorithm as following, more complex but attractive for template fans:
+\code
+template <typename P1, typename P2, int D>
+struct pythagoras
+{
+ static double apply(P1 const& a,
+ P2 const& b)
+ {
+ double d = get<D-1>(a) - get<D-1>(b);
+ return d * d + pythagoras
+ <P1, P2, D-1>
+ ::apply(a, b);
+ }
+};
+
+template <typename P1, typename P2 >
+struct pythagoras<P1, P2, 0>
+{
+ static double apply(P1 const&,
+ P2 const&)
+ {
+ return 0;
+ }
+};
+\endcode
+
+The distance function is calling that pythagoras struct, specifying the number of dimensions:
+\code
+template <typename P1, typename P2>
+double distance(P1 const& a, P2 const& b)
+{
+ BOOST_STATIC_ASSERT((
+ dimension<P1>::value
+ == dimension<P2>::value ));
+
+ return sqrt(pythagoras
+ <P1, P2, dimension<P1>::value>
+ :: apply(a, b));
+}
+\endcode
+
+The dimension which is referred to is defined using another traits class:
+\code
+namespace traits
+{
+ template <typename P>
+ struct dimension {};
+}
+\endcode
+
+which has to be specialized again for the struct mypoint. Because it only has to publish a value, we conveniently derive it from the Boost Meta-Programming Library (MPL) class boost::mpl::int_:
+\code
+namespace traits
+{
+ template <>
+ struct dimension<mypoint>
+ : boost::mpl::int_<2>
+ {};
+}
+\endcode
+
+Like the free get function, the library also contains a dimension meta-function.
+\code
+template <typename P>
+struct dimension : traits::dimension<P>
+{};
+\endcode
+
+Below is explained why the extra declaration is useful.
+Now we have agnosticism in the number of dimensions. Our more generic distance function now accepts points of three or more dimensions. The compile-time assertion will prevent point a having two dimension and point b having three dimensions.
+
+
+
+
+
+
+
+\section par5 Coordinate type
+We assumed double above. What if our points are in integer? We can easily add a traits class, and we will do that. However, the distance between two integer coordinates can still be a fractionized value. Besides that, a design goal was to avoid square roots. We handle these cases below, in another paragraph. For the moment we keep returning double, but we allow integer coordinates for our point types.
+To define the coordinate type, we add another traits class, coordinate_type, which should be specialized by the library user:
+\code
+namespace traits
+{
+ template <typename P>
+ struct coordinate_type{};
+
+ // specialization for our mypoint
+ template <>
+ struct coordinate_type<mypoint>
+ {
+ typedef double type;
+ };
+}
+\endcode
+
+Like the access function, where we had a free get function, we add a proxy here as well. A longer version is presented later on, the short function would look like this:
+
+\code
+template <typename P>
+struct coordinate_type : traits::coordinate_type<P> {};
+\endcode
+
+We now can modify our distance algorithm again. Because it still returns double, we only modify the Pythagoras computation class. It should return the coordinate type of its input. But
it has two input, possibly different, point types. They might also differ in their coordinate types. Not that that is very likely, but were designing a generic library and we should handle those strange cases.
+We have to choose one of the coordinate types and of course we select the one with the highest precision. This is not worked out here, it would be too long, and it is not related to geometry. We just assume that there is a meta-function select_most_precise selecting the best type.
+So our computation class becomes:
+\code
+template <typename P1, typename P2, int D>
+struct pythagoras
+{
+ typedef typename select_most_precise
+ <
+ typename coordinate_type<P1>::type,
+ typename coordinate_type<P2>::type
+ >::type computation_type;
+
+ static computation_type apply(
+ P1 const& a, P2 const& b)
+ {
+ computation_type d
+ = get<D-1>(a) - get<D-1>(b);
+ return d * d + pythagoras
+ <P1, P2, D-1>
+ ::apply(a, b);
+ }
+};
+\endcode
+
+
+
+
+
+\section par6 Different geometries
+Weve designed a dimension agnostic system supporting any point-type of any coordinate type. There are still some tweaks but they will be worked out later.
+Now we will see how we calculate the distance between a point and a polygon, or between a point and a line-segment. These formulae are more complex, and the influence on design is even larger.
+We dont want to add a function with another name:
+\code
+template <typename P, typename S>
+double distance_point_segment(P const& p,
+ S const& s)
+\endcode
+
+We want to be generic, the distance function has to be called from code not knowing the type of geometry it handles, so it has to be named distance. We also cannot create an overload because that would be ambiguous, having the same template signature.
+There are two solutions:
+- tag dispatching
+- SFINAE
+
+We select tag dispatching because it fits into the traits system, and also because SFINAE has several drawbacks, listed in another paragraph.
+With tag dispatching the distance algorithm inspects the type of geometry of the input parameters. The distance function will be changed into this:
+\code
+template <typename G1, typename G2>
+double distance(G1 const& g1, G2 const& g2)
+{
+ return dispatch::distance
+ <
+ typename tag<G1>::type,
+ typename tag<G2>::type,
+ G1, G2
+ >::apply(g1, g2);
+}
+\endcode
+
+It is referring to the tag meta-function and forwarding the call to the apply method of a dispatch::distance structure. The tag meta-function is another traits class, and should be specialized for per point type, both shown here:
+\code
+namespace traits
+{
+ template <typename G>
+ struct tag {};
+
+ // specialization
+ template <>
+ struct tag<mypoint>
+ {
+ typedef point_tag type;
+ };
+}
+\endcode
+
+// Free meta-function, like
+// coordinate_system and get:
+\code
+template <typename G>
+struct tag : traits::tag<G> {};
+\endcode
+
+Tags (point_tag, segment_tag, etc) are empty structures with the purpose to specialize a dispatch struct. The dispatch struct for distance, and its specializations, are all defined in a separate namespace and look like the following:
+
+\code
+namespace dispatch {
+template < typename Tag1, typename Tag2, typename G1, typename G2 >
+struct distance
+{};
+
+template <typename P1, typename P2>
+struct distance < point_tag, point_tag, P1, P2 >
+{
+ static double apply(P1 const& a,
+ P2 const& b)
+ {
+ // here we call pythagoras
+ // exactly like we did before
+ ...
+ }
+};
+
+template <typename P, typename S>
+struct distance
+<
+ point_tag, segment_tag, P, S
+>
+{
+ static double apply(P const& p,
+ S const& s)
+ {
+ // here we refer to another function
+ // implementing point-segment
+ // calculations in 2 or 3
+ // dimensions...
+ ...
+ }
+};
+// here we might have many more
+// specializations,
+// for point-polygon, box-circle, etc.
+
+} // namespace
+\endcode
+
+So yes, it is possible; the distance algorithm is generic now in the sense that it also supports different geometry types. One drawback: we have to define two dispatch specializations for point - segment and for segment - point separately. That will also be solved, in the paragraph reversibility below.
+The example below shows where we are now: different point types, geometry types, dimensions.
+\code
+point a(1,1);
+point b(2,2);
+std::cout << distance(a,b) << std::endl;
+segment s1(0,0,5,3);
+std::cout << distance(a, s1) << std::endl;
+rgb red(255, 0, 0);
+rbc orange(255, 128, 0);
+std::cout << "color distance: " << distance(red, orange) << std::endl;
+\endcode
+
+
+
+
+
+\section par7 Kernel revisited
+
+We described above that we had a traits class coordinate_type, defined in namespace traits, and defined a separate coordinate_type class as well. This was actually not really necessary before, because the only difference was namespace clause. But now that we have another geometry type, a segment in this case, it is essential. We can call the coordinate_type meta-function for any geometry type, point, segment, polygon, etc, implemented again by tag dispatching:
+
+\code
+template <typename G>
+struct coordinate_type
+{
+ typedef typename
+ dispatch::coordinate_type
+ <
+ typename tag<G>::type, G
+ >::type type;
+};
+\endcode
+
+Inside the dispatch namespace this meta-function is implemented twice: a generic version and one specialization for points. The specialization for points calls the traits class. The generic version calls the point-specialization, as a sort of recursive meta-function definition:
+
+\code
+namespace dispatch
+{
+
+// Version for any geometry:
+template <typename GeometryTag, typename G>
+struct coordinate_type
+{
+ typedef typename point_type
+ <
+ GeometryTag, G
+ >::type point_type;
+
+ // Call specialization on point-tag
+ typedef typename coordinate_type < point_tag, point_type >::type type;
+};
+
+// Specialization for point-type:
+template <typename P>
+struct coordinate_type<point_tag, P>
+{
+ typedef typename
+ traits::coordinate_type<P>::type
+ type;
+};
+\endcode
+
+
+So it calls another meta-function point_type. This is not elaborated in here but realize that it is available for all geometry types, and typedefs the point type which makes up the geometry, calling it type.
+
+The same applies for the meta-function dimension and for the upcoming meta-function coordinate system.
+
+
+
+
+
+\section par8 Coordinate system
+Until here we assumed a Cartesian system. But we know that the Earth is not flat. Calculating a distance between two GPS-points with the system above would result in nonsense. So we again extend our design. We define for each point type a coordinate system type, using the traits system again. Then we make the calculation dependant on that coordinate system.
+
+Coordinate system is similar to coordinate type, a meta-function, calling a dispatch function to have it for any geometry-type, forwarding to its point-specialization, and finally calling a traits class, defining a typedef type with a coordinate system. We dont show that all here again. We only show the definition of a few coordinate systems:
+\code
+struct cartesian {};
+
+template<typename DegreeOrRadian>
+struct geographic
+{
+ typedef DegreeOrRadian units;
+};
+\endcode
+
+So Cartesian is simple, for geographic we can also select if its coordinates stored in degrees or in radians.
+
+The distance function now will change: it will select the computation method for the corresponding coordinate system and then call the dispatch struct for distance. We call the computation method specialized for coordinate systems a \b strategy. So the new version of the distance function is:
+
+\code
+template <typename G1, typename G2>
+double distance(G1 const& g1, G2 const& g2)
+{
+ typedef typename strategy_distance
+ <
+ typename coordinate_system<G1>::type,
+ typename coordinate_system<G2>::type,
+ typename point_type<G1>::type,
+ typename point_type<G2>::type,
+ dimension<G1>::value
+ >::type strategy;
+
+ return dispatch::distance
+ <
+ typename tag<G1>::type,
+ typename tag<G2>::type,
+ G1, G2, strategy
+ >::apply(g1, g2, strategy());
+}
+\endcode
+
+The strategy_distance mentioned here is a struct with specializations for different coordinate systems.
+
+\code
+template <typename T1, typename T2, typename P1, typename P2, int D>
+struct strategy_distance
+{
+ typedef void type;
+};
+
+template <typename P1, typename P2, int D>
+struct strategy_distance<cartesian, cartesian, P1, P2, D>
+{
+ typedef pythagoras<P1, P2, D> type;
+};
+\endcode
+
+So here is our Pythagoras again, now defined as a strategy. The distance dispatch function just calls its apply method.
+
+So this is an important step: for spherical or geographical coordinate systems, another strategy (computation method) can be implemented. For spherical coordinate systems we have the haversine formula. So it is specialized like this
+\code
+template <typename P1, typename P2,
+ int D = 2>
+struct strategy_distance<spherical, spherical, P1, P2, D>
+{
+ typedef haversine<P1, P2> type;
+};
+
+// struct haversine with apply function
+// is omitted here
+\endcode
+
+For geography, we have some alternatives for distance calculation. There is the Andoyer method[*], fast and precise, and there is the Vincenty method[*], slower and more precise, and there are some less precise approaches as well.
+
+Per coordinate system, one strategy is defined as the default strategy.
+To be able to use any strategy, we modify our design again and add an overload for the distance algorithm, taking a strategy. That enables us to call distance with another strategy.
+
+This new overload distance function also has the advantage that the strategy can be constructed outside the distance function. Because it was constructed inside above, it could not have construction parameters. But for Andoyer or Vincenty, or the haversine formula, it certainly makes sense to have a constructor taking the radius of the earth as a parameter.
+So the distance overloaded function is:
+
+\code
+template <typename G1, typename G2, typename S>
+double distance(G1 const& g1, G2 const& g2, S const& strategy)
+{
+ return dispatch::distance
+ <
+ typename tag<G1>::type,
+ typename tag<G2>::type,
+ G1, G2, S
+ >::apply(g1, g2, strategy);
+}
+\endcode
+
+The strategy has to have a method apply taking two points as argument (for points). It is not required that it is a static method. A strategy
+might define a constructor, where a configuration value is passed and stored as a member variable. In those cases a static
+method would be inconvenient. It can be implemented as a normal method (with the const qualifier).
+
+We do not list all implementations here, Vincenty would cover half a page of mathematics, but you will understand the idea. We can call distance like this:
+\code
+distance(c1, c2)
+\endcode
+
+where c1,c2 are Cartesian points, or like this:
+
+\code
+distance(g1, g2)
+\endcode
+
+where g1,g2 are Geographic points, calling the default strategy for Geographic points (e.g. Andoyer), and like this:
+
+\code
+distance(g1, g2, vincenty<G1, G2>(6275))
+\endcode
+
+where a strategy is specified explicitly and constructed with a radius.
+
+
+
+
+
+
+
+
+
+
+\section par9 Point concept
+The five traits classes mentioned in the paragraphs above form together the Point Concept. Any point type for which specializations are implemented in the traits namespace should be handled correctly by the library. So the Point concept consists of:
+- a specialization for traits::tag
+- a specialization for traits::coordinate_system
+- a specialization for traits::coordinate_type
+- a specialization for traits::dimension
+- a specialization for traits::access
+
+The last one is a class, containing a function, the first four are meta-functions.
+So we now have agnosticism for the number of dimensions, agnosticism for coordinate systems, our design can handle any coordinate type, and it can handle different geometry types.
+Furthermore we can specify our own strategies, the code will not compile in case of two points with different dimensions (because of the assertion), and it will not compile for two points with different coordinate systems (because there is no specialization).
+We still have the distance function returning double. Next paragraph will solve that.
+
+
+
+\section par10 Return type
+We promised that calling sqrt was not always necessary. So we define a distance result struct that contains the squared value and is convertible to a double value.
+This, however, only has to be done for Pythagoras. The spherical distance functions do not take the square root so for them it is not necessary to avoid the expensive square root call; they can just return their distance.
+So the distance result struct is dependant on strategy, therefore made a member type of the strategy, looking like this:
+\code
+template<typename T = double>
+struct cartesian_distance
+{
+ T sq;
+ explicit cartesian_distance(T const& v)
+ : sq (v) {}
+
+ inline operator T() const
+ {
+ return std::sqrt(sq);
+ }
+};
+\endcode
+
+It also has operators defined to compare itself to other results without taking the square root.
+Each strategy should define its return type, within the strategy class, e.g.:
+
+\code
+ typedef cartesian_distance<T> return_type;
+\endcode
+or:
+
+\code
+ typedef double return_type
+\endcode
+
+for Pythagoras and spherical, respectively.
+
+Again our distance function will be modified, as expected, to reflect the new return type. For the overload with a strategy it is not complex:
+\code
+template < typename G1, typename G2, typename Strategy >
+typename Strategy::return_type distance( G1 const& G1 , G2 const& G2 , S const& strategy)
+\endcode
+
+But for the one without strategy we have to select strategy, coordinate type, etc. It would be spacious to do it in one line so we add a separate meta-function:
+\code
+template <typename G1, typename G2 = G1>
+struct distance_result
+{
+ typedef typename point_type<G1>::type P1;
+ typedef typename point_type<G2>::type P2;
+ typedef typename strategy_distance
+ <
+ typename cs_tag<P1>::type,
+ typename cs_tag<P2>::type,
+ P1, P2>::type S;
+
+ typedef typename S::return_type type;
+};
+\endcode
+
+and modify our distance function:
+\code
+template <typename G1, typename G2>
+inline typename distance_result
+ <G1, G2>::type
+ distance(G1 const& G1, G2 const& G2)
+\endcode
+
+Of course also the apply functions in the dispatch specializations will return a result like this, they have a strategy as a template parameter everywhere, making the less verbose version possible.
+
+
+
+
+\section par11 Reversibility
+Our dispatch::distance class was specialized for <point_tag, segment_tag>. Library users can also call the distance function with a segment and a point, in that order. Actually, there are many geometry types (polygon, box, linestring), how to implement all those without duplicating all tag dispatching functions?
+The answer is that we automatically reverse the arguments, if appropriate. For distance it is appropriate because distance is a commutative function.
+We add a meta-function geometry_id, which has specializations for each geometry type, just derived from boost::mpl::int_, such that it can be ordered. Point is 1, segment is e.g. 2.
+
+Then we add a meta-function reverse_dispatch:
+\code
+template <typename G1, typename G2>
+struct reverse_dispatch : detail::reverse_dispatch
+<
+ geometry_id<G1>::type::value,
+ geometry_id<G2>::type::value
+> {};
+\endcode
+
+Because of the order in geometry_id, we can arrange (template) parameters in that order, in specializations. So the detail structure looks like:
+\code
+namespace detail
+{
+ template <int Id1, int Id2>
+ struct reverse_dispatch
+ : boost::mpl::if_c
+ <
+ (Id1 > Id2),
+ boost::true_type,
+ boost::false_type
+ > {};
+\endcode
+
+And our distance function will be modified again with some template meta-programming:
+We get
+\code
+return boost::mpl::if_c
+ <
+ ggl::reverse_dispatch <G1, G2>::type::value,
+ dispatch::distance_reversed
+ <
+ typename tag<G1>::type,
+ typename tag<G2>::type,
+ G1, G2,
+ // strategy
+ >,
+ dispatch::distance
+ <
+ typename tag<G1>::type,
+ typename tag<G2>::type,
+ G1, G2,
+ // strategy
+ >
+ >::type::apply(g1, g2, s);
+\endcode
+
+Where the dispatch::distance_reversed is a specific struct, forwarding its call to dispatch::distance, reversing all its template arguments and function arguments.
+
+
+\section par13 Multi
+Consider Hawaii as a multi_polygon: it is a set of islands (polygons), forming together one entity. The shortest distance from a ship to Hawaii is the shortest distance to the closest island. That algorithm also holds for the shortest distance from a point to a multi-line or a multi-point.
+So we don't want to implement that functionality three times. Instead we add a meta-function, is_multi, which is always true for a multi-geometry (multi-point, multi-linestring, multi-polygon) and always false for the single versions.
+
+\code
+template <typename Geometry>
+struct is_multi : core_dispatch::is_multi<typename tag<Geometry>::type>
+{};
+
+
+namespace dispatch
+{
+
+template <typename GeometryTag>
+struct is_multi : boost::false_type {};
+
+template <>
+struct is_multi<multi_point_tag> : boost::true_type {};
+
+
+template <>
+struct is_multi<multi_linestring_tag> : boost::true_type {};
+
+
+template <>
+struct is_multi<multi_polygon_tag> : boost::true_type {};
+
+
+
+
+} // namespace dispatch
+\endcode
+
+
+Now we can specialize on is_multi, so we add two boolean IsMulti's, one for each geometry type, to our distance dispatch struct and make the call to them in the distance function:
+
+// specialization:
+
+\code
+template <typename GeometryTag1, typename GeometryTag2,
+ typename G1, typename G2, typename Strategy>
+struct distance<GeometryTag1, GeometryTag2, G1, G2, strategy_tag_distance_point_point, Strategy, false, true>
+ : detail::distance::distance_single_to_multi<G1, G2, Strategy>
+{};
+\endcode
+
+
+
+
+If that relatively simple change is done, we have to do one thing: implement the single-to-multi distance implementation structure
+
+\code
+template<typename Geometry, typename MultiGeometry, typename Strategy>
+struct distance_single_to_multi
+{
+ typedef typename Strategy::return_type return_type;
+
+ static return_type apply(Geometry const& geometry,
+ MultiGeometry const& multi,
+ Strategy const& strategy)
+ {
+ using namespace boost;
+
+ return_type mindist = make_distance_result<return_type>(
+ numeric::bounds<typename select_coordinate_type<Geometry, MultiGeometry>::type>::highest());
+
+ typedef typename range_const_iterator<MultiGeometry>::type iterator;
+ for(iterator it = begin(multi); it != end(multi); ++it)
+ {
+ return_type dist = ggl::distance(geometry, *it);
+ if (dist < mindist)
+ {
+ mindist = dist;
+ }
+ }
+
+ return mindist;
+ }
+};
+\endcode
+
+
+
+which iterates over a collection of multi-shapes, and returns the shortest distance. Another function can implement the multi-to-multi function. Note that because of reversibility we don't have to implement the multi-to-single version (as long as multi's always have an higher ID than single's).
+
+
+
+\section par14 Sfinae
+Instead of tag dispatching we alternatively could have chosen for SFINAE, mentioned above. With SFINAE (Substitution Failure Is Not An Error) we add optional parameters to the distance function, which sole use is to make an overload invalid for other geometry types than specified. So like:
+\code
+template <typename P1, typename P2>
+inline double distance(P1 const& p1, P2 const& p2
+ , typename boost::enable_if <is_point<P1> >::type* = 0
+ , typename boost::enable_if <is_point<P2> >::type* = 0
+ )
+ {
+ return impl::distance::point_to_point(p1, p2);
+ }
+\endcode
+
+There would then be overloads for point-segment, point-polygon, etc.
+This SFINAE:
+- can be done on functions but not on structs (meta-functions). So the coordinate_type meta-function would still have to use tag dispatching
+- gives often compiler troubles and headaches: if a user makes an error somewhere, the compiler will not select any of the methods, and/or it will give completely incomprehensible error listings, just because of this SFINAE
+- does not support partial specializations because it is a function. The tag-dispatching function is of course also not supporting that, but it forwards its call to the dispatch struct where partial specializations (and member template functions) are possible. The SFINAE could do that as well but then: why not just add one tag more and have tag dispatching instead?
+- is a trick to deceive the compiler. As a language behavior it was designed to avoid programs becoming ill-formed [2], while tag dispatching is based on specialization, a core feature of C++
+- looks more ugly
+- is simply not necessary because we have tag dispatching :-)
+
+
+
+
+*/
+
+#endif // _DOXYGEN_DESIGN_RATIONALE_HPP
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_c_strategy_rationale.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_c_strategy_rationale.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,80 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef _DOXYGEN_STRATEGY_RATIONALE_HPP
+#define _DOXYGEN_STRATEGY_RATIONALE_HPP
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\page strategy Strategy rationale
+
+
+\section strpar1 Purpose of strategies
+
+A strategy is (Wikipedia, http://en.wikipedia.org/wiki/Strategy_pattern) a software design pattern whereby algorithms can be selected at runtime. According to Wikipedia, it is also known as the Policy pattern. In the C++ template contexts, policies are usually meant as selecting functionality at compile time. so it is reasonable to state that a strategy can also be used at compile-time
+
+Within GGL the term policy is used (sparsely), but in a broader, or in another context. The term Strategy is used specificly for a computation method targeted to a specific coordinate system
+
+GGL-Strategies do have the following purposes:
+ - for each coordinate system, a default strategy is selected by compile time, using the coordinate system tag. This is effectively tag dispatching.
+ - users can override the default choice by using the overloaded function, which has a strategy as an extra parameter, and take another strategy
+ - users can override the default choice by using the overloaded function, to use the default strategy, but constructed with specific parameters
+ - users can override the default choice by using the overloaded function, to use the default strategy (which can be a templated structure), with other template parameters then the default ones
+ - users can override the default choice by using the overloaded function, to use the default strategy (which can be a templated structure), with other template parameters then the default ones, with the specific purpose as to select another calculation type (e.g. GMP or another big number type)
+
+All this happens at compile-time.
+
+For example (this is also explained in the design rationale) the distance functionality. The default distance strategy for point-point is Pythagoras (for cartesian coordinate systems) or Haversine (for spherical) or Andoyer (for geographic). Haversine works on the unit sphere, radius 1. Library users can use the distance function, specifying haversine strategy constructed with a radius of 2. Or they can use the distance function, specifying the more precise Vincenty strategy (for geographic coordinate systems, but that might not even be checked there). Specifying strategies is useful, even if not point-point distance is to be calculated, but e.g. point-polygon distance. In the end it will call the elementary specified functionality. Note that, for this example, the point-segment distance strategy is also "elementary". Note also that it can have an optional template parameter defining the underlying point-point-distance-strategy.
+
+\section strpar2 Properties of strategies
+
+Because strategies can be constructed outside the calling function, they can be specified as an optional parameter (implemented as an overloaded function), and not as only a template-parameter. Furthermore, strategies might be used several times, in several function calls. Therefore they are declared as const reference parameter, they should be stateless (besides construction information).
+
+The strategy needs to access construction information (member variables), its calculation method is therefore usually not a static method but a non-static const method. It can then access member variables, while still being const, non-mutable, stateless, being able to be called across several function calls.
+If often has to keep some calculation information (state), so it should (for some algorithms) declare a state_type. In those cases, that state_type is instantiated before first call and specified in each call.
+The calculation method is always called \b apply (as convention in GGL) and gets the most elementary information as a parameter: a point, a segment, a range. It depends on the algorithm and, sometimes, on the source geometry passed. That should actually be the case as least as possisble
+In most cases, there is an additional method \b result which returns the calculated result. That result-method is a also non-static const method, and the state is passed.
+Note that the methods might be non-static const, but they might also be static. That is not checked by the concept-checker.
+
+A strategy for a specific algorithm has a concept. The distance-strategy should follow the distance-strategy-concept. The point-in-polygon strategy should follow the point-in-polygon-strategy-concept. Those concepts are not modelled as traits classes (contrary to the geomtries). The reason for this is that it seems not necessary to directly legacy classes as concepts, without modification. A wrapper can than be built. So the strategies should have a method apply and should define some types.
+
+Which types, and which additional methods (often a method \b result), is thus dependant on the algorithm.
+
+Strategies are checked by a strategy-concept-checker. For this checker (and sometimes for checking alone), they should define some types. Because if no types are defined, the methods cannot be checked at compile time... The strategy-concept-checkers are thus implemented per algorithm and they use the Boost Concept Check Library for checking.
+
+\section strpar3 Alternative designs
+
+So as explained above, the essention of the current design is:
+- function determines default-strategy, or is called with specified strategy
+- function calls dispatch (on geometry_tag)
+- dispatch calls implementation (in namespace detail), which can be shared for different geometry types and for single/multi
+- implementation calls strategy (if applicable), with the smallest common (geometric) element applicable for all calculation method, the common denominator
+
+
+Some calculations (strategies) might need to take the whole geometry, instead of working on point-per-point or segment-per-segment base. This would bypass the dispatch functionality. Because all strategies would take the whole geometry, it is not necessary to dispatch per geometry type. In fact this dispatching on geometry-type is moved to the strategy_traits class (which are specialized per coordinate system in the current design). So in this alternative design, the strategy traits class specializes on both geometry-tag and coordinate-system-tag, to select the default strategy.
+For the default strategy, this move from "dispatch" to another dispatch called "strategy_XXX" (XXX is the algorithm) might make sense. However, if library users would call the overloaded function and specify a strategy, the only thing what would happen is that that specified strategy is called. So, for example:
+\code
+template <typename G1, typename G2, typename S>
+bool within(G1 const& g1, G2 const& g2, S& const strategy)
+{
+ return strategy.apply(g1, g2);
+}
+\endcode
+
+The library user could call just this strategy.apply(..) method directly. If more strategies are provided by the library or its extensions,
+it would still make sense: the user can still call \b within and does not have to call the \b apply method of the strategy.
+
+The convex hull strategy currently works on a whole geometry. However, it is possible that it will be reshaped to work per range (the algorithm
+internally works per range), plus a mechanism to pass ranges multiple times (it currently is two-pass).
+
+
+*/
+
+#endif // _DOXYGEN_STRATEGY_RATIONALE_HPP
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_examples.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_examples.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,235 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef _DOXYGEN_EXAMPLES_HPP
+#define _DOXYGEN_EXAMPLES_HPP
+
+
+/*!
+
+
+\example 01_point_example.cpp
+In most cases the documentation gives small examples of how to use the algorithms or classes.
+The point example is a slightly larger example giving the an idea of how to use different
+algorithms from the library, related to points. It shows
+- the usage of include files
+- how to declare points, using different coordinate types
+- how to construct points, specifying coordinates, initializing to zero or to infinite
+- how to compare points to each other
+- how points can be streamed as OGC text
+- calculating the distance from point to point
+
+
+*/
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\example 02_linestring_example.cpp
+The linestring example shows how linestrings can be declared and used and shows some more algorithms.
+One of the important concepts of the Generic Geometry Library is that it is totally built upon the standard
+library, using the standard containers such as std::vector.
+
+A linestring is, as explained elsewhere in this documentation, not much more than a vector of points.
+Most algorithms run on linestrings, but can also run on any iterator pair. And all algorithms
+on std::vector can be used on geometry::linestring.
+
+The sample shows this, shows some algorithms:
+- geometry::envelope
+- geometry::length
+- geometry::distance
+- geometry::simplify
+- geometry::for_each
+- geometry::intersection
+
+This documentation illustrates the simplify algorithm and the intersection algorithm with some pictures.
+
+The simplify algorithm simplifies a linestring. Simplification means that the less important points
+are removed from the line and that the points that are most important for the shape of a line are
+kept. Simplification is done using the well known Douglas Peucker algorithm. The library user can
+specify the distance or tolerance, which indicates how much the linestring should be simplified.
+
+The image below shows the original and simplified linestring:
+\image html simplify_linestring.png
+The blue line is the original linestring; the red line is the simplified line which has one point less.
+In geographical applications simplification can reduce a linestring to its basic form containing only
+10% of its original points.
+
+The intersection algorithm intersects two geometries which each other, delivering a third geometry.
+In the case of the example a linestring is intersected with a box. Intersection with a box is often
+called a clip. The image below illustrates the intersection.
+\image html clip_linestring.png
+The yellow line is intersected with the blue box.
+The intersection result, painted in red, contains three linestrings.
+*/
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\example 03_polygon_example.cpp
+The polygon example shows some examples of what can be done with polygons in the Generic Geometry Library:
+* the outer ring and the inner rings
+* how to calculate the area of a polygon
+* how to get the centroid, and how to get an often more interesting label point
+* how to correct the polygon such that it is clockwise and closed
+* within: the well-known point in polygon algorithm
+* how to use polygons which use another container, or which use different containers for points and for inner rings
+* how polygons can be intersected, or clipped, using a clipping box
+
+The illustrations below show the usage of the within algorithm and the intersection algorithm.
+
+The within algorithm results in true if a point lies completly within a polygon. If it lies exactly
+on a border it is not considered as within and if it is inside a hole it is also not within the
+polygon. This is illustrated below, where only the point in the middle is within the polygon.
+
+\image html within_polygon.png
+
+The clipping algorithm, called intersection, is illustrated below:
+
+\image html clip_polygon.png
+
+The yellow polygon, containing a hole, is clipped with the blue rectangle, resulting in a
+multi_polygon of three polygons, drawn in red. The hole is vanished.
+
+include polygon_example.cpp
+*/
+
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example 06_transformation_example.cpp
+This sample demonstrates the usage of transformations in the Generic Geometry Library.
+Behind the screens this is done using with the uBLAS matrix/vector library.
+*/
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\example 07_graph_route_example.cpp
+The graph route example shows how GGL can be combined with Boost.Graph. The sample does the following things:
+- it reads roads (included in the distribution, stored on disk in the form of a text file containing geometries and names)
+- it reads cities
+- it creates a graph from the roads
+- it connects each city to the nearest vertex in the graph
+- it calculates the shortest route between each pair of cities
+- it outputs the distance over the road, and also of the air
+- it creates an SVG image with the roads, the cities, and the first calculated route
+
+Note that this example is useful, but it is only an example. It could be built in many different ways.
+For example:
+- the roads/cities could be read from a database using SOCI, or from a shapefile using shapelib
+- it could support oneway roads and roads on different levels (disconnected bridges)
+- it currently uses tuples but that could be anything
+- etc
+
+The SVG looks like:
+\image html 07_graph_route_example_svg.png
+
+The output screen looks like:
+\image html 07_graph_route_example_text.png
+
+
+*/
+
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example c01_custom_point_example.cpp
+This sample demonstrates that custom points can be made as well. This sample contains many points, derived
+from boost::tuple, created from scratch, read only points, legacy points, etc.
+*/
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example c02_custom_box_example.cpp
+Besides custom points, custom boxes are possible as shown in this example.
+*/
+
+//---------------------------------------------------------------------------------------------------
+/*!
+\example c03_custom_linestring_example.cpp
+GPS tracks are shown in this example: a custom linestring with GPS points
+*/
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example c04_a_custom_triangle_example.cpp
+The \b custom triangle \b example goes even further and implements a custom ring, where the area calculation
+algorithm is optimized for a triangle
+*/
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example c05_custom_point_pointer_example.cpp
+This example shows how GGL can be used to adapt a pointer-to-a-point, used e.g. in a linestring
+*/
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example c04_b_custom_triangle_example.cpp
+This second custom triangle example shows an alternative implementation for a custom shape, showing a
+partial specialization for the area calculation.
+*/`
+
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example x01_qt_example.cpp
+This sample demonstrates that by usage of concepts, external geometries can be handled
+by GGL, just calling by a one-line registration macro. In this case for the Qt Widget Library.
+
+The example, code shown below, results in this window-output:
+\image html x01_qt_example_output.png
+*/
+
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example x02_numeric_adaptor_example.cpp
+
+The Numeric Adaptor is recently introduced to the Boost mailing list It is a proxy to high precision
+arithmetic libraries such as GMP or CLN.
+However, it might be that the same effect can be used using the Boost.Math bindings.
+
+This example shows how the GGL can be combined with non-numeric value types such as
+from the Numeric Adaptor
+\image html x02_numeric_adaptor_example_output.png
+*/
+
+
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example x03_a_soci_example.cpp
+First example showing how to get spatial data from a database using SOCI and put them into GGL
+*/
+
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example x03_b_soci_example.cpp
+Second example showing how to get polygons from a database using SOCI and put them into GGL, using WKT.
+*/
+
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example x03_c_soci_example.cpp
+Example showing how to get polygons from PostGIS using SOCI and use them in GGL through WKB
+*/
+
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example x03_d_soci_example.cpp
+Example showing how to get polygons from PostGIS using SOCI and use them in GGL through WKB
+
+*/
+
+#endif // _DOXYGEN_EXAMPLES_HPP
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_mainpage.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_mainpage.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,94 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef _DOXYGEN_MAINPAGE_HPP
+#define _DOXYGEN_MAINPAGE_HPP
+
+
+/*!
+\mainpage Generic Geometry Library
+
+\section header Generic Geometry Library
+
+<em>Copyright © 1995-2009 <b>Barend Gehrels</b>, Geodan, Amsterdam, the Netherlands.\n
+Copyright © 2008-2009 <b>Bruno Lalande</b>, Paris, France.\n
+Copyright © 2009 <b>Mateusz Loskot</b>, Cadcorp, London, UK.\n
+Distributed under the Boost Software License, Version 1.0.\n
+(See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+</em>
+
+\section intro Introduction
+The Generic Geometry Library, GGL (currently in "Formal Review Request") defines \ref concepts "concepts" for geometries and implements some algorithms on such geometries.
+
+GGL contains a dimension-agnostic, coordinate-system-agnostic and scalable kernel, based on concepts, meta-functions and tag- dispatching.
+On top of that kernel, algorithms are built: area, length, perimeter, centroid, convex hull, intersection (clipping), within (point in polygon), distance, envelope (bounding box), simplify, transform, convert, and more. The library is also designed to support high precision arithmetic numbers, such as GMP.
+
+GGL contains instantiable geometry classes, but library users can also use their own. Using registration macros or traits classes their geometries can be adapted to fulfil the GGL-concepts.
+
+The GGL might be used in all domains where geometry plays a role: mapping and GIS, gaming, computer graphics and widgets, robotics, astronomy... The core is designed to be as generic as possible and support those domains. However, for now the development has been mostly GIS-oriented.
+
+GGL supports the extension model, the same way as GIL also applies it. An extension is (mostly) something more specific to domains like mentioned above.
+
+The library follows existing conventions:
+- conventions from boost
+- conventions from the std library
+- conventions and names from one of the OGC standards on Geometry
+
+This Generic Geometry Library (ggl) is now being proposed to the Boost Library Collection
+
+The library can be downloaded from the Boost Sandbox,
+go to the \ref download "Download page" for more information.
+
+\section quickstart Quick start
+It is not possible to show the whole library at a glance. A few very small examples are shown below.
+
+It should be possible to use a very small part of the library,
+for example only the distance between two points.
+
+\dontinclude doxygen_2.cpp
+\skip example_for_main_page()
+\skipline int a
+\until endl;
+
+Other often used algorithms are point-in-polygon:
+\skipline ring_2d
+\until endl;
+
+or area:
+\skip area
+\until endl;
+
+It is possible, by the nature of a template library, to mix the point types declared above:
+\skip double d2
+\until endl;
+
+The pieces above generate this output:
+\image html output_main.png
+
+
+It is also possible to use non-Cartesian points.
+For example: points on a sphere. When then an algorithm such as distance
+is used the library "inspects" that it is handling spherical
+points and calculates the distance over the sphere, instead of applying the Pythagorean theorem.
+
+Finally an example from a totally different domain: developing window-based applications, for example
+using QtWidgets. We check if two rectangles overlap and if so,
+move the second one to another place:
+\skip QRect
+\until }
+
+Many more examples are on the page \b Examples
+
+
+*/
+
+
+
+
+
+#endif // _DOXYGEN_MAINPAGE_HPP
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_pages.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_pages.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,345 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef _DOXYGEN_PAGES_HPP
+#define _DOXYGEN_PAGES_HPP
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\page compiling Compiling
+
+\section compiling_intro Compiling the Generic Geometry Library
+
+The Generic Geometry Library is a Header Only library. So just including the headerfiles is enough
+to use the algorithms. Nothing has to be linked.
+
+The Generic Geometry Library is only dependant on (header only) Boost libraries. Download the Boost
+Library Collection from www.boost.org, adapt include path to include Boost.
+
+\section platforms Platforms
+
+The library currently compiles successfully on the following platforms:
+- MS Visual Studio 2008 (Express Edition)
+- MS Visual Studio 2005 (Express Edition)
+- gcc version 3.4
+- gcc version 4 (tested are 4.1, 4.2, 4.4)
+
+For Visual Studio, the examples contains some project files (for 2005). However, because the library
+ is header only, it will be no problem to integrate it in your own project files.
+
+The test and example folders contain also Jam-files for bjam / boost-build
+
+For gcc, the flag -Wno-long-long can be used (surpressing warnings originating from Boost)
+
+\section convenient_includes Convenient includes
+
+This section concentrates on how to include the Generic Geometry Library.
+
+The most convenient headerfile including all algorithms and strategies is ggl.hpp:
+- \#include <ggl/ggl.hpp> It is recommended to include this file.
+Alternatively, it is possible to include GGL headerfiles separately. However, this is inconvenient as files might
+be renamed or moved occasionaly.
+
+
+An often used headerfile is geometries.hpp:
+- \#include <ggl/geometries/geometries.hpp> This includes all default geometries: point, linestring,
+ polygon, linear_ring, box. It is not included in the "ggl.hpp" headerfile because
+ users are allowed to use their own geometries. However, for library users who want to use the provided
+ geometries it is most useful.
+
+
+For users using only Cartesian points, with floating point coordinates (double), in 2D or 3D, you can use instead:
+- \#include <ggl/geometries/cartesian2d.hpp> This includes all 2D Cartesian geometries: point_2d, linestring_2d,
+ etc. Using this headerfile the library seems to be a non-template library, so it is convenient for users that
+ are not so into the template world.
+
+
+
+
+\section advanced_includes Advanced includes
+
+This section is for users who have their own geometries and want to use algorithms from the Generic Geometry Library.
+
+
+If you want to use your own points it makes sense to use the registration macro's:
+- \#include <ggl/geometries/register/point.hpp> macro's for point registration
+- \#include <ggl/geometries/register/box.hpp> macro's for box registration
+
+
+If you are using standard containers containing points and want to handle them as a linestring
+- \#include <ggl/geometries/adapted/std_as_linestring.hpp> allows you to use things like \c std::vector<point_2d>
+ and put them as parameters into algorithms.
+
+
+If you are using boost tuples and want to handle them as Cartesian points
+- \#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+
+
+\section performance Performance finetuning
+The enumeration below is not exhaustive but can contain hints to improve the performance
+- For Microsoft, set the define _SECURE_SCL=0
+- For Microsoft, set the define _HAS_ITERATOR_DEBUGGING=0
+- measurements indicate that MSVC 2005 generates faster code than MSVC 2008
+- Using StlPort results in significant faster code than Microsoft's standard library
+- Of course turn on compiler optimizations, compile in release mode
+
+\section intellisense Intellisense issues
+Microsoft Visual Studio (Express) 2005 and 2008 can hang typing in a bracket or angle bracket.
+This is not directly related to GGL, but caused by heavy templated libraries such as Boost and GGL.
+If this is inconvenient, intellisense can easily be turned off:
+
+<i>(...) disabling Intellisense in VC++.
+There is a file called feacp.dll in <VS8INSTALL>/VC/vcpackages folder.
+Renaming this file will disable Intellisense feature.</i>
+
+Source: http://blogs.msdn.com/yash/archive/2007/09/19/intellisense-issues-in-visual-c-2005.aspx
+
+
+*/
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\page performance Performance
+
+\section performance_comparison Performance results
+The performance has been tested for some algorithms and it seems that the Generic Geometry Library performs well,
+indicating that the template-based approach and consequent usage of inline functions and the std:: library
+is a sound approach. Measurements and comparisons (still in concept) are here:
+http://trac.osgeo.org/ggl/wiki/Performance
+
+\section performance-notes Performance notes
+In the page about compiling the library there are some hints provided which might improve the performance.
+
+Furthermore it is important to realize that if you're about to do calculations with two geometries, for
+example a point-in-polygon or an intersection, it is very useful to first calculate and store all bounding
+boxes (envelopes), and then before doing a point-in-polygon check if the point is in the bounding box. Checking if a
+point is within a box is of course much faster than visiting all vertices of a polygon.
+
+The storage of bounding boxes is, on purpose, not done within the library because it would break the possibility
+to use standard vectors of points for linestrings or rings. The library might get a traits system in the future
+where geometries might tell their boundaries to the algorithms, this however would be an optional system.
+*/
+
+
+
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\page DSV DSV (Delimiter Separated Values)
+DSV is a text representation of a geometry, explained here: http://en.wikipedia.org/wiki/Delimiter-separated_values
+DSV can represent a point, a linestring, a polygon, or multi versions of those.
+
+It is currently just a utility in the library, used in samples and tests, to get some textual output
+of a geometry.
+
+*/
+
+//---------------------------------------------------------------------------------------------------
+
+
+/*!
+\page OGC OGC (Open Geospatial Consortium)
+OGC is the Open Geospatial Consortium, the standardization committee
+on Geospatial Interoperability and GIS (Geographical Information Systems).
+OGC geometries are used in many environments and databases.
+
+The Generic Geometry Library uses OGC conventions
+for algorithms and for geometry type names. Note that though OGC is concentrating on GIS,
+the conventions followed here are 'geometry only', the so-called 'simple features'
+(simple in the sense that polygons are not allowed to have self-intersections).
+
+OGC specifies a library based on inheritance, as opposed to this library, which is a generic template based library
+where data classes are separated from the algorithms.
+Therefore this library is not an OGC implementation in the strict sense.
+
+\section Classes
+OGC defines the following geometry classes,
+which are implemented as concepts (and as geometries) the Generic Geometry Library:
+- \ref ggl::point "point": a point. The point defined here is dimensionally agnostic.
+Library users does not have to use this point, they might also use their own points as long as it meets the concepts.
+- \ref ggl::linestring "linestring": Sequence of point values with linear interpolation
+between points. Note that library users does not have to use this type. Algorithms works on iterators, so
+all algorithms also accept iterators on a vector (or other container) of points.
+- \ref ggl::linear_ring "linear_ring": Sequence of point values with linear interpolation
+between points, which is closed and not self-intersecting
+- \ref ggl::polygon "polygon": Plane figure, consisting of an outer ring and zero or more
+inner rings. So basically a polygon which might have holes.
+<em>Note that this definition is different from several other polygon definitions and libraries,
+where polygons are not allowed to have holes. These polygons are comparable to the linear_ring above</em>
+
+The following geometries were in the first preview, because they are defined in OGC, but not in the current preview
+(they will be added again).
+- \ref ggl::multi_point "multi_point": collection of points
+- \ref ggl::multi_linestring "multi_linestring": collection of linestrings
+- \ref ggl::multi_polygon "multi_polygon": collection of polygons
+
+The naming of these classes is used in:
+- WKT (Well-Known Text)
+- KML (Google Maps)
+- GML
+- many GIS/geometry libraries
+
+and in many databases:
+- Oracle Spatial
+- SQL Server 2008
+- PostGreSQL
+- MySQL
+- MonetDB
+
+Besides this the Generic Geometry Library provides the following additional classes:
+- \ref ggl::box "box": Box, used for selections and for envelopes (bounding boxes)
+- \ref ggl::segment "segment": Segment, helper class, used for e.g. intersections
+
+Finally geometry types can be added as extensions. This is e.g. done with an
+"n-sphere" meaning "circle" and "sphere". Circle is convenient for selections.
+
+
+\section Differences
+The Generic Geometry Library does not implement the OGC Simple Feature interface exactly and completely.
+There are many differences. Below the most important differences are listed.
+- In OGC all operations are class methods. The Generic Geometry Library is a template library and defines the algorithms
+as generic functions.
+- In OGC a point is defined by an x-coordinate value, a y-coordinate value and possibly a z-coordinate value
+and a measured value. In the Generic Geometry Library the basic point defines coordinates in a neutral way,
+so there is no x, no y.
+- in OGC all geometries have additional members, such as SRID, measured. These
+properties are not defined in the Generic Geometry Library. Library users can implement them, if necessary,
+in derived classes.
+- In OGC the envelope returns a geometry, in the Generic Geometry Library it returns a box
+- The OGC algorithm asText is named "wkt"
+- Union and intersection are currently named "X_inserter" to indicate that they
+ insert there produced geometries (if any) as an OutputIterator
+
+
+More information on OGC can be found on their website, http://www.opengeospatial.org
+and on Wikipedia http://en.wikipedia.org/wiki/Open_Geospatial_Consortium
+*/
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\page status Status and preview
+
+\section introduction Introduction
+
+The Generic Geometry Library is currently in \b Boost \b Formal \b Review.
+
+The first preview was a template 2D geometry library providing its own geometries and algorithms working on
+those geometries. Those geometries are still provided but not essential anymore.
+
+The second preview didn't asume points with .x() and .y() anymore. It provided strategies,
+operating on specific point types. So point_xy (cartesian points) were
+handled different from point_ll (latlong points). That is still the case (now using a coordinate system meta-function)
+
+The third preview introducted the point concept, library users could use their own points with the algorithms
+provided by the library.
+
+The fourth preview implemented concepts for all geometries. Besides that tag dispatching was
+introduced internally. All algorithms were made generic.
+
+This Formal Review, continues with the design of the fourth preview, making it more consistent
+(apply everywhere, all implementation within struct's, structs used as building blocks for
+multi-implementations, etc). Things were made more conform Boost standards (template parameters,
+no tabs, etc).
+
+\section changes4 Changes since preview 3
+- there are now typedefs for the more common geometries, such as point_2d or ring_ll_deg
+- all geometries are optional, everything is working with concepts
+- the convex hull algorithm has been added and can be calculated for linestrings (ranges, point sequences), polygons
+- map projections (92 !) have been added, they are converted to C++ template classes from PROJ4
+- transformations have been added, to go from one coordinate system to another
+- conversions have been added, to go from one geometry type to another (e.g. BOX to POLYGON)
+- edit functionality have been added, to edit coordinate values or to add points
+- parsing of latitude longitude coordinate values have been added
+- the "selected" algorithm have been added
+- many examples have been added
+- many tests have been added
+
+\b Breaking \b changes
+Because the library was in preview, and it still is, there are some major changes which might influence library user's
+code. Although there are many changes internally, the changes for users should be relatively small:
+- all algorithms accepting linestrings are now modelled to get the linestring itself. In the previous version
+ the .begin(), end() had to be specified, That is now not necessary anymore because the Boost Range Library is used
+ internally, and tag dispatching is used to distinguish geometries internally
+- the "grow" utility is now splitted into buffer (growing a box with a value was in fact a buffer) and a combine.
+- there was a generic "get" function with a const ref and a non const ref. This is splitted into "get" and "set"
+- there might be more changes, please contact if anything is unclear
+
+\section changes5 Changes since preview 4
+There are the following changes:
+- implementation of spatial set relations (intersection, union)
+- implementation of some spatial boolean relations (disjoint, equal, intersects, overlaps)
+- move of GIS-specific code to extension/gis
+- move of map projections to extensions/gis/projections
+- implementation of SVG in extensions/SVG
+- review of all code, conform Boost code guidelines, no tabs, template parameters, etc.
+- other small changes.
+
+\b Breaking \b changes
+- there is now distinction between functions using an output iterator, and functions
+ resulting in modifying geometries. Functions using an output iterator are called _inserter,
+ so convex_hull_inserter inserts points (the hull) into something.
+- many headerfiles are moved and/or renamed
+- ...
+
+
+If people are interested in helping with the library, be it by coding, by testing, by commenting or otherwise, they
+are very welcome.
+
+\section history History
+Geodan started in 1995 with a Geographic Library, called geolib or also GGL (Geodan Geographic Library).
+Since then hundreds of projects have
+been done using this geolib, and the geolib have been extended to fit the needs of its users. Geolib
+can be used in different environments: in Windows applications, as a DLL (ggl32.dll), in
+Web Map Servers (SclMapServer), Web Feature Servers or more specific programs.
+
+In 2007-2009 the Geometry part has been revised and completely templatized.
+From 2008 Bruno Lalande, already a Boost contributor, joined and helped
+to make the library more generic and to define clear concepts.
+It is now called Generic Geometry Library, abbreviated to GGL.
+From 2009 Mateusz Loskot, an active member of Geospatial Open Source communities,
+joined and helped with reviewing code, guidelines, WKB, iterators, and the Wiki and ticket system
+
+The library is now called Generic Geometry Library, abbreviated to GGL.
+The Generic Geometry Library is Open Source and is proposed to the Boost community.
+
+
+*/
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\page download Download the Generic Geometry Library
+
+The library can be downloaded from Boost SVN. There is anonymous SVN access.
+
+The command
+
+<tt>svn co https://svn.boost.org/svn/boost/sandbox/ggl ggl</tt>
+
+will download the library to your machine.
+
+Current \b Formal \b Review version is here:
+https://svn.boost.org/svn/boost/sandbox/ggl/formal_review
+
+
+*/
+
+
+
+
+
+#endif // _DOXYGEN_PAGES_HPP
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_z_article09.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/pages/doxygen_z_article09.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,238 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef _DOXYGEN_ARTICLE2009_HPP
+#define _DOXYGEN_ARTICLE2009_HPP
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\page art09 A Generic Geometry Library (web-copy of article for BoostCon'09)
+
+
+Authors:
+- Barend Gehrels
+- Bruno Lalande
+
+This page is a web-version of the article <b>A Generic Geometry Library</b>, for BoostCon'09.
+
+<i>Note: this article is written December 2008, it is not updated (besides the namespace). There might be some things out of date. But most things are still as described here, be it that the Geographic stuff is moved to an extension.</i>
+
+\section art09_abstract Abstract
+The Generic Geometry Library (GGL) is a library for geometry and geography. It is based on templates and static polymorphism. It is agnostic in coordinate space, coordinate system, and dimensions. The library is non intrusive and uses concepts for geometries for its algorithms. Developers can either use the provided geometries or define or use their own geometry types and specializations. Essential algorithms such as distance calculations, area calculations, point in polygon calculations are available. A geometry library like described would be a valuable addition to the Boost Library Collection.
+
+\section art09_intro Introduction
+The Boost Library Collection currently still does not have any geometry library. In the past years several discussions and previews have been published on the Boost Mailing Lists. There is certainly interest for a library handling geometry within the Boost community; it would be valuable if geometry algorithms are available for the Boost users. Such algorithms are for instance: the distance between two points, the area of a polygon, or determining if a point is in a polygon.
+Geometry is used in many disciplines and there are many approaches possible. Depending on their interest programmers feel other needs. Developers creating games will need other geometries, other algorithms, other dimensions and coordinate representations than developers creating CAD, geographic applications, astronomic or control software for robotics. Besides that, programmers have their personal flavors.
+
+
+It is a major challenge to develop a consistent library containing every aspect of geometry, on which everyone agrees.
+This article describes one attempt of a geometry library. The Generic Geometry Library (GGL) developed and restyled in 2008 has been presented, at the time of writing, as a preview three times. With the feedback from the Boost community the library is enhanced and extended, it has been changed a lot and the library is better than it was before. It is still in preview phase and not yet reviewed nor accepted. There are other candidate libraries for geometry as well. This paper describes the characteristics and basic principles of the Generic Geometry Library.
+The Generic Geometry Library has been initiated by Geodan. Geodan is a company for Geographic Information Systems. Bruno Lalande, who has contributed to Boost libraries before, joined the team of developers.
+
+\section art09_concepts Geometry Concepts
+
+A geometry library should define geometry concepts and should implement algorithms working with those concepts. The library can then handle any geometry type modeled according to the concept.
+The task of selecting geometries and giving them proper names can already be a challenge and a subject for much discussion. The Wikipedia list of geometric shapes contains more than 30 different polygons, furthermore a dozen of triangles, rectangles, squares, kites, trapezoids, circles, ellipses, three dimensional shapes as polyhedrons, spheres. The list is probably never ending.
+The Generic Geometry Library is not attempting to create concepts for all these shapes. Instead, it models four concepts of basic geometries:
+- a point
+- a sequence of points (a linestring)
+- a point sequence which is closed (a (linear) ring)
+- a polygon (an outer ring which can optionally contain inner rings, also called donuts or holes)
+
+With those four concepts, all two dimensional shapes composed of straight line segments (triangles, rectangular and polygonal, etc.) can be built. How to handle curved geometries in two dimensions is not yet worked out. An equivalent system might be used where segments between three points are marked as curved.
+The Generic Geometry Library defines concepts and provides default implementations of these concepts. Besides these predefined types, other types can be handled as well. Any point type that defines the required properties, at compile-time, and thus satisfies the point concept requirements can be used.
+The linear ring and the linestring concepts follow Boost Range Library concepts. Ranges are used to iterate through sequences of points. Therefore algorithms as length or area also work on a std::vector of points. The names of these concepts and of the provided geometries are consistent with the naming system of the OGC, described below. The names are also used for tags related to the tag dispatching mechanism, which is used internally to distinguish geometry types.
+For convenience three other concepts are defined:
+- a box: to be able to select things, for spatial indexing, and to keep track of boundaries of geometries
+- an n-sphere: circle or sphere, to be able to select things
+- a segment: a part of line bounded by two points, to calculate e.g. distances and intersections
+
+Besides defining custom types, library users can make specializations of algorithms for their geometry types and in such way implement support for, for example, triangles. This will be worked out below.
+The Boost Concept Check Library (BCCL) is used internally to check if the developers input follows the concepts expected by the library.
+
+
+
+\section art09_dim Dimensions
+The Generic Geometry Library is basically agnostic in its dimensions. A point is templatized by the number of dimensions, by coordinate type (integer, float, double, GMP), and by the coordinate system.
+Examples:
+- point<double, 2, cartesian>: a point in two dimensions
+- point<double, 3, cartesian>: a point in three dimensions
+- polygon< point<double, 2, spherical<radian> > >: a spherical polygon, measured in radians
+
+Although points of any dimensions can be created, most algorithms are currently not prepared to handle all possible dimensions. Most algorithms that are provided handle points in Cartesian, Geographic or Spherical coordinate systems.
+A template parameter defining how to handle calculations in algorithms using big number types might be added in the future.
+
+
+\section art09_cs Coordinate systems
+A generic library handling geometry should be neutral in its coordinate space. In geography, points can be specified using X and Y (and Z), but also using Latitude and Longitude (and Height). In other disciplines there might be need for other names, for example: red, green and blue (defining colors in a color cube), or right ascension and declination (in astronomy).
+The concepts of the Generic Geometry Library use therefore neutral names (get and set) for accessing and modifying coordinates. Example, setting a point to (3,2):
+\code
+ggl::point<double, 2, cartesian> a;
+ggl::set<0>(a, 3);
+ggl::set<1>(a, 2);
+\endcode
+
+Or, alternatively:
+\code
+ggl::assign(a, 3, 2);
+\endcode
+
+These calls are generic. Library users might also choose to use or define more context targeted methods as a.x() and a.y() for setting and getting coordinates, or non default constructors. This as long as they also provide the specializations needed to enable the library to play with points the way shown above.
+The Generic Geometry Library provides a generic transform algorithm which can transform geometries from one coordinate system to another.
+
+
+\section art09_types Types And Strategies
+
+Algorithms depend on coordinate system. Lets take, for example, the distance calculation between two points. For points in a Cartesian coordinate space the simple and well known Pythagorean theorem applies. For points in the geographic coordinate system (latitude longitude, also known as latlong, lola or ll) the distance can be calculated using the haversine formula (it is possible to select other formulas as well, which is described below).
+The Generic Geometry Library provides a tag dispatching system which selects strategies based on coordinate system. So distances and areas for spherical coordinates are internally calculated differently then distances and areas for Cartesian coordinates. This is, by default, not visible for the library user, it is an automatic tag dispatching system.
+The tag dispatching system is also used to distinguish geometry types internally. So the generic distance algorithm can get two points (in any coordinate system) as input, but also a point and a linestring, a point and a polygon, et cetera.
+
+Example showing different strategies for different coordinate systems:
+\code
+ggl::point_xy<double> a(1,1), b(3,4);
+std::cout << ggl::distance(a, b);
+
+typedef ggl::point_ll<> LL;
+LL A, B;
+// initialize lat-long coordinates
+// e.g., Amsterdam and Barcelona
+// ...
+std::cout << ggl::distance(A, B);
+\endcode
+This example uses two different point types. In the first part the Pythagorean theorem is used to calculate the distance between point a and point b. In the second part the distance along the sphere of earth is used (as the crow flies). Note that the non default constructor shown in the first line is not part of the concept; it is part of the implementation (so part of the example above).
+As described, distance is calculated using strategies for different coordinate systems. The distance algorithm selects automatically right specialization belonging to the geometry type, and then it selects the strategy belonging to the coordinate system. This strategy is then used for calculation.
+Algorithms in the Generic Geometry Library also have an overload where the strategy can be specified by the library user. This is useful for, for example, calculating distance along the earth (or along any sphere). There are several methods for that calculation, using internally either a fast or a precise algorithm. The library user can select such a strategy or can implement his or her own strategy. For example, to use the exact Vincenty geodetic calculation (provided by the library):
+\code
+std::cout << distance(A, B,
+ strategy::distance::vincenty<LL>())
+ << std::endl;
+\endcode
+Algorithms as simplification (removing non important points from point sequences such that shape is preserved) use, internally, distance calculations. The same mechanism is used there. Therefore simplification works for Cartesian polygons the same as for polygons with geographical coordinates. It is exactly the same implementation.
+
+
+\section art09_specializations Specializations
+Besides strategies, library users have also other options for customization. For example: the Generic Geometry Library itself does not support triangles. Instead it supports polygons (which might contain holes) and linear rings. However, if the library user wants to use triangles directly, he can implement his own type. Lets work this example out. A triangle can be represented by three coordinate pairs. The library user can make a triangle of his own points (in this case: custom_point), using e.g. a boost::array.
+\code
+struct triangle : public boost::array<custom_point, 3>
+{};
+\endcode
+The user then has to indicate that this geometry is handled as a linear ring. He therefore has to provide a specialization of the tag metafunction, defining a type for the tag dispatching mechanism. This should reside in the namespace ggl:
+\code
+namespace ggl
+{
+ template <>
+ struct tag<triangle>
+ {
+ typedef ring_tag type;
+ };
+}
+\endcode
+As soon as this is done, the library will automatically select the ring specializations for all triangle algorithms. Because the Generic Geometry Library handles a ring as being a range, the user does not have to provide anything more. The Boost Range library concepts are used internally for all iterations.
+So the area of the users custom-points-triangle will be calculated correctly, using internally an iterator which walks through the point coordinates.
+But wait, for triangle that is not as efficient as possible! No problem, the developer can, if desired, implement a specialization for the area function:
+\code
+template<>
+double area<triangle>(const triangle& t)
+{
+ return 0.5 * (
+ (t[1].x() - t[0].x()) * (t[2].y() - t[0].y())
+ - (t[2].x() - t[0].x()) * (t[1].y() - t[0].y())
+ );
+}
+\endcode
+
+Now this specialization will be used to calculate the area of the developers triangles, while for other algorithms (centroid, within, intersection, et cetera) the generic ring versions still being used.
+The Generic Geometry Library also provides a second way to specialize. Within the dispatch namespace, structs are available for all operations. They can be partially specialized such that, for example, a triangle templatized by point type will be handled correctly by the library.
+
+
+\section art09_conventions Names And Conventions
+
+All geometry types and algorithms are named following the specifications of the Open Geospatial Consortium (OGC). The naming system of the OGC is carefully thought-out and has been agreed upon by a broad community. Additional algorithms and geometry types are named as much as possible using the same conventions and systematics.
+OGC conventions, geometry types and spatial operations are widely used, a.o. in spatial databases, such as PostGreSQL, MySQL, Oracle, and SQL Server.
+The OGC defines the following algorithms:
+- Basic algorithms: dimension, envelope, as_text, as_binary, is_simple, is_empty
+- Query algorithms: equals, disjoint, intersects, touches, crosses, within, contains, overlaps, relate, locate_along, locate_between
+- Analysis algorithms: distance, buffer, convex_hull, intersection, union, difference, sym_difference
+- Geometry type dependant algorithms: area, length, centroid, point_on_surface
+
+All algorithms are planned to be implemented. Besides this there are some other algorithms provided or planned:
+- Simplify, densify, disperse, spline, triangulate
+- Coordinate system conversions: transform
+
+The last one, transform, transforms geometries from any coordinate system to any other coordinate system. For example from radian to degree, but also from spherical to a 3D X,Y,Z coordinate system, or calling a map projection.
+Textual representations of geometries (Well-Known Text or WKT) are also provided by the library, as well as the parsing of them.
+The OGC also defines geometry types containing a collection of geometries, which are planned to be supported:
+- multi_point
+- multi_linestring
+- multi_polygon
+
+The Generic Geometry Library is not OGC compliant in the strict sense. It sometimes deviates from the specifications to enable genericity. It uses Boost Range concepts for the linestring geometry type. The library user can therefore use any standard container or Range compatible type as a linestring (a sequence of points). And the output of intersections is, for example, modeled as an output iterator instead of a multi_polygon or a multi_linestring.
+
+
+\section art09_index Spatial Indexes
+In geometry or GIS, spatial indexes can be used to search geometries or to enhance or speed up determination of geometry relationships. In 2008, a student, within the framework of the Google Summer of Code, has worked out a first version of a spatial indexing library which uses the Generic Geometry Library. This will be worked out and extended in the future.
+The Priority R-Tree, an R-Tree having optimal performance for any query window, will be available for fast searches within a set of geometries.
+
+
+\section art09_proj Map Projections
+
+The Generic Geometry Library can be used as a generic library for Geographic Information Systems (GIS). It therefore contains map projections. Map projections are algorithms to map the spherical earth to a flat piece of paper. There are many ways to do this. The USGS has implemented over the years 92 projection algorithms, collected in an often used PROJ4 package, written in C. This package is recently fitted into the Generic Geometry Library by converting it to a set of C++ templates.
+The projection collection contains both static as dynamic polymorphism. It is possible to instantiate a projection declaring the wished projection itself, for example:
+\code
+typedef ggl::point_ll<double, geographic<> > LL;
+typedef ggl::point_xy<double> XY;
+projection::merc_ellipsoid<LL, XY> prj(
+ "+ellps=WGS84 +lon_0=11.6E");
+
+// Define Amsterdam / Barcelona
+LL amsterdam, barcelona;
+// Initialize A'dam / B'ona
+...
+XY ma, mb; // Declare points
+// and project (from latlong to XY)
+if (prj.forward(amsterdam, ma)
+ && prj.forward(barcelona, mb))
+{ ... }
+\endcode
+
+This will use static polymorphism. Note that the initialization string is conform PROJ4, but it is also possible to initialize projections with e.g. a std::map.
+Static polymorphism is also used if the already mentioned transform algorithm provided by the library is used, a generic algorithm for transforming or projecting geometries:
+
+\code
+// declare type UTM zone 30, Cartesian
+// using EPSG 2040
+typedef ggl::point_xy<double, epsg<2040> > UTM;
+
+// Assign Amsterdam / Barcelona in UTM
+...
+
+// call generic transformation
+ggl::transform (amsterdam, ma);
+ggl::transform (barcelona, mb);
+\endcode
+
+EPSG has defined the accepted standard coding for map projections, worldwide, and an EPSG code can be used as a template parameter in the provided EPSG Cartesian coordinate system.
+Besides specific instantiation, any projection can also be instantiated using a factory:
+
+\code
+projection::factory<LL, XY> fac;
+boost::shared_ptr<projection::projection<LL, XY> > prj(fac.create_new(parameters));
+\endcode
+
+The projection instance can now be any projection, created by the factory according to its parameters (which should contain the name of the projection). The instantiated projection-base-class derived class contains virtual methods for forward and inverse projection, but is still also modeled using template parameters for its point types.
+
+
+\section art09_conclusions Conclusions
+The Generic Geometry Library as described and published in preview is an extensive generic template geometry library containing many algorithms. It can be used for simple algorithms such as distance calculation but it can also be used in larger contexts such as GIS or Web Mapping applications. It is an Open Source library following the Boost Software License. The Boost Community would profit from a geometry library as described in this article.
+
+
+*/
+
+#endif // _DOXYGEN_ARTICLE2009_HPP
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/boost.vsprops
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/boost.vsprops 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="boost"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(BOOST_ROOT)"
+ WarningLevel="3"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories="$(BOOST_ROOT)\lib"
+ />
+ <UserMacro
+ Name="BOOST_ROOT"
+ Value="C:\Program Files\boost\boost_1_39"
+ />
+</VisualStudioPropertySheet>
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_1.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_1.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,464 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Doxygen Examples, referred to from the sources
+
+#include <boost/tuple/tuple.hpp>
+
+#if defined(_MSC_VER)
+// We deliberately mix float/double's here so turn off warning
+#pragma warning( disable : 4244 )
+#endif // defined(_MSC_VER)
+
+#include <ggl/ggl.hpp>
+#include <ggl/geometries/register/point.hpp>
+#include <ggl/geometries/geometries.hpp>
+#include <ggl/geometries/adapted/std_as_linestring.hpp>
+
+#include <ggl/extensions/gis/io/wkt/wkt.hpp>
+
+
+// All functions below are referred to in the source of the Geometry Library.
+// Don't rename them.
+
+void example_area_polygon()
+{
+ ggl::polygon<ggl::point_xy<double> > poly;
+ ggl::read_wkt("POLYGON((0 0,0 7,4 2,2 0,0 0))", poly);
+ std::cout << "Polygon area is "
+ << ggl::area(poly)
+ << " square units" << std::endl;
+
+ // Other coordinate system, spherical or geographic (extension)
+ ggl::polygon<ggl::point<float, 2, ggl::cs::spherical<ggl::degree> > > sph_poly;
+ ggl::read_wkt("POLYGON((0 0,0 45,45 0,0 0))", sph_poly);
+ std::cout << "Area is "
+ << ggl::area(sph_poly)
+ << " on unit sphere " << std::endl;
+}
+
+void example_as_wkt_point()
+{
+ typedef ggl::point_xy<double> P;
+ P p(5.12, 6.34);
+ // Points can be streamed like this:
+ std::cout << ggl::dsv<P>(p) << std::endl;
+
+ // or like this:
+ std::cout << ggl::dsv(p) << std::endl;
+
+ // or (with extension) like this:
+ std::cout << ggl::wkt(p) << std::endl;
+}
+
+void example_as_wkt_vector()
+{
+ std::vector<ggl::point_xy<int> > v;
+ ggl::read_wkt<ggl::point_xy<int> >("linestring(1 1,2 2,3 3,4 4)", std::back_inserter(v));
+
+ std::cout << ggl::dsv(std::make_pair(v.begin(), v.end())) << std::endl;
+}
+
+
+void example_centroid_polygon()
+{
+ ggl::polygon<ggl::point_xy<double> > poly;
+ ggl::read_wkt("POLYGON((0 0,0 7,4 2,2 0,0 0))", poly);
+ // Center of polygon might have different type than points of polygon
+ ggl::point_xy<float> center;
+ ggl::centroid(poly, center);
+ std::cout << "Centroid: " << ggl::dsv(center) << std::endl;
+}
+
+
+void example_distance_point_point()
+{
+ ggl::point_xy<double> p1(1, 1);
+ ggl::point_xy<double> p2(2, 3);
+ std::cout << "Distance p1-p2 is "
+ << ggl::distance(p1, p2)
+ << " units" << std::endl;
+
+ /*
+ Extension, other coordinate system:
+ // Read 2 Dutch cities from WKT texts (in decimal degrees)
+ ggl::point_ll<double, ggl::cs::geographic<ggl::degree> > a, r;
+ ggl::read_wkt("POINT(4.89222 52.3731)", a);
+ ggl::read_wkt("POINT(4.47917 51.9308)", r);
+
+ std::cout << "Distance Amsterdam-Rotterdam is "
+ << ggl::distance(a, r) / 1000.0
+ << " kilometers " << std::endl;
+ */
+}
+
+void example_distance_point_point_strategy()
+{
+ /*
+ Extension, other coordinate system:
+ typedef ggl::point_ll<double, ggl::cs::geographic<ggl::degree> > LL;
+ LL a, r;
+ ggl::read_wkt("POINT(4.89222 52.3731)", a);
+ ggl::read_wkt("POINT(4.47917 51.9308)", r);
+
+ std::cout << "Distance Amsterdam-Rotterdam is "
+ << ggl::distance(a, r,
+ ggl::strategy::distance::vincenty<LL>() )
+ / 1000.0
+ << " kilometers " << std::endl;
+ */
+}
+
+void example_from_wkt_point()
+{
+ ggl::point_xy<int> point;
+ ggl::read_wkt("Point(1 2)", point);
+ std::cout << point.x() << "," << point.y() << std::endl;
+}
+
+void example_from_wkt_output_iterator()
+{
+ std::vector<ggl::point_xy<int> > v;
+ ggl::read_wkt<ggl::point_xy<int> >("linestring(1 1,2 2,3 3,4 4)", std::back_inserter(v));
+ std::cout << "vector has " << v.size() << " coordinates" << std::endl;
+}
+
+void example_from_wkt_linestring()
+{
+ ggl::linestring<ggl::point_xy<double> > line;
+ ggl::read_wkt("linestring(1 1,2 2,3 3,4 4)", line);
+ std::cout << "linestring has " << line.size() << " coordinates" << std::endl;
+}
+
+void example_from_wkt_polygon()
+{
+ ggl::polygon<ggl::point_xy<double> > poly;
+ ggl::read_wkt("POLYGON((0 0,0 1,1 1,1 0,0 0))", poly);
+ std::cout << "Polygon has " << poly.outer().size() << " coordinates in outer ring" << std::endl;
+}
+
+void example_point_ll_convert()
+{
+ /*
+ Extension, other coordinate system:
+ ggl::point_ll<double, ggl::cs::geographic<ggl::degree> > deg(ggl::latitude<>(33.0), ggl::longitude<>(-118.0));
+ ggl::point_ll<double, ggl::cs::geographic<ggl::radian> > rad;
+ ggl::transform(deg, rad);
+
+ std::cout << "point in radians: " << rad << std::endl;
+ */
+}
+
+void example_clip_linestring1()
+{
+ typedef ggl::point_xy<double> P;
+ ggl::linestring<P> line;
+ ggl::read_wkt("linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)", line);
+ ggl::box<P> cb(P(1.5, 1.5), P(4.5, 2.5));
+ std::cout << "Clipped linestring(s) " << std::endl;
+
+ std::vector<ggl::linestring<P> > intersection;
+ ggl::intersection_inserter<ggl::linestring<P> >(cb, line, std::back_inserter(intersection));
+}
+
+void example_clip_linestring2()
+{
+ typedef ggl::point_xy<double> P;
+ std::vector<P> vector_in;
+ ggl::read_wkt<P>("linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)",
+ std::back_inserter(vector_in));
+
+ ggl::box<P> cb(P(1.5, 1.5), P(4.5, 2.5));
+ typedef std::vector<std::vector<P> > VV;
+ VV vector_out;
+ ggl::intersection_inserter<std::vector<P> >(cb, vector_in, std::back_inserter(vector_out));
+
+ std::cout << "Clipped vector(s) " << std::endl;
+ for (VV::const_iterator it = vector_out.begin(); it != vector_out.end(); it++)
+ {
+ std::copy(it->begin(), it->end(), std::ostream_iterator<P>(std::cout, " "));
+ std::cout << std::endl;
+ }
+}
+
+
+
+
+
+void example_intersection_polygon1()
+{
+ typedef ggl::point_xy<double> P;
+ typedef std::vector<ggl::polygon<P> > PV;
+
+ ggl::box<P> cb(P(1.5, 1.5), P(4.5, 2.5));
+ ggl::polygon<P> poly;
+ ggl::read_wkt("POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"
+ ",(4 2,4.2 1.4,4.8 1.9,4.4 2.2,4 2))", poly);
+
+ PV v;
+ ggl::intersection_inserter<ggl::polygon<P> >(cb, poly, std::back_inserter(v));
+
+ std::cout << "Clipped polygon(s) " << std::endl;
+ for (PV::const_iterator it = v.begin(); it != v.end(); it++)
+ {
+ std::cout << ggl::dsv(*it) << std::endl;
+ }
+}
+
+void example_simplify_linestring1()
+{
+ ggl::linestring<ggl::point_xy<double> > line, simplified;
+ ggl::read_wkt("linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)", line);
+ ggl::simplify(line, simplified, 0.5);
+ std::cout
+ << " original line: " << ggl::dsv(line) << std::endl
+ << "simplified line: " << ggl::dsv(simplified) << std::endl;
+}
+
+void example_simplify_linestring2()
+{
+ typedef ggl::point_xy<double> P;
+ typedef ggl::linestring<P> L;
+ L line;
+
+ ggl::read_wkt("linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)", line);
+
+ typedef ggl::strategy::distance::xy_point_segment<P, P> DS;
+ typedef ggl::strategy::simplify::douglas_peucker<P, DS> simplification;
+ ggl::simplify_inserter(line, std::ostream_iterator<P>(std::cout, "\n"), 0.5, simplification());
+}
+
+
+
+void example_within()
+{
+ ggl::polygon<ggl::point_xy<double> > poly;
+ ggl::read_wkt("POLYGON((0 0,0 7,4 2,2 0,0 0))", poly);
+ ggl::point_xy<float> point(3, 3);
+ std::cout << "Point is "
+ << (ggl::within(point, poly) ? "IN" : "NOT in")
+ << " polygon"
+ << std::endl;
+}
+
+/*
+void example_within_strategy()
+{
+ // TO BE UPDATED/FINISHED
+ typedef ggl::point_xy<double> P;
+ typedef ggl::polygon<P> POLY;
+ P p;
+ std::cout << within(p, poly, strategy::within::cross_count<P>) << std::endl;
+}
+*/
+
+void example_length_linestring()
+{
+ using namespace ggl;
+ linestring<point_xy<double> > line;
+ read_wkt("linestring(0 0,1 1,4 8,3 2)", line);
+ std::cout << "linestring length is "
+ << length(line)
+ << " units" << std::endl;
+
+ /*
+ Extension, other coordinate system:
+ // Linestring in latlong, filled with
+ // explicit degree-minute-second values
+ typedef point_ll<float, ggl::cs::geographic<ggl::degree> > LL;
+ linestring<LL> line_ll;
+ line_ll.push_back(LL(
+ latitude<float>(dms<north, float>(52, 22, 23)),
+ longitude<float>(dms<east, float>(4, 53, 32))));
+ line_ll.push_back(LL(
+ latitude<float>(dms<north, float>(51, 55, 51)),
+ longitude<float>(dms<east, float>(4, 28, 45))));
+ line_ll.push_back(LL(
+ latitude<float>(dms<north, float>(52, 4, 48)),
+ longitude<float>(dms<east, float>(4, 18, 0))));
+ std::cout << "linestring length is "
+ << length(line_ll) / 1000
+ << " kilometers " << std::endl;
+ */
+}
+
+void example_length_linestring_iterators1()
+{
+ ggl::linestring<ggl::point_xy<double> > line;
+ ggl::read_wkt("linestring(0 0,1 1,4 8,3 2)", line);
+ std::cout << "linestring length is "
+ << ggl::length(line)
+ << " units" << std::endl;
+}
+
+void example_length_linestring_iterators2()
+{
+ std::vector<ggl::point_xy<double> > line;
+ ggl::read_wkt<ggl::point_xy<double> >("linestring(0 0,1 1,4 8,3 2)", std::back_inserter(line));
+ std::cout << "linestring length is "
+ << ggl::length(line)
+ << " units" << std::endl;
+}
+
+void example_length_linestring_iterators3()
+{
+ /*
+ Extension, other coordinate system:
+ using namespace ggl;
+ typedef point_ll<float, ggl::cs::geographic<ggl::degree> > LL;
+ std::deque<LL> line;
+ ggl::read_wkt<LL>("linestring(0 51,1 51,2 52)", std::back_inserter(line));
+ std::cout << "linestring length is "
+ << 0.001 * ggl::length(line, ggl::strategy::distance::vincenty<LL>())
+ << " kilometers" << std::endl;
+ */
+}
+
+
+void example_length_linestring_strategy()
+{
+ /*
+ Extension, other coordinate system:
+ using namespace ggl;
+ typedef point_ll<float, ggl::cs::geographic<ggl::degree> > LL;
+ linestring<LL> line_ll;
+ line_ll.push_back(LL(latitude<float>(dms<north, float>(52, 22, 23)), longitude<float>(dms<east, float>(4, 53, 32))));
+ line_ll.push_back(LL(latitude<float>(dms<north, float>(51, 55, 51)), longitude<float>(dms<east, float>(4, 28, 45))));
+ line_ll.push_back(LL(latitude<float>(dms<north, float>(52, 4, 48)), longitude<float>(dms<east, float>(4, 18, 0))));
+ std::cout << "linestring length is "
+ << length(line_ll, strategy::distance::vincenty<LL, LL>() )/(1000)
+ << " kilometers " << std::endl;
+ */
+}
+
+
+void example_envelope_linestring()
+{
+ ggl::linestring<ggl::point_xy<double> > line;
+ ggl::read_wkt("linestring(0 0,1 1,4 8,3 2)", line);
+ ggl::box<ggl::point_xy<double> > box;
+ ggl::envelope(line, box);
+
+ std::cout << "envelope is " << ggl::dsv(box) << std::endl;
+}
+
+void example_envelope_polygon()
+{
+ /*
+ Extension, other coordinate system:
+ using namespace ggl;
+ typedef point_ll<double, ggl::cs::geographic<ggl::degree> > LL;
+
+ // Wrangel island, 180 meridian crossing island above Siberia.
+ polygon<LL> wrangel;
+ wrangel.outer().push_back(LL(latitude<>(dms<north>(70, 47, 7)), longitude<>(dms<west>(178, 47, 9))));
+ wrangel.outer().push_back(LL(latitude<>(dms<north>(71, 14, 0)), longitude<>(dms<east>(177, 28, 33))));
+ wrangel.outer().push_back(LL(latitude<>(dms<north>(71, 34, 24)), longitude<>(dms<east>(179, 44, 37))));
+ // Close it
+ wrangel.outer().push_back(wrangel.outer().front());
+
+ ggl::box<LL> box;
+ ggl::envelope(wrangel, box);
+
+ dms<cd_lat> minlat(box.min_corner().lat());
+ dms<cd_lon> minlon(box.min_corner().lon());
+
+ dms<cd_lat> maxlat(box.max_corner().lat());
+ dms<cd_lon> maxlon(box.max_corner().lon());
+
+ std::cout << wrangel << std::endl;
+ std::cout << "min: " << minlat.get_dms() << " , " << minlon.get_dms() << std::endl;
+ std::cout << "max: " << maxlat.get_dms() << " , " << maxlon.get_dms() << std::endl;
+ */
+}
+
+
+void example_dms()
+{
+ /*
+ Extension, other coordinate system:
+ // Construction with degree/minute/seconds
+ ggl::dms<ggl::east> d1(4, 53, 32.5);
+
+ // Explicit conversion to double.
+ std::cout << d1.as_value() << std::endl;
+
+ // Conversion to string, with optional strings
+ std::cout << d1.get_dms(" deg ", " min ", " sec") << std::endl;
+
+ // Combination with latitude/longitude and cardinal directions
+ {
+ using namespace ggl;
+ point_ll<double, ggl::cs::geographic<ggl::degree> > canberra(
+ latitude<>(dms<south>(35, 18, 27)),
+ longitude<>(dms<east>(149, 7, 27.9)));
+ std::cout << canberra << std::endl;
+ }
+ */
+}
+
+void example_point_ll_construct()
+{
+ /*
+ Extension, other coordinate system:
+ using namespace ggl;
+ typedef point_ll<double, ggl::cs::geographic<ggl::degree> > ll;
+
+ // Constructions in both orders possible
+ ll juneau(
+ latitude<>(dms<north>(58, 21, 5)),
+ longitude<>(dms<west>(134, 30, 42)));
+ ll wladiwostok(
+ longitude<>(dms<east>(131, 54)),
+ latitude<>(dms<north>(43, 8))
+ );
+ */
+}
+
+
+
+int main(void)
+{
+ example_area_polygon();
+
+ example_centroid_polygon();
+
+ example_distance_point_point();
+ example_distance_point_point_strategy();
+
+ example_from_wkt_point();
+ example_from_wkt_output_iterator();
+ example_from_wkt_linestring();
+ example_from_wkt_polygon();
+
+ example_as_wkt_point();
+
+ example_clip_linestring1();
+ example_clip_linestring2();
+ example_intersection_polygon1();
+
+ example_simplify_linestring1();
+ example_simplify_linestring2();
+
+ example_length_linestring();
+ example_length_linestring_iterators1();
+ example_length_linestring_iterators2();
+ example_length_linestring_iterators3();
+ example_length_linestring_strategy();
+
+ example_envelope_linestring();
+ example_envelope_polygon();
+
+ example_within();
+
+ example_point_ll_convert();
+ example_point_ll_construct();
+ example_dms();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_1.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_1.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="doxygen_1"
+ ProjectGUID="{861F130D-2849-4B50-B240-049DBD9D3F18}"
+ RootNamespace="doxygen_1"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_1"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../boost"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="cd ../doc
doxygen
"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_1"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../boost"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="cd ../doc
doxygen
"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Doxygen Files"
+ >
+ <File
+ RelativePath="../pages/doxygen_mainpage.hpp"
+ >
+ </File>
+ <File
+ RelativePath="../pages/doxygen_pages.hpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\doxygen_1.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_2.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_2.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,158 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Doxygen Examples, for main page
+
+#include <boost/tuple/tuple.hpp>
+
+#if defined(_MSC_VER)
+// We deliberately mix float/double's here so turn off warning
+//#pragma warning( disable : 4244 )
+#endif // defined(_MSC_VER)
+
+#include <ggl/ggl.hpp>
+#include <ggl/algorithms/overlaps.hpp>
+#include <ggl/geometries/geometries.hpp>
+#include <ggl/geometries/cartesian2d.hpp>
+#include <ggl/geometries/register/point.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/std_as_linestring.hpp>
+
+
+// Small QRect simulations following http://doc.trolltech.com/4.4/qrect.html
+// Todo: once work the traits out further, would be nice if there is a real example of this.
+// However for the example it makes no difference, it will work any way.
+struct QPoint
+{
+ int x, y;
+ // In Qt these are methods but for example below it makes no difference
+};
+
+struct QRect
+{
+ int x, y, width, height;
+ QRect(int _x, int _y, int w, int h)
+ : x(_x), y(_y), width(w), height(h)
+ {}
+ // In Qt these are methods but that will work as well, requires changing traits below
+};
+
+
+// Would be get/set with x(),y(),setX(),setY()
+GEOMETRY_REGISTER_POINT_2D(QPoint, int, cs::cartesian, x, y)
+
+
+// Register the QT rectangle. The macro(s) does not offer (yet) enough flexibility to do this in one line,
+// but the traits classes do their job perfectly.
+namespace ggl
+{
+ namespace traits
+ {
+
+ template <> struct tag<QRect> { typedef box_tag type; };
+ template <> struct point_type<QRect> { typedef QPoint type; };
+
+ template <size_t C, size_t D>
+ struct indexed_access<QRect, C, D>
+ {
+ static inline int get(const QRect& qr)
+ {
+ // Would be: x(), y(), width(), height()
+ return C == min_corner && D == 0 ? qr.x
+ : C == min_corner && D == 1 ? qr.y
+ : C == max_corner && D == 0 ? qr.x + qr.width
+ : C == max_corner && D == 1 ? qr.y + qr.height
+ : 0;
+ }
+
+ static inline void set(QRect& qr, const int& value)
+ {
+ // Would be: setX, setY, setWidth, setHeight
+ if (C == min_corner && D == 0) qr.x = value;
+ else if (C == min_corner && D == 1) qr.y = value;
+ else if (C == max_corner && D == 0) qr.width = value - qr.x;
+ else if (C == max_corner && D == 1) qr.height = value - qr.y;
+ }
+ };
+
+ }
+}
+
+
+void example_for_main_page()
+{
+ using namespace ggl;
+
+ int a[2] = {1,1};
+ int b[2] = {2,3};
+ double d = distance(a, b);
+ std::cout << "Distance a-b is:" << d << std::endl;
+
+ ring_2d poly;
+ double points[][2] = {{2.0, 1.3}, {4.1, 3.0}, {5.3, 2.6}, {2.9, 0.7}, {2.0, 1.3}};
+ append(poly, points);
+ boost::tuple<double, double> p = boost::make_tuple(3.7, 2.0);
+ std::cout << "Point p is in polygon? " << (within(p, poly) ? "YES" : "NO") << std::endl;
+
+ std::cout << "Area: " << area(poly) << std::endl;
+
+ double d2 = distance(a, p);
+ std::cout << "Distance a-p is:" << d2 << std::endl;
+
+ /***
+ Now extension
+ point_ll_deg amsterdam, paris;
+ parse(amsterdam, "52 22 23 N", "4 53 32 E");
+ parse(paris, "48 52 0 N", "2 19 59 E");
+ std::cout << "Distance A'dam-Paris: " << distance(amsterdam, paris) / 1000.0 << " kilometers " << std::endl;
+ ***/
+
+ QRect r1(100, 200, 15, 15);
+ QRect r2(110, 210, 20, 20);
+ if (overlaps(r1, r2))
+ {
+ assign(r2, 200, 300, 220, 320);
+ }
+}
+
+
+void example_for_transform()
+{
+ using namespace ggl;
+
+ typedef point<double, 3, cs::cartesian> XYZ;
+ typedef point<double, 3, cs::spherical<degree> > SPH;
+ XYZ p;
+
+ SPH sph1, sph2;
+ assign(sph1, 12.5, 41.90, 1.0);
+ // Go from spherical to Cartesian-3D:
+ transform(sph1, p);
+ // Go back from Cartesian 3D to spherical:
+ transform(p, sph2);
+
+ std::cout << dsv(p) << " <-> " << dsv(sph2) << std::endl;
+
+ typedef point_xy<double> XY;
+ typedef point_xy<int> PIXEL;
+ XY xy(50, 50);
+ strategy::transform::map_transformer<XY, PIXEL, false> map(0, 0, 100, 100, 1024, 768);
+ PIXEL pix;
+ transform(xy, pix, map);
+ std::cout << pix.x() << "," << pix.y() << std::endl;
+
+}
+
+
+int main(void)
+{
+ example_for_main_page();
+ example_for_transform();
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_2.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_2.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="doxygen_2"
+ ProjectGUID="{6CF6A521-57E0-4DA4-9D17-ED5D29E4208C}"
+ RootNamespace="doxygen_2"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_2"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../boost"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_2"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../boost"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine=""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\doxygen_2.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_3.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_3.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,57 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Doxygen Examples, for email formal review
+
+#include <ggl/ggl.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/std_as_linestring.hpp>
+
+
+
+void example_distance()
+{
+ int a[2] = {1,2};
+ int b[2] = {3,4};
+ double d = ggl::distance(a, b);
+ std::cout << d << std::endl;
+}
+
+void example_length1()
+{
+ std::vector<boost::tuple<double, double, double> > line;
+ line.push_back(boost::make_tuple(1, 2, 3));
+ line.push_back(boost::make_tuple(4, 5, 6));
+ line.push_back(boost::make_tuple(7, 8, 9));
+ double length = ggl::length(line);
+ std::cout << length << std::endl;
+}
+
+void example_length2()
+{
+ std::vector<boost::tuple<double, double> > line;
+ line.push_back(boost::make_tuple(1.1, 2.2));
+ line.push_back(boost::make_tuple(3.3, 4.4));
+ line.push_back(boost::make_tuple(5.5, 6.6));
+ std::cout << ggl::length(
+ std::make_pair(boost::begin(line), boost::end(line) + -1)
+ )
+ << std::endl;
+}
+
+
+
+
+int main(void)
+{
+ example_distance();
+ example_length1();
+ example_length2();
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_3.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_3.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="doxygen_3"
+ ProjectGUID="{45D4139F-BC5B-4D48-BAB8-9901C53ECCC9}"
+ RootNamespace="doxygen_3"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_3"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../boost"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_3"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../boost"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine=""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\doxygen_3.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_4.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_4.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,326 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Doxygen Examples, for documentation images
+
+#include <fstream>
+
+#include <ggl/ggl.hpp>
+
+#include <ggl/multi/multi.hpp>
+
+#include <ggl/extensions/gis/io/wkt/wkt.hpp>
+#include <ggl/extensions/io/svg/write_svg_multi.hpp>
+
+#include <test_util/svg_mapper.hpp>
+
+
+static const int wkt_countries_count = 1;
+std::string wkt_countries[wkt_countries_count] = {
+ "MULTIPOLYGON(((3.369472 51.37461,3.31712 51.33633,3.338228 51.27769,3.476597 51.23314,3.474252 51.2988,3.553989 51.3246,3.720502 51.27535,3.753336 51.2261,3.887015 51.21203,3.983169 51.25659,4.123883 51.28942,4.222384 51.33163,4.311502 51.38792,4.442835 51.35274,4.38655 51.46297,4.541337 51.4747,4.517883 51.40903,4.67267 51.42075,4.759444 51.48642,4.848564 51.48642,4.771171 51.3973,4.968171 51.3973,5.022111 51.48642,5.099504 51.44186,5.06667 51.36447,5.132337 51.26597,5.20973 51.33163,5.219111 51.22141,5.448946 51.26597,5.514612 51.31991,5.592005 51.27769,5.570898 51.21203,5.711612 51.18858,5.800732 51.16747,5.878123 51.13464,5.800732 51.05724,5.767898 50.93763,5.645946 50.86024,5.678778 50.76174,5.821838 50.76174,6.025336 50.75425,6.403867 50.32674,6.13802 50.1329,5.73455 49.89968,5.816617 49.54663,5.477649 49.49361,4.856486 49.79186,4.877701 50.15532,4.148557 49.97853,4.206795 50.27324,3.694881 50.31094,3.139944 50.79072,2.795442 50.72651,2.546947 51.09281,3.369472 51.37461)))"
+ //"MULTIPOLYGON(((4.222384 51.33163,4.201276 51.38792,4.13561 51.36447,4.025384 51.40903,4.016003 51.48642,4.091051 51.43013,4.213003 51.42075,4.288051 51.46297,4.234109 51.4958,4.048835 51.52864,3.971442 51.58492,4.058217 51.58492,4.156717 51.58492,4.156717 51.65059,4.255217 51.61776,4.344337 51.63886,4.419384 51.6717,4.574171 51.68342,4.705504 51.70453,4.81573 51.72564,4.750063 51.73736,4.541337 51.71626,4.353717 51.72564,4.255217 51.75847,4.069943 51.83586,3.99255 51.95547,4.180169 52.04459,4.365444 52.18765,4.550717 52.45031,4.67267 52.71298,4.738337 52.94281,4.804003 52.94281,4.881396 52.86542,4.968171 52.89826,5.054944 52.90998,5.111231 52.84431,5.111231 52.77161,5.162826 52.73643,5.228492 52.74582,5.287123 52.74112,5.287123 52.69188,5.233183 52.64497,5.125301 52.61683,5.071361 52.64262,5.015075 52.61214,5.080742 52.49018,5.01742 52.44328,5.080742 52.42921,4.956444 52.35885,5.031492 52.33071,5.120612 52.31898,5.183933 52.30257,5.244909 52.30491,5.341063 52.26739,5.399694 52.23924,5.523993 52.25566
,5.566207 52.3096,5.676433 52.36354,5.793696 52.41279,5.861708 52.47611,5.859363 52.53709,5.796041 52.57227,5.849981 52.59806,5.645946 52.60979,5.58966 52.64262,5.592005 52.75989,5.6436 52.80914,5.716303 52.8279,5.645946 52.84431,5.561516 52.82555,5.484123 52.84197,5.413766 52.83025,5.348099 52.87715,5.404385 52.89826,5.40673 52.9991,5.383279 53.07415,5.448946 53.21721,5.580279 53.30398,5.845291 53.36965,5.976624 53.38138,6.140792 53.39076,6.183005 53.32509,6.206459 53.39076,6.370625 53.40248,6.764627 53.47988,6.851399 53.40248,6.928792 53.33682,7.048399 53.28288,7.158627 53.25004,7.179733 53.17265,7.137519 53.12809,7.179733 52.98738,7.048399 52.87715,7.060126 52.62386,6.973351 52.63559,6.698958 52.64732,6.720066 52.56992,6.675507 52.52536,6.7529 52.47142,6.872507 52.42686,6.994459 52.48315,7.060126 52.38465,7.015567 52.29553,7.060126 52.25331,6.884233 52.13136,6.731792 52.09853,6.687233 52.02114,6.80684 52.01176,6.851399 51.94609,6.797459 51.90153,6.666125 51.90153,6.424565 51.83586,6.281507 51.85697,6.1407
92 51.90153,6.150171 51.83586,5.953171 51.83586,5.953171 51.74909,6.018838 51.70453,6.117339 51.6928,6.107958 51.61776,6.227565 51.51925,6.239291 51.42075,6.194732 51.34336,6.084505 51.25424,6.096231 51.1792,6.173625 51.21203,6.194732 51.14636,5.986005 51.03613,5.943792 51.08069,5.878123 51.03613,5.899231 50.97047,6.030564 50.97047,6.030564 50.9048,6.107958 50.9048,6.096231 50.83913,6.030564 50.82741,6.025336 50.75425,5.821838 50.76174,5.678778 50.76174,5.645946 50.86024,5.767898 50.93763,5.800732 51.05724,5.878123 51.13464,5.800732 51.16747,5.711612 51.18858,5.570898 51.21203,5.592005 51.27769,5.514612 51.31991,5.448946 51.26597,5.219111 51.22141,5.20973 51.33163,5.132337 51.26597,5.06667 51.36447,5.099504 51.44186,5.022111 51.48642,4.968171 51.3973,4.771171 51.3973,4.848564 51.48642,4.759444 51.48642,4.67267 51.42075,4.517883 51.40903,4.541337 51.4747,4.38655 51.46297,4.442835 51.35274,4.311502 51.38792,4.222384 51.33163)),((5.455981 52.55116,5.514612 52.5582,5.573243 52.59103,5.634219 52.59103,5.73272 52.
57462,5.791351 52.56758,5.854672 52.52771,5.8406 52.46908,5.756171 52.41279,5.674088 52.39403,5.573243 52.37058,5.540409 52.31664,5.507576 52.26504,5.397349 52.25097,5.294159 52.30725,5.198003 52.33305,5.134682 52.32836,5.153444 52.39403,5.411421 52.49488,5.455981 52.55116)),((4.222384 51.33163,4.123883 51.28942,3.983169 51.25659,3.887015 51.21203,3.753336 51.2261,3.720502 51.27535,3.553989 51.3246,3.474252 51.2988,3.476597 51.23314,3.338228 51.27769,3.31712 51.33633,3.369472 51.37461,3.467216 51.41137,3.600895 51.37854,3.718157 51.34336,3.840109 51.34805,3.924538 51.36447,3.952681 51.41607,4.011312 51.39496,4.072289 51.35509,4.128574 51.32225,4.222384 51.33163)),((3.40155 51.54036,3.500049 51.58258,3.56337 51.59665,3.619656 51.57554,3.659526 51.5216,3.720502 51.51456,3.781478 51.54036,3.887015 51.54271,3.971442 51.52864,4.016003 51.50753,3.999586 51.43717,3.9433 51.46062,3.879979 51.44186,3.854181 51.38792,3.753336 51.39027,3.65249 51.46062,3.556334 51.44421,3.483632 51.48173,3.429692 51.51456,3.40155 51.54
036)),((3.973788 51.84524,4.037109 51.81241,4.123883 51.7913,4.196586 51.76081,4.269289 51.71391,4.360754 51.69515,4.313848 51.65293,4.248181 51.65293,4.177824 51.67873,4.119193 51.69984,4.044145 51.71391,4.023039 51.7913,3.933919 51.80537,3.870598 51.77958,3.847145 51.83821,3.973788 51.84524)),((3.793204 51.74674,3.933919 51.73502,3.985514 51.68577,4.076979 51.667,4.116848 51.65293,4.023039 51.62714,3.931574 51.6201,3.865907 51.6459,3.826037 51.6928,3.76037 51.69984,3.692358 51.66935,3.647799 51.70922,3.713466 51.73502,3.793204 51.74674)),((4.806348 53.12574,4.879051 53.175,4.92361 53.13278,4.91423 53.0718,4.86967 53.0249,4.801658 52.99676,4.747718 52.97096,4.72192 53.0249,4.754754 53.0765,4.806348 53.12574)),((5.216766 53.39545,5.507576 53.4447,5.559171 53.43766,5.493505 53.41655,5.460672 53.39545,5.387969 53.3931,5.336373 53.37669,5.240219 53.36027,5.183933 53.33682,5.165171 53.36027,5.216766 53.39545)),((3.596204 51.60134,3.720502 51.60134,3.840109 51.61306,3.877634 51.55443,3.774442 51.56147,3.718157 51
.52864,3.645454 51.56147,3.596204 51.60134)),((5.636564 53.46346,5.728029 53.44939,5.852327 53.46112,5.941446 53.45877,5.88985 53.44001,5.800732 53.43063,5.716303 53.43063,5.674088 53.41421,5.622492 53.42828,5.60373 53.45408,5.636564 53.46346)),((5.008039 53.28757,5.050254 53.30398,5.094813 53.31102,5.120612 53.28991,5.001003 53.2688,4.982243 53.24066,4.932992 53.20548,4.862634 53.19845,4.890778 53.22659,4.970516 53.2688,5.008039 53.28757)),((6.138446 53.49395,6.27447 53.50567,6.307303 53.49629,6.236946 53.46815,6.154862 53.46581,6.12672 53.44939,6.100922 53.46581,6.138446 53.49395)),((6.419876 53.54085,6.483197 53.51974,6.42691 53.51506,6.396423 53.53382,6.419876 53.54085)))",
+};
+
+static const int wkt_cities_count = 1;
+std::string wkt_cities[wkt_cities_count] = {
+ "MULTIPOINT(( -71.03 42.37), (-87.65 41.90), (-95.35 29.97), (-118.40 33.93), (-80.28 25.82), (-73.98 40.77), (-112.02 33.43), ( -77.04 38.85))"
+};
+
+
+
+// Read an ASCII file containing WKT's, fill a vector of tuples
+// The tuples consist of at least <0> a geometry and <1> an identifying string
+template <typename Geometry, typename Tuple, typename Box>
+void read_wkt(std::string const& filename, std::vector<Tuple>& tuples, Box& box)
+{
+ std::ifstream cpp_file(filename.c_str());
+ if (cpp_file.is_open())
+ {
+ while (! cpp_file.eof() )
+ {
+ std::string line;
+ std::getline(cpp_file, line);
+ Geometry geometry;
+ boost::trim(line);
+ if (! line.empty() && ! boost::starts_with(line, "#"))
+ {
+ std::string name;
+
+ // Split at ';', if any
+ std::string::size_type pos = line.find(";");
+ if (pos != std::string::npos)
+ {
+ name = line.substr(pos + 1);
+ line.erase(pos);
+
+ boost::trim(line);
+ boost::trim(name);
+ }
+
+ Geometry geometry;
+ ggl::read_wkt(line, geometry);
+
+ Tuple tuple(geometry, name);
+
+ tuples.push_back(tuple);
+ ggl::combine(box, ggl::make_envelope<Box>(geometry));
+ }
+ }
+ }
+}
+
+
+
+
+void svg_simplify_road()
+{
+ static const int n = 1;
+ std::string wkt[n] = {
+ "LINESTRING(-122.191 47.9758,-122.181 47.9958,-122.177 48.0022,-122.171 48.0081,-122.174 48.0402,-122.178 48.0718,-122.181 48.1036,-122.183 48.1361,-122.189 48.143,-122.206 48.205,-122.231 48.2515,-122.261 48.2977,-122.291 48.3592,-122.297 48.4234,-122.299 48.5183,-122.324 48.6237,-122.41 48.7339,-122.407 48.7538,-122.4 48.7749,-122.399 48.793,-122.423 48.8044,-122.45 48.8124,-122.481 48.8304,-122.517 48.8718,-122.521 48.8813,-122.523 48.901,-122.527 48.9105,-122.543 48.919,-122.551 48.9305,-122.561 48.9411,-122.585 48.9471,-122.612 48.9669,-122.638 48.9849,-122.661 49.0022)",
+ //"LINESTRING(-122.191 47.9758,-122.204 47.9372,-122.221 47.9019,-122.242 47.8674,-122.266 47.8312)",
+ //"LINESTRING(-122.176 47.5801,-122.182 47.5932,-122.185 47.6067,-122.187 47.6202,-122.187 47.6338,-122.187 47.6691,-122.182 47.7052,-122.181 47.7412,-122.192 47.776,-122.2 47.7864,-122.212 47.7945,-122.223 47.8027,-122.232 47.8132,-122.241 47.8168,-122.25 47.821,-122.259 47.8258,-122.266 47.8312)",
+ //"LINESTRING(-122.193 47.5075,-122.192 47.5108,-122.192 47.5147,-122.192 47.5184,-122.192 47.5224,-122.192 47.5265,-122.192 47.5307,-122.192 47.5327,-122.191 47.5348,-122.19 47.5395,-122.189 47.5443,-122.188 47.549,-122.187 47.5538,-122.185 47.5584,-122.183 47.5609,-122.182 47.563,-122.18 47.5667,-122.179 47.5676,-122.178 47.5711,-122.177 47.5726,-122.177 47.5742,-122.177 47.5762,-122.176 47.5781,-122.176 47.5801)"
+ };
+
+ typedef ggl::point_xy<double> point_type;
+
+ std::ofstream svg("simplify_road.svg");
+ svg_mapper<point_type> mapper(svg, 300, 300);
+
+ ggl::linestring<point_type> original[n], simplified[n];
+
+ for (int i = 0; i < n; i++)
+ {
+ ggl::read_wkt(wkt[i], original[i]);
+ ggl::simplify(original[i], simplified[i], 0.03);
+ mapper.add(original[i]);
+ mapper.add(simplified[i]);
+ std::cout
+ << "original: " << boost::size(original[i])
+ << " simplified: " << boost::size(simplified[i])
+ << std::endl;
+ }
+
+
+ for (int i = 0; i < n; i++)
+ {
+ mapper.map(original[i], "opacity:0.8;stroke:rgb(0,0,255);stroke-width:3");
+ mapper.map(simplified[i], "opacity:0.8;stroke:rgb(0,255,0);stroke-width:2");
+ }
+
+}
+
+
+void svg_simplify_country()
+{
+
+ typedef ggl::point_xy<double> point_type;
+
+ std::ofstream svg("simplify_country.svg");
+ svg_mapper<point_type> mapper(svg, 300, 300);
+
+ ggl::multi_polygon<ggl::polygon<point_type> > original[wkt_countries_count]
+ , simplified[wkt_countries_count];
+
+ for (int i = 0; i < wkt_countries_count; i++)
+ {
+ ggl::read_wkt(wkt_countries[i], original[i]);
+ ggl::simplify(original[i], simplified[i], 0.1);
+ mapper.add(original[i]);
+ mapper.add(simplified[i]);
+ std::cout
+ << "original: " << ggl::num_points(original[i])
+ << " simplified: " << ggl::num_points(simplified[i])
+ << std::endl;
+ }
+
+
+ for (int i = 0; i < wkt_countries_count; i++)
+ {
+ mapper.map(original[i], "opacity:0.8;fill:none;stroke:rgb(0,0,255);stroke-width:3");
+ mapper.map(simplified[i], "opacity:0.8;fill:none;stroke:rgb(0,255,0);stroke-width:2");
+ }
+}
+
+void svg_convex_hull_country()
+{
+
+ typedef ggl::point_xy<double> point_type;
+
+ std::ofstream svg("convex_hull_country.svg");
+ svg_mapper<point_type> mapper(svg, 300, 300);
+
+ ggl::multi_polygon<ggl::polygon<point_type> > original[wkt_countries_count];
+ ggl::linear_ring<point_type> hull[wkt_countries_count];
+
+ for (int i = 0; i < wkt_countries_count; i++)
+ {
+ ggl::read_wkt(wkt_countries[i], original[i]);
+ ggl::convex_hull_inserter(original[i], std::back_inserter(hull[i]));
+ mapper.add(original[i]);
+ mapper.add(hull[i]);
+ std::cout
+ << "original: " << ggl::num_points(original[i])
+ << " hull: " << ggl::num_points(hull[i])
+ << std::endl;
+ }
+
+
+ for (int i = 0; i < wkt_countries_count; i++)
+ {
+ mapper.map(original[i], "opacity:0.8;fill:rgb(255,255,0);stroke:rgb(0,0,0);stroke-width:3");
+ mapper.map(hull[i], "opacity:0.8;fill:none;stroke:rgb(255,0,0);stroke-width:3");
+ }
+
+}
+
+
+void svg_convex_hull_cities()
+{
+
+ typedef ggl::point_xy<double> point_type;
+
+ std::ofstream svg("convex_hull_cities.svg");
+ svg_mapper<point_type> mapper(svg, 300, 300);
+
+ ggl::multi_point<point_type> original[wkt_cities_count];
+
+ ggl::linear_ring<point_type> hull[wkt_cities_count];
+
+ for (int i = 0; i < wkt_cities_count; i++)
+ {
+ ggl::read_wkt(wkt_cities[i], original[i]);
+ ggl::convex_hull_inserter(original[i], std::back_inserter(hull[i]));
+ mapper.add(original[i]);
+ mapper.add(hull[i]);
+ std::cout
+ << "original: " << ggl::num_points(original[i])
+ << " hull: " << ggl::num_points(hull[i])
+ << std::endl;
+ }
+
+
+ for (int i = 0; i < wkt_cities_count; i++)
+ {
+ mapper.map(original[i], "fill:rgb(255,255,0);stroke:rgb(0,0,100);stroke-width:1", 3);
+ mapper.map(hull[i], "opacity:0.8;fill:none;stroke:rgb(255,0,0);stroke-width:3");
+ }
+}
+
+void svg_intersection_roads()
+{
+ // Read the road network
+ typedef ggl::point_xy<double> point_type;
+ typedef ggl::linestring<point_type> line_type;
+
+ typedef boost::tuple<line_type, std::string> road_type;
+
+ ggl::box<point_type> bbox;
+ ggl::assign_inverse(bbox);
+
+ std::vector<road_type> roads;
+ read_wkt<line_type>("../../../example/data/roads.wkt", roads, bbox);
+
+ // intersect
+ ggl::box<point_type> clip;
+ std::vector<line_type> intersected;
+
+ ggl::assign(clip, -100, 25, -90, 50);
+ for (size_t i = 0; i < roads.size(); i++)
+ {
+ ggl::intersection_inserter<line_type>(clip, roads[i].get<0>(), std::back_inserter(intersected));
+ }
+
+ // create map
+ std::ofstream svg("intersection_roads.svg");
+ svg_mapper<point_type> mapper(svg, 500, 500);
+
+ mapper.add(bbox);
+
+ for (size_t i = 0; i < roads.size(); i++)
+ {
+ mapper.map(roads[i].get<0>(), "stroke:rgb(0,0,255);stroke-width:3");
+ }
+
+ for (size_t i = 0; i < intersected.size(); i++)
+ {
+ mapper.map(intersected[i], "stroke:rgb(0,255,0);stroke-width:2");
+ }
+
+ for (size_t i = 0; i < intersected.size(); i++)
+ {
+ mapper.map(clip, "fill:none;stroke:rgb(128,128,128);stroke-width:2");
+ }
+}
+
+
+void svg_intersection_countries()
+{
+ // Read the road network
+ typedef ggl::point_xy<double> point_type;
+ typedef ggl::polygon<point_type> poly_type;
+ typedef ggl::multi_polygon<poly_type> mp_type;
+
+ typedef boost::tuple<mp_type, std::string> country_type;
+
+ ggl::box<point_type> bbox;
+ ggl::assign_inverse(bbox);
+
+ std::vector<country_type> countries;
+ read_wkt<mp_type>("../../../example/data/world.wkt", countries, bbox);
+
+ // intersect
+ ggl::box<point_type> clip;
+ std::vector<poly_type> intersected;
+
+ ggl::assign(clip, -100, -50, 100, 50);
+ for (size_t i = 0; i < countries.size(); i++)
+ {
+ mp_type const& mp = countries[i].get<0>();
+ for (size_t j = 0; j < mp.size(); j++)
+ {
+ ggl::intersection_inserter<poly_type>(clip, mp[j], std::back_inserter(intersected));
+ }
+ }
+
+ // create map
+ std::ofstream svg("intersection_countries.svg");
+ svg_mapper<point_type> mapper(svg, 800, 800);
+
+ mapper.add(bbox);
+
+ for (size_t i = 0; i < countries.size(); i++)
+ {
+ mapper.map(countries[i].get<0>().front(), "fill:rgb(0,0,255);stroke-width:1");
+ }
+
+ for (size_t i = 0; i < intersected.size(); i++)
+ {
+ mapper.map(intersected[i], "fill:rgb(0,255,0);stroke-width:1");
+ }
+
+ for (size_t i = 0; i < intersected.size(); i++)
+ {
+ mapper.map(clip, "fill:none;stroke:rgb(128,128,128);stroke-width:2");
+ }
+}
+
+
+
+
+
+int main(void)
+{
+ svg_intersection_roads();
+ svg_intersection_countries();
+ svg_simplify_road();
+ svg_simplify_country();
+ svg_convex_hull_country();
+ svg_convex_hull_cities();
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_4.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_4.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="doxygen_4"
+ ProjectGUID="{CBEDAEC7-EC87-4F91-9C45-F9505A052A44}"
+ RootNamespace="doxygen_4"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_4"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../boost;../../../test"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_4"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../boost;../../../test"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine=""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\doxygen_4.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_5.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_5.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,134 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Doxygen Examples, for Geometry Concepts
+
+#include <ggl/ggl.hpp>
+#include <ggl/geometries/register/point.hpp>
+#include <ggl/geometries/register/linestring.hpp>
+#include <ggl/geometries/geometries.hpp>
+
+
+
+struct legacy_point1
+{
+ double x, y;
+};
+
+// adapt legacy_point1
+namespace ggl { namespace traits
+{
+ template <> struct tag<legacy_point1> { typedef point_tag type; };
+ template <> struct coordinate_type<legacy_point1> { typedef double type; };
+ template <> struct coordinate_system<legacy_point1> { typedef cs::cartesian type; };
+ template <> struct dimension<legacy_point1>: boost::mpl::int_<2> {};
+ template <> struct access<legacy_point1, 0>
+ {
+ static double get(legacy_point1 const& p) { return p.x; }
+ static void set(legacy_point1& p, double const& value) { p.x = value; }
+ };
+ template <> struct access<legacy_point1, 1>
+ {
+ static double get(legacy_point1 const& p) { return p.y; }
+ static void set(legacy_point1& p, double const& value) { p.y = value; }
+ };
+}} // end adaptation
+
+namespace example_legacy_point1
+{
+ // The first way to check a concept at compile time: checking if the input is parameter
+ // or return type is OK.
+ template <typename P>
+ BOOST_CONCEPT_REQUIRES(((ggl::concept::Point<P>)), (void))
+ test1(P& p)
+ {
+ }
+
+ // The second way to check a concept at compile time: checking if the provided type,
+ // inside the function, if OK
+ template <typename P>
+ void test2(P& p)
+ {
+ BOOST_CONCEPT_ASSERT((ggl::concept::Point<P>));
+ }
+
+
+ void example()
+ {
+ legacy_point1 p;
+ test1(p);
+ test2(p);
+ }
+}
+
+// leave comment below for (strange behaviour of) doxygen
+class legacy_point2
+{
+public :
+ double x() const;
+ double y() const;
+};
+
+// adapt legacy_point2
+GEOMETRY_REGISTER_POINT_2D_CONST(legacy_point2, double, ggl::cs::cartesian, x(), y() )
+// end adaptation
+
+
+double legacy_point2::x() const { return 0; }
+double legacy_point2::y() const { return 0; }
+
+namespace example_legacy_point2
+{
+ // test it using boost concept requires
+
+ template <typename P>
+ BOOST_CONCEPT_REQUIRES(((ggl::concept::ConstPoint<P>)), (float))
+ test3(P& p)
+ {
+ return ggl::get<0>(p);
+ }
+
+ void example()
+ {
+ legacy_point2 p;
+ test3(p);
+ }
+}
+
+
+template <typename P>
+struct custom_linestring1 : std::deque<P>
+{
+ int id;
+};
+
+// adapt custom_linestring1
+namespace ggl { namespace traits
+{
+ template <typename P>
+ struct tag< custom_linestring1<P> > { typedef linestring_tag type; };
+}} // end adaptation
+
+namespace example_custom_linestring1
+{
+ void example()
+ {
+ typedef custom_linestring1<legacy_point1> L;
+ BOOST_CONCEPT_ASSERT((ggl::concept::Linestring<L>));
+
+ }
+}
+
+int main(void)
+{
+ example_legacy_point1::example();
+ example_legacy_point2::example();
+ example_custom_linestring1::example();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_5.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_5.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="doxygen_5"
+ ProjectGUID="{0CDE9E15-C937-4D05-B9BF-A2D96B8EAD33}"
+ RootNamespace="doxygen_5"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_5"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../boost;../../../test"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_5"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../boost;../../../test"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine=""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\doxygen_5.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_examples.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_examples.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,554 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Doxygen Examples, referred to from the sources
+
+#include <boost/tuple/tuple.hpp>
+
+#if defined(_MSC_VER)
+// We deliberately mix float/double's here so turn off warning
+#pragma warning( disable : 4244 )
+#endif // defined(_MSC_VER)
+
+#include <ggl/ggl.hpp>
+#include <ggl/geometries/register/point.hpp>
+#include <ggl/geometries/geometries.hpp>
+#include <ggl/geometries/adapted/std_as_linestring.hpp>
+
+#include <ggl/extensions/gis/io/wkt/wkt.hpp>
+
+
+// All functions below are referred to in the source of the Geometry Library.
+// Don't rename them.
+
+void example_area_polygon()
+{
+ ggl::polygon<ggl::point_xy<double> > poly;
+ ggl::read_wkt("POLYGON((0 0,0 7,4 2,2 0,0 0))", poly);
+ std::cout << "Polygon area is "
+ << ggl::area(poly)
+ << " square units" << std::endl;
+
+ // Other coordinate system, spherical or geographic (extension)
+ ggl::polygon<ggl::point<float, 2, ggl::cs::spherical<ggl::degree> > > sph_poly;
+ ggl::read_wkt("POLYGON((0 0,0 45,45 0,0 0))", sph_poly);
+ std::cout << "Area is "
+ << ggl::area(sph_poly)
+ << " on unit sphere " << std::endl;
+}
+
+void example_as_wkt_point()
+{
+ typedef ggl::point_xy<double> P;
+ P p(5.12, 6.34);
+ // Points can be streamed like this:
+ std::cout << ggl::dsv<P>(p) << std::endl;
+
+ // or like this:
+ std::cout << ggl::dsv(p) << std::endl;
+
+ // or (with extension) like this:
+ std::cout << ggl::wkt(p) << std::endl;
+}
+
+void example_as_wkt_vector()
+{
+ std::vector<ggl::point_xy<int> > v;
+ ggl::read_wkt<ggl::point_xy<int> >("linestring(1 1,2 2,3 3,4 4)", std::back_inserter(v));
+
+ std::cout << ggl::dsv(std::make_pair(v.begin(), v.end())) << std::endl;
+}
+
+
+void example_centroid_polygon()
+{
+ ggl::polygon<ggl::point_xy<double> > poly;
+ ggl::read_wkt("POLYGON((0 0,0 7,4 2,2 0,0 0))", poly);
+ // Center of polygon might have different type than points of polygon
+ ggl::point_xy<float> center;
+ ggl::centroid(poly, center);
+ std::cout << "Centroid: " << ggl::dsv(center) << std::endl;
+}
+
+
+void example_distance_point_point()
+{
+ ggl::point_xy<double> p1(1, 1);
+ ggl::point_xy<double> p2(2, 3);
+ std::cout << "Distance p1-p2 is "
+ << ggl::distance(p1, p2)
+ << " units" << std::endl;
+
+ /*
+ Extension, other coordinate system:
+ // Read 2 Dutch cities from WKT texts (in decimal degrees)
+ ggl::point_ll<double, ggl::cs::geographic<ggl::degree> > a, r;
+ ggl::read_wkt("POINT(4.89222 52.3731)", a);
+ ggl::read_wkt("POINT(4.47917 51.9308)", r);
+
+ std::cout << "Distance Amsterdam-Rotterdam is "
+ << ggl::distance(a, r) / 1000.0
+ << " kilometers " << std::endl;
+ */
+}
+
+void example_distance_point_point_strategy()
+{
+ /*
+ Extension, other coordinate system:
+ typedef ggl::point_ll<double, ggl::cs::geographic<ggl::degree> > LL;
+ LL a, r;
+ ggl::read_wkt("POINT(4.89222 52.3731)", a);
+ ggl::read_wkt("POINT(4.47917 51.9308)", r);
+
+ std::cout << "Distance Amsterdam-Rotterdam is "
+ << ggl::distance(a, r,
+ ggl::strategy::distance::vincenty<LL>() )
+ / 1000.0
+ << " kilometers " << std::endl;
+ */
+}
+
+void example_from_wkt_point()
+{
+ ggl::point_xy<int> point;
+ ggl::read_wkt("Point(1 2)", point);
+ std::cout << point.x() << "," << point.y() << std::endl;
+}
+
+void example_from_wkt_output_iterator()
+{
+ std::vector<ggl::point_xy<int> > v;
+ ggl::read_wkt<ggl::point_xy<int> >("linestring(1 1,2 2,3 3,4 4)", std::back_inserter(v));
+ std::cout << "vector has " << v.size() << " coordinates" << std::endl;
+}
+
+void example_from_wkt_linestring()
+{
+ ggl::linestring<ggl::point_xy<double> > line;
+ ggl::read_wkt("linestring(1 1,2 2,3 3,4 4)", line);
+ std::cout << "linestring has " << line.size() << " coordinates" << std::endl;
+}
+
+void example_from_wkt_polygon()
+{
+ ggl::polygon<ggl::point_xy<double> > poly;
+ ggl::read_wkt("POLYGON((0 0,0 1,1 1,1 0,0 0))", poly);
+ std::cout << "Polygon has " << poly.outer().size() << " coordinates in outer ring" << std::endl;
+}
+
+void example_point_ll_convert()
+{
+ /*
+ Extension, other coordinate system:
+ ggl::point_ll<double, ggl::cs::geographic<ggl::degree> > deg(ggl::latitude<>(33.0), ggl::longitude<>(-118.0));
+ ggl::point_ll<double, ggl::cs::geographic<ggl::radian> > rad;
+ ggl::transform(deg, rad);
+
+ std::cout << "point in radians: " << rad << std::endl;
+ */
+}
+
+void example_clip_linestring1()
+{
+ typedef ggl::point_xy<double> P;
+ ggl::linestring<P> line;
+ ggl::read_wkt("linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)", line);
+ ggl::box<P> cb(P(1.5, 1.5), P(4.5, 2.5));
+ std::cout << "Clipped linestring(s) " << std::endl;
+
+ std::vector<ggl::linestring<P> > intersection;
+ ggl::intersection<ggl::linestring<P> >(cb, line, std::back_inserter(intersection));
+}
+
+void example_clip_linestring2()
+{
+ typedef ggl::point_xy<double> P;
+ std::vector<P> vector_in;
+ ggl::read_wkt<P>("linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)",
+ std::back_inserter(vector_in));
+
+ ggl::box<P> cb(P(1.5, 1.5), P(4.5, 2.5));
+ typedef std::vector<std::vector<P> > VV;
+ VV vector_out;
+ ggl::intersection<std::vector<P> >(cb, vector_in, std::back_inserter(vector_out));
+
+ std::cout << "Clipped vector(s) " << std::endl;
+ for (VV::const_iterator it = vector_out.begin(); it != vector_out.end(); it++)
+ {
+ std::copy(it->begin(), it->end(), std::ostream_iterator<P>(std::cout, " "));
+ std::cout << std::endl;
+ }
+}
+
+
+
+
+
+void example_intersection_polygon1()
+{
+ typedef ggl::point_xy<double> P;
+ typedef std::vector<ggl::polygon<P> > PV;
+
+ ggl::box<P> cb(P(1.5, 1.5), P(4.5, 2.5));
+ ggl::polygon<P> poly;
+ ggl::read_wkt("POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"
+ ",(4 2,4.2 1.4,4.8 1.9,4.4 2.2,4 2))", poly);
+
+ PV v;
+ ggl::intersection<ggl::polygon<P> >(cb, poly, std::back_inserter(v));
+
+ std::cout << "Clipped polygon(s) " << std::endl;
+ for (PV::const_iterator it = v.begin(); it != v.end(); it++)
+ {
+ std::cout << ggl::dsv(*it) << std::endl;
+ }
+}
+
+void example_simplify_linestring1()
+{
+ ggl::linestring<ggl::point_xy<double> > line, simplified;
+ ggl::read_wkt("linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)", line);
+ ggl::simplify(line, simplified, 0.5);
+ std::cout
+ << " original line: " << ggl::dsv(line) << std::endl
+ << "simplified line: " << ggl::dsv(simplified) << std::endl;
+}
+
+void example_simplify_linestring2()
+{
+ typedef ggl::point_xy<double> P;
+ typedef ggl::linestring<P> L;
+ L line;
+
+ ggl::read_wkt("linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)", line);
+
+ typedef ggl::strategy::distance::xy_point_segment<P, P> DS;
+ typedef ggl::strategy::simplify::douglas_peucker<P, DS> simplification;
+ ggl::simplify_inserter(line, std::ostream_iterator<P>(std::cout, "\n"), 0.5, simplification());
+}
+
+
+
+void example_within()
+{
+ ggl::polygon<ggl::point_xy<double> > poly;
+ ggl::read_wkt("POLYGON((0 0,0 7,4 2,2 0,0 0))", poly);
+ ggl::point_xy<float> point(3, 3);
+ std::cout << "Point is "
+ << (ggl::within(point, poly) ? "IN" : "NOT in")
+ << " polygon"
+ << std::endl;
+}
+
+/*
+void example_within_strategy()
+{
+ // TO BE UPDATED/FINISHED
+ typedef ggl::point_xy<double> P;
+ typedef ggl::polygon<P> POLY;
+ P p;
+ std::cout << within(p, poly, strategy::within::cross_count<P>) << std::endl;
+}
+*/
+
+void example_length_linestring()
+{
+ using namespace ggl;
+ linestring<point_xy<double> > line;
+ read_wkt("linestring(0 0,1 1,4 8,3 2)", line);
+ std::cout << "linestring length is "
+ << length(line)
+ << " units" << std::endl;
+
+ /*
+ Extension, other coordinate system:
+ // Linestring in latlong, filled with
+ // explicit degree-minute-second values
+ typedef point_ll<float, ggl::cs::geographic<ggl::degree> > LL;
+ linestring<LL> line_ll;
+ line_ll.push_back(LL(
+ latitude<float>(dms<north, float>(52, 22, 23)),
+ longitude<float>(dms<east, float>(4, 53, 32))));
+ line_ll.push_back(LL(
+ latitude<float>(dms<north, float>(51, 55, 51)),
+ longitude<float>(dms<east, float>(4, 28, 45))));
+ line_ll.push_back(LL(
+ latitude<float>(dms<north, float>(52, 4, 48)),
+ longitude<float>(dms<east, float>(4, 18, 0))));
+ std::cout << "linestring length is "
+ << length(line_ll) / 1000
+ << " kilometers " << std::endl;
+ */
+}
+
+void example_length_linestring_iterators1()
+{
+ ggl::linestring<ggl::point_xy<double> > line;
+ ggl::read_wkt("linestring(0 0,1 1,4 8,3 2)", line);
+ std::cout << "linestring length is "
+ << ggl::length(line)
+ << " units" << std::endl;
+}
+
+void example_length_linestring_iterators2()
+{
+ std::vector<ggl::point_xy<double> > line;
+ ggl::read_wkt<ggl::point_xy<double> >("linestring(0 0,1 1,4 8,3 2)", std::back_inserter(line));
+ std::cout << "linestring length is "
+ << ggl::length(line)
+ << " units" << std::endl;
+}
+
+void example_length_linestring_iterators3()
+{
+ /*
+ Extension, other coordinate system:
+ using namespace ggl;
+ typedef point_ll<float, ggl::cs::geographic<ggl::degree> > LL;
+ std::deque<LL> line;
+ ggl::read_wkt<LL>("linestring(0 51,1 51,2 52)", std::back_inserter(line));
+ std::cout << "linestring length is "
+ << 0.001 * ggl::length(line, ggl::strategy::distance::vincenty<LL>())
+ << " kilometers" << std::endl;
+ */
+}
+
+
+void example_length_linestring_strategy()
+{
+ /*
+ Extension, other coordinate system:
+ using namespace ggl;
+ typedef point_ll<float, ggl::cs::geographic<ggl::degree> > LL;
+ linestring<LL> line_ll;
+ line_ll.push_back(LL(latitude<float>(dms<north, float>(52, 22, 23)), longitude<float>(dms<east, float>(4, 53, 32))));
+ line_ll.push_back(LL(latitude<float>(dms<north, float>(51, 55, 51)), longitude<float>(dms<east, float>(4, 28, 45))));
+ line_ll.push_back(LL(latitude<float>(dms<north, float>(52, 4, 48)), longitude<float>(dms<east, float>(4, 18, 0))));
+ std::cout << "linestring length is "
+ << length(line_ll, strategy::distance::vincenty<LL, LL>() )/(1000)
+ << " kilometers " << std::endl;
+ */
+}
+
+
+void example_envelope_linestring()
+{
+ ggl::linestring<ggl::point_xy<double> > line;
+ ggl::read_wkt("linestring(0 0,1 1,4 8,3 2)", line);
+ ggl::box<ggl::point_xy<double> > box;
+ ggl::envelope(line, box);
+
+ std::cout << "envelope is " << ggl::dsv(box) << std::endl;
+}
+
+void example_envelope_polygon()
+{
+ /*
+ Extension, other coordinate system:
+ using namespace ggl;
+ typedef point_ll<double, ggl::cs::geographic<ggl::degree> > LL;
+
+ // Wrangel island, 180 meridian crossing island above Siberia.
+ polygon<LL> wrangel;
+ wrangel.outer().push_back(LL(latitude<>(dms<north>(70, 47, 7)), longitude<>(dms<west>(178, 47, 9))));
+ wrangel.outer().push_back(LL(latitude<>(dms<north>(71, 14, 0)), longitude<>(dms<east>(177, 28, 33))));
+ wrangel.outer().push_back(LL(latitude<>(dms<north>(71, 34, 24)), longitude<>(dms<east>(179, 44, 37))));
+ // Close it
+ wrangel.outer().push_back(wrangel.outer().front());
+
+ ggl::box<LL> box;
+ ggl::envelope(wrangel, box);
+
+ dms<cd_lat> minlat(box.min_corner().lat());
+ dms<cd_lon> minlon(box.min_corner().lon());
+
+ dms<cd_lat> maxlat(box.max_corner().lat());
+ dms<cd_lon> maxlon(box.max_corner().lon());
+
+ std::cout << wrangel << std::endl;
+ std::cout << "min: " << minlat.get_dms() << " , " << minlon.get_dms() << std::endl;
+ std::cout << "max: " << maxlat.get_dms() << " , " << maxlon.get_dms() << std::endl;
+ */
+}
+
+
+void example_dms()
+{
+ /*
+ Extension, other coordinate system:
+ // Construction with degree/minute/seconds
+ ggl::dms<ggl::east> d1(4, 53, 32.5);
+
+ // Explicit conversion to double.
+ std::cout << d1.as_value() << std::endl;
+
+ // Conversion to string, with optional strings
+ std::cout << d1.get_dms(" deg ", " min ", " sec") << std::endl;
+
+ // Combination with latitude/longitude and cardinal directions
+ {
+ using namespace ggl;
+ point_ll<double, ggl::cs::geographic<ggl::degree> > canberra(
+ latitude<>(dms<south>(35, 18, 27)),
+ longitude<>(dms<east>(149, 7, 27.9)));
+ std::cout << canberra << std::endl;
+ }
+ */
+}
+
+void example_point_ll_construct()
+{
+ /*
+ Extension, other coordinate system:
+ using namespace ggl;
+ typedef point_ll<double, ggl::cs::geographic<ggl::degree> > ll;
+
+ // Constructions in both orders possible
+ ll juneau(
+ latitude<>(dms<north>(58, 21, 5)),
+ longitude<>(dms<west>(134, 30, 42)));
+ ll wladiwostok(
+ longitude<>(dms<east>(131, 54)),
+ latitude<>(dms<north>(43, 8))
+ );
+ */
+}
+
+
+
+struct legacy_point1
+{
+ double x, y;
+};
+
+// adapt legacy_point1
+namespace ggl { namespace traits
+{
+ template <> struct tag<legacy_point1> { typedef point_tag type; };
+ template <> struct coordinate_type<legacy_point1> { typedef double type; };
+ template <> struct coordinate_system<legacy_point1> { typedef cs::cartesian type; };
+ template <> struct dimension<legacy_point1>: boost::mpl::int_<2> {};
+ template <> struct access<legacy_point1, 0>
+ {
+ static double get(legacy_point1 const& p) { return p.x; }
+ static void set(legacy_point1& p, double const& value) { p.x = value; }
+ };
+ template <> struct access<legacy_point1, 1>
+ {
+ static double get(legacy_point1 const& p) { return p.y; }
+ static void set(legacy_point1& p, double const& value) { p.y = value; }
+ };
+}} // end adaptation
+
+namespace example_legacy_point1
+{
+ // The first way to check a concept at compile time: checking if the input is parameter
+ // or return type is OK.
+ template <typename P>
+ BOOST_CONCEPT_REQUIRES(((ggl::concept::Point<P>)), (void))
+ test1(P& p)
+ {
+ }
+
+ // The second way to check a concept at compile time: checking if the provided type,
+ // inside the function, if OK
+ template <typename P>
+ void test2(P& p)
+ {
+ BOOST_CONCEPT_ASSERT((ggl::concept::Point<P>));
+ }
+
+
+ void example()
+ {
+ legacy_point1 p;
+ test1(p);
+ test2(p);
+ }
+}
+
+// leave comment below for (strange behaviour of) doxygen
+class legacy_point2
+{
+public :
+ double x() const;
+ double y() const;
+};
+
+// adapt legacy_point2
+GEOMETRY_REGISTER_POINT_2D_CONST(legacy_point2, double, ggl::cs::cartesian, x(), y() )
+// end adaptation
+
+
+double legacy_point2::x() const { return 0; }
+double legacy_point2::y() const { return 0; }
+
+namespace example_legacy_point2
+{
+ // test it using boost concept requires
+
+ template <typename P>
+ BOOST_CONCEPT_REQUIRES(((ggl::concept::ConstPoint<P>)), (float))
+ test3(P& p)
+ {
+ return ggl::get<0>(p);
+ }
+
+ void example()
+ {
+ legacy_point2 p;
+ test3(p);
+ }
+}
+
+
+
+int main(void)
+{
+ example_area_polygon();
+
+ example_centroid_polygon();
+
+ example_distance_point_point();
+ example_distance_point_point_strategy();
+
+ example_from_wkt_point();
+ example_from_wkt_output_iterator();
+ example_from_wkt_linestring();
+ example_from_wkt_polygon();
+
+ example_as_wkt_point();
+
+ example_clip_linestring1();
+ example_clip_linestring2();
+ example_intersection_polygon1();
+
+ example_simplify_linestring1();
+ example_simplify_linestring2();
+
+ example_length_linestring();
+ example_length_linestring_iterators1();
+ example_length_linestring_iterators2();
+ example_length_linestring_iterators3();
+ example_length_linestring_strategy();
+
+ example_envelope_linestring();
+ example_envelope_polygon();
+
+ example_within();
+
+ example_point_ll_convert();
+ example_point_ll_construct();
+ example_dms();
+
+ example_legacy_point1::example();
+ example_legacy_point2::example();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_examples.sln
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_examples.sln 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,43 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doxygen_1", "doxygen_1.vcproj", "{861F130D-2849-4B50-B240-049DBD9D3F18}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doxygen_2", "doxygen_2.vcproj", "{6CF6A521-57E0-4DA4-9D17-ED5D29E4208C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doxygen_3", "doxygen_3.vcproj", "{45D4139F-BC5B-4D48-BAB8-9901C53ECCC9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doxygen_4", "doxygen_4.vcproj", "{CBEDAEC7-EC87-4F91-9C45-F9505A052A44}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doxygen_5", "doxygen_5.vcproj", "{0CDE9E15-C937-4D05-B9BF-A2D96B8EAD33}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {861F130D-2849-4B50-B240-049DBD9D3F18}.Debug|Win32.ActiveCfg = Debug|Win32
+ {861F130D-2849-4B50-B240-049DBD9D3F18}.Debug|Win32.Build.0 = Debug|Win32
+ {861F130D-2849-4B50-B240-049DBD9D3F18}.Release|Win32.ActiveCfg = Release|Win32
+ {861F130D-2849-4B50-B240-049DBD9D3F18}.Release|Win32.Build.0 = Release|Win32
+ {6CF6A521-57E0-4DA4-9D17-ED5D29E4208C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6CF6A521-57E0-4DA4-9D17-ED5D29E4208C}.Debug|Win32.Build.0 = Debug|Win32
+ {6CF6A521-57E0-4DA4-9D17-ED5D29E4208C}.Release|Win32.ActiveCfg = Release|Win32
+ {6CF6A521-57E0-4DA4-9D17-ED5D29E4208C}.Release|Win32.Build.0 = Release|Win32
+ {45D4139F-BC5B-4D48-BAB8-9901C53ECCC9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {45D4139F-BC5B-4D48-BAB8-9901C53ECCC9}.Debug|Win32.Build.0 = Debug|Win32
+ {45D4139F-BC5B-4D48-BAB8-9901C53ECCC9}.Release|Win32.ActiveCfg = Release|Win32
+ {45D4139F-BC5B-4D48-BAB8-9901C53ECCC9}.Release|Win32.Build.0 = Release|Win32
+ {CBEDAEC7-EC87-4F91-9C45-F9505A052A44}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CBEDAEC7-EC87-4F91-9C45-F9505A052A44}.Debug|Win32.Build.0 = Debug|Win32
+ {CBEDAEC7-EC87-4F91-9C45-F9505A052A44}.Release|Win32.ActiveCfg = Release|Win32
+ {CBEDAEC7-EC87-4F91-9C45-F9505A052A44}.Release|Win32.Build.0 = Release|Win32
+ {0CDE9E15-C937-4D05-B9BF-A2D96B8EAD33}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0CDE9E15-C937-4D05-B9BF-A2D96B8EAD33}.Debug|Win32.Build.0 = Debug|Win32
+ {0CDE9E15-C937-4D05-B9BF-A2D96B8EAD33}.Release|Win32.ActiveCfg = Release|Win32
+ {0CDE9E15-C937-4D05-B9BF-A2D96B8EAD33}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_examples.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/doc/doxygen_input/sourcecode/doxygen_examples.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,198 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="doxygen_examples"
+ ProjectGUID="{861F130D-2849-4B50-B240-049DBD9D3F18}"
+ RootNamespace="doxygen_examples"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_examples"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../boost"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="cd ../doc
doxygen
"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_examples"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../boost"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="cd ../doc
doxygen
"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Doxygen Files"
+ >
+ <File
+ RelativePath="../pages/doxygen_examples.hpp"
+ >
+ </File>
+ <File
+ RelativePath="../pages/doxygen_mainpage.hpp"
+ >
+ </File>
+ <File
+ RelativePath="../pages/doxygen_pages.hpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\doxygen_examples.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/images/draft.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/images/ggl-logo-big.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/doc/doxygen_output/html/images/proposed_boost.png
==============================================================================
Binary file. No diff available.
Added: sandbox/ggl/formal_review/libs/ggl/example/01_point_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/01_point_example.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,102 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Point Example - showing different type of points
+
+#include <iostream>
+
+#include <ggl/ggl.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/cartesian2d.hpp>
+
+
+int main()
+{
+ using namespace ggl;
+
+ // GGL contains several point types:
+ // 1: it's own generic type
+ point<double, 2, cs::cartesian> pt1;
+
+ // 2: it's own type targetted to Cartesian (x,y) coordinates
+ point_2d pt2;
+
+ // 3: it supports Boost tuple's (by including the headerfile)
+ boost::tuple<double, double> pt3;
+
+ // 4: it supports normal arrays
+ double pt4[2];
+
+ // 5: there are more variants, and you can create your own.
+ // (see therefore the custom_point example)
+
+ // All these types are handled the same way. We show here
+ // assigning them and calculating distances.
+ assign(pt1, 1, 1);
+ assign(pt2, 2, 2);
+ assign(pt3, 3, 3);
+ assign(pt4, 4, 4);
+
+ double d1 = distance(pt1, pt2);
+ double d2 = distance(pt3, pt4);
+ std::cout << "Distances: " << d1 << " and " << d2 << std::endl;
+
+ // (in case you didn't note, distances can be calculated
+ // from points with different point-types)
+
+
+ // Several ways of construction and setting point values
+ // 1: default, empty constructor, causing no initialization at all
+ point_2d p1;
+
+ // 2: as shown above, assign
+ point_2d p2;
+ assign(p2, 1, 1);
+
+ // 3: using "set" function
+ // set uses the concepts behind, such that it can be applied for
+ // every point-type (like assign)
+ point_2d p3;
+ set<0>(p3, 1);
+ set<1>(p3, 1);
+ // set<2>(p3, 1); //will result in compile-error
+
+
+ // 3: for any point type, and other geometry objects:
+ // there is the "make" object generator
+ // (this one requires to specify the point-type).
+ point_2d p4 = make<point_2d>(1,1);
+
+
+ // 5: for the point_2d type only: constructor with two values
+ point_2d p5(1,1);
+
+ // 6: for boost tuples you can of course use make_tuple
+
+
+ // Some ways of getting point values
+
+ // 1: using the "get" function following the concepts behind
+ std::cout << get<0>(p2) << "," << get<1>(p2) << std::endl;
+
+ // 2: for point-2d only
+ std::cout << p2.x() << "," << p2.y() << std::endl;
+
+ // 3: using boost-tuples you of course can boost-tuple-methods
+ std::cout << pt3.get<0>() << "," << pt3.get<1>() << std::endl;
+
+ // 4: GGL supports various output formats, e.g. DSV
+ // (delimiter separated values)
+ std::cout << dsv(pt3) << std::endl;
+
+
+ // Other examples show other types of points, geometries and more algorithms
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/example/01_point_example.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/01_point_example.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="01_point_example"
+ ProjectGUID="{E7BFC111-F0E5-420F-869C-1FC3212270B5}"
+ RootNamespace="01_point_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\01_point_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="false"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\01_point_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\01_point_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/example/02_linestring_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/02_linestring_example.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,193 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Linestring Example
+
+#include <algorithm> // for reverse, unique
+#include <iostream>
+#include <iterator>
+#include <utility>
+#include <vector>
+
+#include <ggl/ggl.hpp>
+#include <ggl/geometries/cartesian2d.hpp>
+// Optional includes to handle c-arrays as points, std::vectors as linestrings
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/std_as_linestring.hpp>
+
+
+
+template<typename P>
+inline void translate_function(P& p)
+{
+ p.x(p.x() + 100.0);
+}
+
+template<typename P>
+struct scale_functor
+{
+ inline void operator()(P& p)
+ {
+ p.x(p.x() * 1000.0);
+ p.y(p.y() * 1000.0);
+ }
+};
+
+int main(void)
+{
+ using namespace ggl;
+
+ // Define a linestring, which is a vector of points, and add some points
+ // (we add them deliberately in different ways)
+ linestring_2d ls;
+
+ // points can be created using "make" and added to a linestring using the std:: "push_back"
+ ls.push_back(make<point_2d>(1.1, 1.1));
+
+ // points can also be assigned using "assign" and added to a linestring using "append"
+ point_2d lp;
+ assign(lp, 2.5, 2.1);
+ append(ls, lp);
+
+ // Lines can be streamed using DSV (delimiter separated values)
+ std::cout << ggl::dsv(ls) << std::endl;
+
+ // The bounding box of linestrings can be calculated
+ box_2d b;
+ envelope(ls, b);
+ std::cout << ggl::dsv(b) << std::endl;
+
+ // The length of the line can be calulated
+ std::cout << "length: " << length(ls) << std::endl;
+
+ // All things from std::vector can be called, because a linestring is a vector
+ std::cout << "number of points 1: " << ls.size() << std::endl;
+
+ // All things from boost ranges can be called because a linestring is considered as a range
+ std::cout << "number of points 2: " << boost::size(ls) << std::endl;
+
+ // Generic function from geometry/OGC delivers the same value
+ std::cout << "number of points 3: " << num_points(ls) << std::endl;
+
+ // The distance from a point to a linestring can be calculated
+ point_2d p(1.9, 1.2);
+ std::cout << "distance of " << ggl::dsv(p)
+ << " to line: " << distance(p, ls) << std::endl;
+
+ // A linestring is a vector. However, some algorithms consider "segments",
+ // which are the line pieces between two points of a linestring.
+ double d = distance(p, segment<point_2d >(ls.front(), ls.back()));
+ std::cout << "distance: " << d << std::endl;
+
+ // Add some three points more, let's do it using a classic array.
+ // (See documentation for picture of this linestring)
+ const double c[][2] = { {3.1, 3.1}, {4.9, 1.1}, {3.1, 1.9} };
+ append(ls, c);
+ std::cout << "appended: " << ggl::dsv(ls) << std::endl;
+
+ // Output as iterator-pair on a vector
+ {
+ std::vector<point_2d> v;
+ std::copy(ls.begin(), ls.end(), std::back_inserter(v));
+
+ std::cout
+ << "as vector: "
+ << ggl::dsv(v)
+ << std::endl;
+
+ std::cout
+ << "as it-pair: "
+ << ggl::dsv(std::make_pair(v.begin(), v.end()))
+ << std::endl;
+ }
+
+ // All algorithms from std can be used: a linestring is a vector
+ std::reverse(ls.begin(), ls.end());
+ std::cout << "reversed: " << ggl::dsv(ls) << std::endl;
+ std::reverse(boost::begin(ls), boost::end(ls));
+
+ // The other way, using a vector instead of a linestring, is also possible
+ std::vector<point_2d> pv(ls.begin(), ls.end());
+ std::cout << "length: " << length(pv) << std::endl;
+
+ // If there are double points in the line, you can use unique to remove them
+ // So we add the last point, print, make a unique copy and print
+ ls.push_back(ls.back());
+ ls.insert(ls.begin(), ls.front());
+ std::cout << "extra duplicate points: " << ggl::dsv(ls) << std::endl;
+
+ {
+ linestring_2d ls_copy;
+ std::unique_copy(ls.begin(), ls.end(), std::back_inserter(ls_copy),
+ ggl::equal_to<point_2d>());
+ ls = ls_copy;
+ std::cout << "uniquecopy: " << ggl::dsv(ls) << std::endl;
+ }
+
+ // Lines can be simplified. This removes points, but preserves the shape
+ linestring_2d ls_simplified;
+ simplify(ls, ls_simplified, 0.5);
+ std::cout << "simplified: " << ggl::dsv(ls_simplified) << std::endl;
+
+
+ // for_each:
+ // 1) Lines can be visited with std::for_each
+ // 2) for_each_point is also defined for all geometries
+ // 3) for_each_segment is defined for all geometries to all segments
+ // 4) loop is defined for geometries to visit segments
+ // with state apart, and to be able to break out (not shown here)
+ {
+ linestring_2d lscopy = ls;
+ std::for_each(lscopy.begin(), lscopy.end(), translate_function<point_2d>);
+ for_each_point(lscopy, scale_functor<point_2d>());
+ for_each_point(lscopy, translate_function<point_2d>);
+ std::cout << "modified line: " << ggl::dsv(lscopy) << std::endl;
+ }
+
+ // Lines can be clipped using a clipping box. Clipped lines are added to the output iterator
+ box_2d cb(point_2d(1.5, 1.5), point_2d(4.5, 2.5));
+
+ std::vector<linestring_2d> clipped;
+ intersection_inserter<linestring_2d> (cb, ls, std::back_inserter(clipped));
+
+ // Also possible: clip-output to a vector of vectors
+ std::vector<std::vector<point_2d> > vector_out;
+ intersection_inserter<std::vector<point_2d> >(cb, ls, std::back_inserter(vector_out));
+
+ std::cout << "clipped output as vector:" << std::endl;
+ for (std::vector<std::vector<point_2d> >::const_iterator it
+ = vector_out.begin(); it != vector_out.end(); ++it)
+ {
+ std::cout << ggl::dsv(*it) << std::endl;
+ }
+
+ // Calculate the convex hull of the linestring
+ polygon_2d hull;
+ convex_hull(ls, hull);
+ std::cout << "Convex hull:" << ggl::dsv(hull) << std::endl;
+
+ // All the above assumed 2D Cartesian linestrings. 3D is possible as well
+ // Let's define a 3D point ourselves, this time using 'float'
+ typedef point<float, 3, cs::cartesian> point_type;
+ typedef linestring<point_type> line_type;
+ line_type line3d;
+ line3d.push_back(make<point_type>(1,2,3));
+ line3d.push_back(make<point_type>(4,5,6));
+ line3d.push_back(make<point_type>(7,8,9));
+
+ // Not all algorithms work on 3d lines. For example convex hull does NOT.
+ // But, for example, length, distance, simplify, envelope and stream do.
+ std::cout << "3D: length: " << length(line3d) << " line: " << ggl::dsv(line3d) << std::endl;
+
+ // With DSV you can also use other delimiters, e.g. JSON style
+ std::cout << "JSON: "
+ << ggl::dsv(ls, ", ", "[", "]", ", ", "[ ", " ]")
+ << std::endl;
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/example/02_linestring_example.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/02_linestring_example.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="02_linestring_example"
+ ProjectGUID="{D5CE1A26-1EB7-44A4-84F9-526CFA8C2B74}"
+ RootNamespace="02_linestring_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\02_linestring_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="false"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\02_linestring_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\02_linestring_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/example/03_polygon_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/03_polygon_example.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,126 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Polygon Example
+
+#include <algorithm> // for reverse, unique
+#include <iostream>
+#include <string>
+
+#include <ggl/ggl.hpp>
+#include <ggl/geometries/cartesian2d.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/std_as_linestring.hpp>
+
+std::string boolstr(bool v)
+{
+ return v ? "true" : "false";
+}
+
+int main(void)
+{
+ using namespace ggl;
+
+ // Define a polygon and fill the outer ring.
+ // In most cases you will read it from a file or database
+ polygon_2d poly;
+ {
+ const double coor[][2] = {
+ {2.0, 1.3}, {2.4, 1.7}, {2.8, 1.8}, {3.4, 1.2}, {3.7, 1.6},
+ {3.4, 2.0}, {4.1, 3.0}, {5.3, 2.6}, {5.4, 1.2}, {4.9, 0.8}, {2.9, 0.7},
+ {2.0, 1.3} // closing point is opening point
+ };
+ assign(poly, coor);
+ }
+
+ // Polygons should be closed, and directed clockwise. If you're not sure if that is the case,
+ // call the correct algorithm
+ correct(poly);
+
+ // Polygons can be streamed as text
+ // (or more precisely: as DSV (delimiter separated values))
+ std::cout << ggl::dsv(poly) << std::endl;
+
+ // As with lines, bounding box of polygons can be calculated
+ box_2d b;
+ envelope(poly, b);
+ std::cout << ggl::dsv(b) << std::endl;
+
+ // The area of the polygon can be calulated
+ std::cout << "area: " << area(poly) << std::endl;
+
+ // And the centroid, which is the center of gravity
+ point_2d cent;
+ centroid(poly, cent);
+ std::cout << "centroid: " << ggl::dsv(cent) << std::endl;
+
+
+ // The number of points have to called per ring separately
+ std::cout << "number of points in outer ring: " << poly.outer().size() << std::endl;
+
+ // Polygons can have one or more inner rings, also called holes, donuts, islands, interior rings.
+ // Let's add one
+ {
+ poly.inners().resize(1);
+ linear_ring<point_2d>& inner = poly.inners().back();
+
+ const double coor[][2] = { {4.0, 2.0}, {4.2, 1.4}, {4.8, 1.9}, {4.4, 2.2}, {4.0, 2.0} };
+ assign(inner, coor);
+ }
+
+ correct(poly);
+
+ std::cout << "with inner ring:" << ggl::dsv(poly) << std::endl;
+ // The area of the polygon is changed of course
+ std::cout << "new area of polygon: " << area(poly) << std::endl;
+ centroid(poly, cent);
+ std::cout << "new centroid: " << ggl::dsv(cent) << std::endl;
+
+ // You can test whether points are within a polygon
+ std::cout << "point in polygon:"
+ << " p1: " << boolstr(within(make<point_2d>(3.0, 2.0), poly))
+ << " p2: " << boolstr(within(make<point_2d>(3.7, 2.0), poly))
+ << " p3: " << boolstr(within(make<point_2d>(4.4, 2.0), poly))
+ << std::endl;
+
+ // As with linestrings and points, you can derive from polygon to add, for example,
+ // fill color and stroke color. Or SRID (spatial reference ID). Or Z-value. Or a property map.
+ // We don't show this here.
+
+ // Clip the polygon using a bounding box
+ box_2d cb(make<point_2d>(1.5, 1.5), make<point_2d>(4.5, 2.5));
+ typedef std::vector<polygon_2d > polygon_list;
+ polygon_list v;
+
+ intersection_inserter<polygon_2d>(cb, poly, std::back_inserter(v));
+ std::cout << "Clipped output polygons" << std::endl;
+ for (polygon_list::const_iterator it = v.begin(); it != v.end(); ++it)
+ {
+ std::cout << ggl::dsv(*it) << std::endl;
+ }
+
+ polygon_2d hull;
+ convex_hull(poly, hull);
+ std::cout << "Convex hull:" << ggl::dsv(hull) << std::endl;
+
+ // If you really want:
+ // You don't have to use a vector, you can define a polygon with a deque
+ // You can specify the container for the points and for the inner rings independantly
+
+ typedef polygon<point_2d, std::vector, std::deque> polygon_type;
+ polygon_type poly2;
+ ring_type<polygon_type>::type& ring = exterior_ring(poly2);
+ append(ring, make<point_2d>(2.8, 1.9));
+ append(ring, make<point_2d>(2.9, 2.4));
+ append(ring, make<point_2d>(3.3, 2.2));
+ append(ring, make<point_2d>(3.2, 1.8));
+ append(ring, make<point_2d>(2.8, 1.9));
+ std::cout << ggl::dsv(poly2) << std::endl;
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/example/03_polygon_example.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/03_polygon_example.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="03_polygon_example"
+ ProjectGUID="{1E299DA7-CFD1-4586-B0B0-1ABF2A32ED5B}"
+ RootNamespace="03_polygon_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\03_polygon_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="false"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NOINHERIT)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\03_polygon_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\03_polygon_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/example/06_transformation_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/06_transformation_example.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,50 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Transformation Example
+
+#include <iostream>
+
+#include <ggl/ggl.hpp>
+#include <ggl/geometries/cartesian2d.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/std_as_linestring.hpp>
+
+int main()
+{
+ using namespace ggl;
+
+ point_2d p(1, 1);
+ point_2d p2;
+
+ // Example: translate a point over (5,5)
+ strategy::transform::translate_transformer<point_2d, point_2d> translate(5, 5);
+
+ transform(p, p2, translate);
+ std::cout << "transformed point " << ggl::dsv(p2) << std::endl;
+
+ // Transform a polygon
+ polygon_2d poly, poly2;
+ const double coor[][2] = { {0, 0}, {0, 7}, {2, 2}, {2, 0}, {0, 0} };
+ // note that for this syntax you have to include the two
+ // include files above (c_array_cartesian.hpp, std_as_linestring.hpp)
+ assign(poly, coor);
+ //read_wkt("POLYGON((0 0,0 7,4 2,2 0,0 0))", poly);
+ transform(poly, poly2, translate);
+
+ std::cout << "source polygon " << ggl::dsv(poly) << std::endl;
+ std::cout << "transformed polygon " << ggl::dsv(poly2) << std::endl;
+
+ // Many more transformations are possible:
+ // - from Cartesian to Spherical coordinate systems and back
+ // - from Cartesian to Cartesian (mapping, affine transformations) and back (inverse)
+ // - Map Projections
+ // - from Degree to Radian and back in spherical or geographic coordinate systems
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/example/06_transformation_example.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/06_transformation_example.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="06_transformation_example"
+ ProjectGUID="{34346EC5-1EE8-49D5-AF24-D915B4D7D144}"
+ RootNamespace="06_transformation_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\06_transformation_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="false"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\06_transformation_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\06_transformation_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/example/07_graph_route_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/07_graph_route_example.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,400 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Example showing GGL combined with Boost.Graph, calculating shortest routes
+// input: two WKT's, provided in subfolder data
+// output: text, + an SVG, displayable in e.g. Firefox)
+
+#include <iostream>
+#include <fstream>
+#include <iomanip>
+#include <limits>
+
+#include <boost/tuple/tuple.hpp>
+#include <boost/foreach.hpp>
+
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/graph/dijkstra_shortest_paths.hpp>
+
+#include <ggl/ggl.hpp>
+#include <ggl/geometries/cartesian2d.hpp>
+
+
+// Yes, this example currently uses some extensions:
+
+ // For input:
+ #include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+
+ // For output:
+ #include <ggl/extensions/io/svg/write_svg.hpp>
+
+ // For distance-calculations over the Earth:
+ #include <ggl/extensions/gis/geographic/strategies/andoyer.hpp>
+
+
+
+// Read an ASCII file containing WKT's, fill a vector of tuples
+// The tuples consist of at least <0> a geometry and <1> an identifying string
+template <typename Geometry, typename Tuple, typename Box>
+void read_wkt(std::string const& filename, std::vector<Tuple>& tuples, Box& box)
+{
+ std::ifstream cpp_file(filename.c_str());
+ if (cpp_file.is_open())
+ {
+ while (! cpp_file.eof() )
+ {
+ std::string line;
+ std::getline(cpp_file, line);
+ Geometry geometry;
+ boost::trim(line);
+ if (! line.empty() && ! boost::starts_with(line, "#"))
+ {
+ std::string name;
+
+ // Split at ';', if any
+ std::string::size_type pos = line.find(";");
+ if (pos != std::string::npos)
+ {
+ name = line.substr(pos + 1);
+ line.erase(pos);
+
+ boost::trim(line);
+ boost::trim(name);
+ }
+
+ Geometry geometry;
+ ggl::read_wkt(line, geometry);
+
+ Tuple tuple(geometry, name);
+
+ tuples.push_back(tuple);
+ ggl::combine(box, ggl::make_envelope<Box>(geometry));
+ }
+ }
+ }
+}
+
+// Boilerplate code to initialize the SVG XML.
+// Note that this is (on purpose) not part of the library but of this sample.
+// GGL itself only streams small pieces of SVG, in any coordinate system
+void svg_header(std::ofstream& stream)
+{
+ stream << "<?xml version=\"1.0\" standalone=\"no\"?>" << std::endl;
+ stream << "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"" << std::endl;
+ stream << "\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">" << std::endl;
+
+ stream << "<svg width=\"100%\" height=\"100%\" version=\"1.1\"" << std::endl;
+ stream << "xmlns=\"http://www.w3.org/2000/svg\">" << std::endl;
+}
+
+
+// Code to define properties for Boost Graph's
+enum vertex_ggl_property_t { vertex_ggl_property };
+enum edge_ggl_property_t { edge_ggl_property };
+namespace boost
+{
+ BOOST_INSTALL_PROPERTY(vertex, ggl_property);
+ BOOST_INSTALL_PROPERTY(edge, ggl_property);
+}
+
+// Define properties for vertex
+template <typename Point>
+struct ggl_vertex_property
+{
+ ggl_vertex_property()
+ {
+ ggl::assign_zero(location);
+ }
+ ggl_vertex_property(Point const& loc)
+ {
+ location = loc;
+ }
+
+ Point location;
+};
+
+// Define properties for edge
+template <typename Linestring>
+struct ggl_edge_property
+{
+ ggl_edge_property(Linestring const& line)
+ : m_line(line)
+ {
+ m_length = ggl::length(line);
+ }
+
+ inline operator double() const
+ {
+ return m_length;
+ }
+
+ inline Linestring const& line() const
+ {
+ return m_line;
+ }
+
+private :
+ double m_length;
+ Linestring m_line;
+};
+
+// Utility function to add a vertex to a graph. It might exist already. Then do not insert,
+// but return vertex descriptor back. It might not exist. Then add it (and return).
+// To efficiently handle this, a std::map is used.
+template <typename M, typename K, typename G>
+inline typename boost::graph_traits<G>::vertex_descriptor find_or_insert(M& map, K const& key, G& graph)
+{
+ typename M::const_iterator it = map.find(key);
+ if (it == map.end())
+ {
+ // Add a vertex to the graph
+ typename boost::graph_traits<G>::vertex_descriptor new_vertex
+ = boost::add_vertex(graph);
+
+ // Set the property (= location)
+ boost::put(boost::get(vertex_ggl_property, graph), new_vertex,
+ ggl_vertex_property<typename M::key_type>(key));
+
+ // Add to the map, using POINT as key
+ map[key] = new_vertex;
+ return new_vertex;
+ }
+ return it->second;
+}
+
+template
+<
+ typename Line,
+ typename Graph,
+ typename RoadTupleVector,
+ typename CityTupleVector
+>
+void add_roads_and_connect_cities(Graph& graph,
+ RoadTupleVector const& roads,
+ CityTupleVector& cities)
+{
+ typedef typename ggl::point_type<Line>::type point_type;
+
+ typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_type;
+
+ // Define a map to be used during graph filling
+ // Maps from point to vertex-id's
+ typedef std::map<point_type, vertex_type, ggl::less<point_type> > map_type;
+ map_type map;
+
+
+ // Fill the graph
+ typedef typename boost::range_value<RoadTupleVector>::type road_type;
+ BOOST_FOREACH(road_type const& road, roads)
+ {
+ // Find or add begin/end point of these line
+ vertex_type from = find_or_insert(map, road.get<0>().front(), graph);
+ vertex_type to = find_or_insert(map, road.get<0>().back(), graph);
+ boost::add_edge(from, to, ggl_edge_property<Line>(road.get<0>()), graph);
+ }
+
+ // Find nearest graph vertex for each city, using the map
+ typedef typename boost::range_value<CityTupleVector>::type city_type;
+ BOOST_FOREACH(city_type& city, cities)
+ {
+ double min_distance = 1e300;
+ for(typename map_type::const_iterator it = map.begin(); it != map.end(); ++it)
+ {
+ double dist = ggl::distance(it->first, city.get<0>());
+ if (dist < min_distance)
+ {
+ min_distance = dist;
+ // Set the vertex
+ city.get<2>() = it->second;
+ }
+ }
+ }
+}
+
+template <typename Graph, typename Route>
+inline void add_edge_to_route(Graph const& graph,
+ typename boost::graph_traits<Graph>::vertex_descriptor vertex1,
+ typename boost::graph_traits<Graph>::vertex_descriptor vertex2,
+ Route& route)
+{
+ std::pair
+ <
+ typename boost::graph_traits<Graph>::edge_descriptor,
+ bool
+ > opt_edge = boost::edge(vertex1, vertex2, graph);
+ if (opt_edge.second)
+ {
+ // Get properties of edge and of vertex
+ ggl_edge_property<Route> const& edge_prop =
+ boost::get(boost::get(edge_ggl_property, graph), opt_edge.first);
+
+ ggl_vertex_property<typename ggl::point_type<Route>::type> const& vertex_prop =
+ boost::get(boost::get(vertex_ggl_property, graph), vertex2);
+
+ // Depending on how edge connects to vertex, copy it forward or backward
+ if (ggl::equals(edge_prop.line().front(), vertex_prop.location))
+ {
+ std::copy(edge_prop.line().begin(), edge_prop.line().end(),
+ std::back_inserter(route));
+ }
+ else
+ {
+ std::reverse_copy(edge_prop.line().begin(), edge_prop.line().end(),
+ std::back_inserter(route));
+ }
+ }
+}
+
+
+template <typename Graph, typename Route>
+inline void build_route(Graph const& graph,
+ std::vector<typename boost::graph_traits<Graph>::vertex_descriptor> const& predecessors,
+ typename boost::graph_traits<Graph>::vertex_descriptor vertex1,
+ typename boost::graph_traits<Graph>::vertex_descriptor vertex2,
+ Route& route)
+{
+ typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_type;
+ vertex_type pred = predecessors[vertex2];
+
+ add_edge_to_route(graph, vertex2, pred, route);
+ while (pred != vertex1)
+ {
+ add_edge_to_route(graph, predecessors[pred], pred, route);
+ pred = predecessors[pred];
+ }
+}
+
+
+int main()
+{
+ // Define a point in the Geographic coordinate system
+ typedef ggl::point<double, 2, ggl::cs::geographic<ggl::degree> > point_type;
+
+ typedef ggl::linestring<point_type> line_type;
+
+ // Define the graph, lateron containing the road network
+ typedef boost::adjacency_list
+ <
+ boost::vecS, boost::vecS, boost::undirectedS
+ , boost::property<vertex_ggl_property_t, ggl_vertex_property<point_type> >
+ , boost::property<edge_ggl_property_t, ggl_edge_property<line_type> >
+ > graph_type;
+
+ typedef boost::graph_traits<graph_type>::vertex_descriptor vertex_type;
+
+
+ // Init a bounding box, lateron used to define SVG map
+ ggl::box_2d box;
+ ggl::assign_inverse(box);
+
+ // Read the cities
+ typedef boost::tuple<point_type, std::string, vertex_type> city_type;
+ std::vector<city_type> cities;
+ read_wkt<point_type>("data/cities.wkt", cities, box);
+
+ // Read the road network
+ typedef boost::tuple<line_type, std::string> road_type;
+ std::vector<road_type> roads;
+ read_wkt<line_type>("data/roads.wkt", roads, box);
+
+
+ graph_type graph;
+
+ // Add roads and connect cities
+ add_roads_and_connect_cities<line_type>(graph, roads, cities);
+
+ double const km = 1000.0;
+ std::cout << "distances, all in KM" << std::endl
+ << std::fixed << std::setprecision(0);
+
+ // Main functionality: calculate shortest routes from/to all cities
+
+ // For the first one, the complete route is stored as a linestring
+ bool first = true;
+ line_type route;
+
+ int const n = boost::num_vertices(graph);
+ BOOST_FOREACH(city_type const& city1, cities)
+ {
+ std::vector<vertex_type> predecessors(n);
+ std::vector<double> costs(n);
+
+ // Call Dijkstra (without named-parameter to be compatible with all VC)
+ boost::dijkstra_shortest_paths(graph, city1.get<2>(),
+ &predecessors[0], &costs[0],
+ boost::get(edge_ggl_property, graph),
+ boost::get(boost::vertex_index, graph),
+ std::less<double>(), std::plus<double>(),
+ (std::numeric_limits<double>::max)(), double(),
+ boost::dijkstra_visitor<boost::null_visitor>());
+
+ BOOST_FOREACH(city_type const& city2, cities)
+ {
+ if (! boost::equals(city1.get<1>(), city2.get<1>()))
+ {
+ double distance = costs[city2.get<2>()] / km;
+ double acof = ggl::distance(city1.get<0>(), city2.get<0>()) / km;
+
+ std::cout
+ << std::setiosflags (std::ios_base::left) << std::setw(15)
+ << city1.get<1>() << " - "
+ << std::setiosflags (std::ios_base::left) << std::setw(15)
+ << city2.get<1>()
+ << " -> through the air: " << std::setw(4) << acof
+ << " , over the road: " << std::setw(4) << distance
+ << std::endl;
+
+ if (first)
+ {
+ build_route(graph, predecessors,
+ city1.get<2>(), city2.get<2>(),
+ route);
+ first = false;
+ }
+ }
+ }
+ }
+
+ // Create the SVG
+ typedef ggl::point_xy<int> svg_point_type;
+ std::ofstream stream("routes.svg");
+ svg_header(stream);
+
+ ggl::strategy::transform::map_transformer
+ <
+ point_type,
+ svg_point_type, true, true
+ > matrix(box, 1000, 800);
+
+ // Map roads
+ BOOST_FOREACH(road_type const& road, roads)
+ {
+ ggl::linestring<svg_point_type> line;
+ ggl::transform(road.get<0>(), line, matrix);
+ stream << ggl::svg(line, "stroke:rgb(128,128,128);stroke-width:1") << std::endl;
+ }
+
+ // Map the calculated route as thicker green transparent markation
+ {
+ ggl::linestring<svg_point_type> line;
+ ggl::transform(route, line, matrix);
+ stream << ggl::svg(line, "stroke:rgb(0, 255, 0);stroke-width:6;opacity:0.5") << std::endl;
+ }
+
+ // Map cities
+ BOOST_FOREACH(city_type const& city, cities)
+ {
+ svg_point_type point;
+ ggl::transform(city.get<0>(), point, matrix);
+ stream << ggl::svg(point, "fill:rgb(255,255,0);stroke:rgb(0,0,0);stroke-width:1") << std::endl;
+ }
+
+ stream << "</svg>" << std::endl;
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/example/07_graph_route_example.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/07_graph_route_example.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="07_graph_route_example"
+ ProjectGUID="{47D30DD8-CBB1-4527-811F-F0193E22B317}"
+ RootNamespace="07_graph_route_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\07_graph_route_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="false"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\07_graph_route_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\07_graph_route_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/example/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/Jamfile.v2 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,31 @@
+# example/Jamfile.v2 controls building of Generic Geometry Library examples
+#
+# Copyright Barend Gehrels, Geodan Holding B.V. Amsterdam, the Netherlands.
+# Copyright (c) 2009 Mateusz Loskot <mateusz_at_[hidden]>
+# Use, modification and distribution is subject to the Boost Software License,
+# Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+project ggl-example
+ :
+ requirements
+ <include>../../../boost
+ <toolset>gcc:<cxxflags>-pedantic
+ ;
+
+#
+# Build core examples
+#
+exe 01_point_example : 01_point_example.cpp ;
+exe 02_linestring_example : 02_linestring_example.cpp ;
+exe 03_polygon_example : 03_polygon_example.cpp ;
+exe 06_transformation_example : 06_transformation_example.cpp ;
+exe 07_graph_route_example : 07_graph_route_example.cpp ;
+
+exe c01_custom_point_example : c01_custom_point_example.cpp ;
+exe c02_custom_box_example : c02_custom_box_example.cpp ;
+exe c03_custom_linestring_example : c03_custom_linestring_example.cpp ;
+exe c04_a_custom_triangle_example : c04_a_custom_triangle_example.cpp ;
+exe c04_b_custom_triangle_example : c04_b_custom_triangle_example.cpp ;
+exe c05_custom_point_pointer_example : c05_custom_point_pointer_example.cpp ;
+
Added: sandbox/ggl/formal_review/libs/ggl/example/boost.vsprops
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/boost.vsprops 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="boost"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(BOOST_ROOT)"
+ WarningLevel="3"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories="$(BOOST_ROOT)\lib"
+ />
+ <UserMacro
+ Name="BOOST_ROOT"
+ Value="C:\Program Files\boost\boost_1_40"
+ />
+</VisualStudioPropertySheet>
Added: sandbox/ggl/formal_review/libs/ggl/example/c01_custom_point_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/c01_custom_point_example.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,136 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Custom point Example
+
+#include <iostream>
+
+#include <ggl/algorithms/distance.hpp>
+#include <ggl/algorithms/make.hpp>
+#include <ggl/geometries/register/point.hpp>
+#include <ggl/strategies/strategies.hpp>
+#include <ggl/util/write_dsv.hpp>
+
+// Sample point, defining three color values
+struct my_color_point
+{
+ double red, green, blue;
+};
+
+// Sample point, having an int array defined
+struct my_array_point
+{
+ int c[3];
+};
+
+// Sample point, having x/y
+struct my_2d
+{
+ float x,y;
+};
+
+// Sample class, protected and construction-time-only x/y,
+// Can (of course) only used in algorithms which take const& points
+class my_class_ro
+{
+public:
+ my_class_ro(double x, double y) : m_x(x), m_y(y) {}
+ double x() const { return m_x; }
+ double y() const { return m_y; }
+private:
+ double m_x, m_y;
+};
+
+// Sample class using references for read/write
+class my_class_rw
+{
+public:
+ const double& x() const { return m_x; }
+ const double& y() const { return m_y; }
+ double& x() { return m_x; }
+ double& y() { return m_y; }
+private:
+ double m_x, m_y;
+};
+
+// Sample class using getters / setters
+class my_class_gs
+{
+public:
+ const double get_x() const { return m_x; }
+ const double get_y() const { return m_y; }
+ void set_x(double v) { m_x = v; }
+ void set_y(double v) { m_y = v; }
+private:
+ double m_x, m_y;
+};
+
+GEOMETRY_REGISTER_POINT_3D(my_color_point, double, cs::cartesian, red, green, blue)
+GEOMETRY_REGISTER_POINT_3D(my_array_point, int, cs::cartesian, c[0], c[1], c[2])
+GEOMETRY_REGISTER_POINT_2D(my_2d, float, cs::cartesian, x, y)
+GEOMETRY_REGISTER_POINT_2D_CONST(my_class_ro, double, cs::cartesian, x(), y())
+GEOMETRY_REGISTER_POINT_2D(my_class_rw, double, cs::cartesian, x(), y())
+GEOMETRY_REGISTER_POINT_2D_GET_SET(my_class_gs, double, cs::cartesian, get_x, get_y, set_x, set_y)
+
+int main()
+{
+ // Create 2 instances of our custom color point
+ my_color_point c1 = ggl::make<my_color_point>(255, 3, 233);
+ my_color_point c2 = ggl::make<my_color_point>(0, 50, 200);
+
+ // The distance between them can be calculated using the cartesian method (=pythagoras)
+ // provided with the library, configured by the coordinate_system type of the point
+ std::cout << "color distance "
+ << ggl::dsv(c1) << " to "
+ << ggl::dsv(c2) << " is "
+ << ggl::distance(c1,c2) << std::endl;
+
+ my_array_point a1 = {{0}};
+ my_array_point a2 = {{0}};
+ ggl::assign(a1, 1, 2, 3);
+ ggl::assign(a2, 3, 2, 1);
+
+ std::cout << "color distance "
+ << ggl::dsv(a1) << " to "
+ << ggl::dsv(a2) << " is "
+ << ggl::distance(a1,a2) << std::endl;
+
+ my_2d p1 = {1, 5};
+ my_2d p2 = {3, 4};
+ std::cout << "float distance "
+ << ggl::dsv(p1) << " to "
+ << ggl::dsv(p2) << " is "
+ << ggl::distance(p1,p2) << std::endl;
+
+ my_class_ro cro1(1, 2);
+ my_class_ro cro2(3, 4);
+ std::cout << "class ro distance "
+ << ggl::dsv(cro1) << " to "
+ << ggl::dsv(cro2) << " is "
+ << ggl::distance(cro1,cro2) << std::endl;
+
+ my_class_rw crw1;
+ my_class_rw crw2;
+ ggl::assign(crw1, 1, 2);
+ ggl::assign(crw2, 3, 4);
+ std::cout << "class r/w distance "
+ << ggl::dsv(crw1) << " to "
+ << ggl::dsv(crw2) << " is "
+ << ggl::distance(crw1,crw2) << std::endl;
+
+ my_class_gs cgs1;
+ my_class_gs cgs2;
+ ggl::assign(cgs1, 1, 2);
+ ggl::assign(cgs2, 3, 4);
+ std::cout << "class g/s distance "
+ << ggl::dsv(crw1) << " to "
+ << ggl::dsv(crw2) << " is "
+ << ggl::distance(cgs1,cgs2) << std::endl;
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/example/c01_custom_point_example.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/c01_custom_point_example.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="c01_custom_point_example"
+ ProjectGUID="{B368C99D-8464-493C-A05B-904F53909046}"
+ RootNamespace="c01_custom_point_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\c01_custom_point_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="false"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\c01_custom_point_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\c01_custom_point_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/example/c02_custom_box_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/c02_custom_box_example.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,76 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Custom point Example
+
+#include <iostream>
+
+#include <ggl/algorithms/make.hpp>
+#include <ggl/algorithms/within.hpp>
+#include <ggl/geometries/register/point.hpp>
+#include <ggl/geometries/register/box.hpp>
+#include <ggl/strategies/strategies.hpp>
+#include <ggl/util/write_dsv.hpp>
+
+struct my_point
+{
+ double x, y;
+};
+
+struct my_int_point
+{
+ int x, y;
+};
+
+struct my_box
+{
+ my_point ll, ur;
+};
+
+struct my_box_ltrb
+{
+ int left, top, right, bottom;
+};
+
+struct my_box_4
+{
+ double coors[4];
+};
+
+template <typename P>
+struct my_box_t
+{
+ P ll, ur;
+};
+
+GEOMETRY_REGISTER_POINT_2D(my_point, double, cs::cartesian, x, y)
+GEOMETRY_REGISTER_POINT_2D(my_int_point, int, cs::cartesian, x, y)
+GEOMETRY_REGISTER_BOX(my_box, my_point, ll, ur)
+GEOMETRY_REGISTER_BOX_TEMPLATIZED(my_box_t, ll, ur)
+GEOMETRY_REGISTER_BOX_2D_4VALUES(my_box_ltrb, my_int_point, left, top, right, bottom)
+GEOMETRY_REGISTER_BOX_2D_4VALUES(my_box_4, my_point, coors[0], coors[1], coors[2], coors[3])
+
+int main()
+{
+ my_point p = ggl::make<my_point>(3.5, 3.5);
+ my_box b = ggl::make<my_box>(0, 0, 2, 2);
+ my_box_ltrb b1 = ggl::make<my_box_ltrb>(0, 0, 3, 3);
+ my_box_4 b4 = ggl::make<my_box_4>(0, 0, 4, 4);
+ my_box_t<my_point> bt = ggl::make<my_box_t<my_point> >(0, 0, 5, 5);
+
+ std::cout << ggl::dsv(p) << " IN " << ggl::dsv(b)
+ << " : " << int(ggl::within(p, b)) << std::endl;
+ std::cout << ggl::dsv(p) << " IN " << ggl::dsv(b1)
+ << " : " << int(ggl::within(p, b1)) << std::endl;
+ std::cout << ggl::dsv(p) << " IN " << ggl::dsv(b4)
+ << " : " << int(ggl::within(p, b4)) << std::endl;
+ std::cout << ggl::dsv(p) << " IN " << ggl::dsv(bt)
+ << " : " << int(ggl::within(p, bt)) << std::endl;
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/example/c02_custom_box_example.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/c02_custom_box_example.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="c02_custom_box_example"
+ ProjectGUID="{1A68AD9E-7C1A-4340-A8C9-D5362609B0C1}"
+ RootNamespace="c02_custom_box_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\c02_custom_box_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="false"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\c02_custom_box_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\c02_custom_box_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/example/c03_custom_linestring_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/c03_custom_linestring_example.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,86 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Custom Linestring Example
+
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include <ggl/ggl.hpp>
+#include <ggl/geometries/register/point.hpp>
+#include <ggl/geometries/register/linestring.hpp>
+
+// To register the 'geographic' distance function to calculate distance over the earth:
+#include <ggl/extensions/gis/geographic/strategies/andoyer.hpp>
+#include <ggl/algorithms/parse.hpp>
+
+// Define a GPS point with coordinates in latitude/longitude and some additional values
+struct gps_point
+{
+ double latitude, longitude, height;
+ double speed;
+ // Date/time, heading, etc could be added
+
+ // The default constructor is required if being used in a vector
+ gps_point() {}
+
+ // Define a constructor to create the point in one line. Order of latitude/longitude
+ // does not matter as long as "E", "N", etc are included
+ gps_point(std::string const& c1, std::string const& c2, double h, double s)
+ : height(h)
+ , speed(s)
+ {
+ ggl::parse(*this, c1, c2);
+ }
+};
+
+// Declare a custom linestring which will have the GPS points
+struct gps_track : std::vector<gps_point>
+{
+ std::string owner;
+ int route_identifier;
+ // etc
+
+ gps_track(int i, std::string const& o)
+ : owner(o)
+ , route_identifier(i)
+ {}
+};
+
+
+// Register this point as being a recognizable point by the GGL
+GEOMETRY_REGISTER_POINT_2D(gps_point, double, cs::geographic<degree>, longitude, latitude)
+
+
+// Register the track as well, as being a "linestring"
+GEOMETRY_REGISTER_LINESTRING(gps_track)
+
+
+int main()
+{
+ // Declare a "GPS Track" and add some GPS points
+ gps_track track(23, "Mister G");
+ track.push_back(gps_point("52 22 23 N", "4 53 32 E", 50, 180));
+ track.push_back(gps_point("52 10 00 N", "4 59 59 E", 110, 170));
+ track.push_back(gps_point("52 5 20 N", "5 6 56 E", 0, 90));
+
+ std::cout
+ << "track: " << track.route_identifier << std::endl
+ << "from: " << track.owner << std::endl
+ << "as wkt: " << ggl::dsv(track) << std::endl
+ << "length: " << ggl::length(track)/1000.0 << " km" << std::endl;
+
+ // Above gives the idea, shows that custom linestrings can be useful.
+ // We could of course do anything with this track which the library can handle, e.g.:
+ // - simplify it
+ // - calculate distance of point-to-line
+ // - project it to UTM, then transform it to a GIF image (see p03_example)
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/example/c03_custom_linestring_example.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/c03_custom_linestring_example.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="c03_custom_linestring_example"
+ ProjectGUID="{D24F5517-E2B5-4933-B6E7-47A2F8A08911}"
+ RootNamespace="c03_custom_linestring_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\c03_custom_linestring_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="false"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\c03_custom_linestring_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\c03_custom_linestring_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/example/c04_a_custom_triangle_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/c04_a_custom_triangle_example.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,79 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Custom Triangle Example
+
+#include <iostream>
+
+#include <boost/array.hpp>
+
+#include <ggl/algorithms/area.hpp>
+#include <ggl/algorithms/centroid.hpp>
+#include <ggl/geometries/register/ring.hpp>
+#include <ggl/strategies/strategies.hpp>
+#include <ggl/util/write_dsv.hpp>
+
+
+struct triangle : public boost::array<ggl::point_xy<double>, 4>
+{
+ inline void close()
+ {
+ (*this)[3] = (*this)[0];
+ }
+};
+
+
+GEOMETRY_REGISTER_RING(triangle)
+
+
+// Specializations of algorithms, where useful. If not specialized the default ones
+// (for linear rings) will be used for triangle. Which is OK as long as the triangle
+// is closed, that means, has 4 points (the last one being the first).
+namespace ggl {
+
+template<>
+inline double area<triangle>(const triangle& t)
+{
+ /* C
+ / \
+ / \
+ A-----B
+
+ ((Bx - Ax) * (Cy - Ay)) - ((Cx - Ax) * (By - Ay))
+ -------------------------------------------------
+ 2
+ */
+
+ return 0.5 * ((t[1].x() - t[0].x()) * (t[2].y() - t[0].y())
+ - (t[2].x() - t[0].x()) * (t[1].y() - t[0].y()));
+}
+
+} // namespace ggl
+
+int main()
+{
+ triangle t;
+
+ t[0].x(0);
+ t[0].y(0);
+ t[1].x(5);
+ t[1].y(0);
+ t[2].x(2.5);
+ t[2].y(2.5);
+
+ t.close();
+
+ std::cout << "Triangle: " << ggl::dsv(t) << std::endl;
+ std::cout << "Area: " << ggl::area(t) << std::endl;
+
+ ggl::point_xy<double> c;
+ ggl::centroid(t, c);
+ std::cout << "Centroid: " << ggl::dsv(c) << std::endl;
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/example/c04_a_custom_triangle_example.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/c04_a_custom_triangle_example.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="c04_a_custom_triangle_example"
+ ProjectGUID="{5E12A414-E180-4E5F-A575-CC98B449B278}"
+ RootNamespace="c04_a_custom_triangle_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\c04_a_custom_triangle_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="false"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\c04_a_custom_triangle_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\c04_a_custom_triangle_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/example/c04_b_custom_triangle_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/c04_b_custom_triangle_example.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,68 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Custom triangle template Example
+
+#include <iostream>
+
+#include <boost/array.hpp>
+#include <boost/tuple/tuple.hpp>
+
+#include <ggl/algorithms/area.hpp>
+#include <ggl/algorithms/centroid.hpp>
+#include <ggl/geometries/adapted/tuple.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+#include <ggl/geometries/register/ring.hpp>
+#include <ggl/strategies/strategies.hpp>
+#include <ggl/util/write_dsv.hpp>
+
+
+
+template <typename P>
+struct triangle : public boost::array<P, 3>
+{
+};
+
+// Register triangle<P>
+GEOMETRY_REGISTER_RING_TEMPLATIZED(triangle)
+
+
+namespace ggl { namespace dispatch {
+
+// Specializations of area dispatch structure, implement algorithm
+template<typename P, typename S>
+struct area<ring_tag, triangle<P>, clockwise, S>
+{
+ static inline double apply(triangle<P> const& t, S const&)
+ {
+ return 0.5 * ((get<0>(t[1]) - get<0>(t[0])) * (get<1>(t[2]) - get<1>(t[0]))
+ - (get<0>(t[2]) - get<0>(t[0])) * (get<1>(t[1]) - get<1>(t[0])));
+ }
+};
+
+}} // namespace ggl::dispatch
+
+
+int main()
+{
+ //triangle<ggl::point_xy<double> > t;
+ triangle<boost::tuple<double, double> > t;
+ t[0] = boost::make_tuple(0, 0);
+ t[1] = boost::make_tuple(5, 0);
+ t[2] = boost::make_tuple(2.5, 2.5);
+
+ std::cout << "Triangle: " << ggl::dsv(t) << std::endl;
+ std::cout << "Area: " << ggl::area(t) << std::endl;
+
+ //ggl::point_xy<double> c;
+ boost::tuple<double, double> c;
+ ggl::centroid(t, c);
+ std::cout << "Centroid: " << ggl::dsv(c) << std::endl;
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/example/c04_b_custom_triangle_example.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/c04_b_custom_triangle_example.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="c04_b_custom_triangle_example"
+ ProjectGUID="{D005D88D-50BD-4D80-8C3B-72F81B1B9719}"
+ RootNamespace="c04_b_custom_triangle_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\c04_b_custom_triangle_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="false"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\c04_b_custom_triangle_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\c04_b_custom_triangle_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/example/c05_custom_point_pointer_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/c05_custom_point_pointer_example.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,111 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Custom pointer-to-point example
+
+#include <iostream>
+
+#include <ggl/algorithms/distance.hpp>
+#include <ggl/algorithms/length.hpp>
+#include <ggl/algorithms/make.hpp>
+#include <ggl/algorithms/intersection.hpp>
+#include <ggl/geometries/cartesian2d.hpp>
+#include <ggl/geometries/adapted/std_as_linestring.hpp>
+#include <ggl/strategies/strategies.hpp>
+
+// Sample point, having x/y
+struct my_point
+{
+ double x,y;
+};
+
+
+namespace ggl { namespace traits {
+
+template<> struct tag<my_point*>
+{ typedef point_tag type; };
+
+template<> struct coordinate_type<my_point*>
+{ typedef double type; };
+
+template<> struct coordinate_system<my_point*>
+{ typedef cs::cartesian type; };
+
+template<> struct dimension<my_point*> : boost::mpl::int_<2> {};
+
+template<>
+struct access<my_point*, 0>
+{
+ static double get(my_point const* p)
+ {
+ return p->x;
+ }
+
+ static void set(my_point* p, double const& value)
+ {
+ p->x = value;
+ }
+};
+
+template<>
+struct access<my_point*, 1>
+{
+ static double get(my_point const* p)
+ {
+ return p->y;
+ }
+
+ static void set(my_point* p, double const& value)
+ {
+ p->y = value;
+ }
+};
+
+}} // namespace ggl::traits
+
+
+
+int main()
+{
+ typedef std::vector<my_point*> ln;
+ ln myline;
+ for (float i = 0.0; i < 10.0; i++)
+ {
+ my_point* p = new my_point;
+ p->x = i;
+ p->y = i + 1;
+ myline.push_back(p);
+ }
+
+ std::cout << ggl::length(myline) << std::endl;
+
+ ggl::box_2d cb(ggl::point_2d(1.5, 1.5), ggl::point_2d(4.5, 4.5));
+
+ // This will NOT work because would need dynamicly allocating memory for point* in algorithms:
+ // std::vector<ln> clipped;
+ //ggl::intersection(cb, myline, std::back_inserter(clipped));
+
+ // This works because outputs to a normal struct point, no point*
+ std::vector<ggl::linestring_2d> clipped;
+ ggl::strategy::intersection::liang_barsky<ggl::box_2d, ggl::point_2d> strategy;
+ ggl::detail::intersection::clip_linestring_with_box<ggl::linestring_2d>(cb,
+ myline, std::back_inserter(clipped), strategy);
+
+
+ std::cout << ggl::length(clipped.front()) << std::endl;
+
+ // free
+ for (unsigned int i = 0; i < myline.size(); i++)
+ {
+ delete myline[i];
+ }
+
+
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/example/c05_custom_point_pointer_example.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/c05_custom_point_pointer_example.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="c05_custom_point_pointer_example"
+ ProjectGUID="{DAC38456-5241-4DDB-87FF-74A2FF7DE368}"
+ RootNamespace="c05_custom_point_pointer_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\c05_custom_point_pointer_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="false"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\c05_custom_point_pointer_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../boost"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\c05_custom_point_pointer_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/example/contrib/readme.txt
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/contrib/readme.txt 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,8 @@
+To compile the SOCI samples:
+
+Create a folder soci-3.0.0 and put soci there such that there are
+contrib/soci-3.0.0/src
+contrib/soci-3.0.0/src/core
+contrib/soci-3.0.0/src/backends
+etc
+
Added: sandbox/ggl/formal_review/libs/ggl/example/custom_examples.sln
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/custom_examples.sln 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,49 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "c01_custom_point_example", "c01_custom_point_example.vcproj", "{B368C99D-8464-493C-A05B-904F53909046}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "c04_a_custom_triangle_example", "c04_a_custom_triangle_example.vcproj", "{5E12A414-E180-4E5F-A575-CC98B449B278}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "c04_b_custom_triangle_example", "c04_b_custom_triangle_example.vcproj", "{D005D88D-50BD-4D80-8C3B-72F81B1B9719}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "c02_custom_box_example", "c02_custom_box_example.vcproj", "{1A68AD9E-7C1A-4340-A8C9-D5362609B0C1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "c03_custom_linestring_example", "c03_custom_linestring_example.vcproj", "{D24F5517-E2B5-4933-B6E7-47A2F8A08911}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "c05_custom_point_pointer_example", "c05_custom_point_pointer_example.vcproj", "{DAC38456-5241-4DDB-87FF-74A2FF7DE368}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {B368C99D-8464-493C-A05B-904F53909046}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B368C99D-8464-493C-A05B-904F53909046}.Debug|Win32.Build.0 = Debug|Win32
+ {B368C99D-8464-493C-A05B-904F53909046}.Release|Win32.ActiveCfg = Release|Win32
+ {B368C99D-8464-493C-A05B-904F53909046}.Release|Win32.Build.0 = Release|Win32
+ {5E12A414-E180-4E5F-A575-CC98B449B278}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5E12A414-E180-4E5F-A575-CC98B449B278}.Debug|Win32.Build.0 = Debug|Win32
+ {5E12A414-E180-4E5F-A575-CC98B449B278}.Release|Win32.ActiveCfg = Release|Win32
+ {5E12A414-E180-4E5F-A575-CC98B449B278}.Release|Win32.Build.0 = Release|Win32
+ {D005D88D-50BD-4D80-8C3B-72F81B1B9719}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D005D88D-50BD-4D80-8C3B-72F81B1B9719}.Debug|Win32.Build.0 = Debug|Win32
+ {D005D88D-50BD-4D80-8C3B-72F81B1B9719}.Release|Win32.ActiveCfg = Release|Win32
+ {D005D88D-50BD-4D80-8C3B-72F81B1B9719}.Release|Win32.Build.0 = Release|Win32
+ {1A68AD9E-7C1A-4340-A8C9-D5362609B0C1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1A68AD9E-7C1A-4340-A8C9-D5362609B0C1}.Debug|Win32.Build.0 = Debug|Win32
+ {1A68AD9E-7C1A-4340-A8C9-D5362609B0C1}.Release|Win32.ActiveCfg = Release|Win32
+ {1A68AD9E-7C1A-4340-A8C9-D5362609B0C1}.Release|Win32.Build.0 = Release|Win32
+ {D24F5517-E2B5-4933-B6E7-47A2F8A08911}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D24F5517-E2B5-4933-B6E7-47A2F8A08911}.Debug|Win32.Build.0 = Debug|Win32
+ {D24F5517-E2B5-4933-B6E7-47A2F8A08911}.Release|Win32.ActiveCfg = Release|Win32
+ {D24F5517-E2B5-4933-B6E7-47A2F8A08911}.Release|Win32.Build.0 = Release|Win32
+ {DAC38456-5241-4DDB-87FF-74A2FF7DE368}.Debug|Win32.ActiveCfg = Debug|Win32
+ {DAC38456-5241-4DDB-87FF-74A2FF7DE368}.Debug|Win32.Build.0 = Debug|Win32
+ {DAC38456-5241-4DDB-87FF-74A2FF7DE368}.Release|Win32.ActiveCfg = Release|Win32
+ {DAC38456-5241-4DDB-87FF-74A2FF7DE368}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
Added: sandbox/ggl/formal_review/libs/ggl/example/data/cities.sql
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/data/cities.sql 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,21 @@
+-- script to generate cities table for PostGis
+-- used in examples
+
+-- Source: http://www.realestate3d.com/gps/latlong.htm
+
+create user ggl password 'ggl' createdb;
+create database ggl owner=ggl template=postgis;
+
+
+drop table if exists cities;
+create table cities(id serial primary key, name varchar(25));
+
+select addgeometrycolumn('','cities','location','4326','POINT',2);
+insert into cities(location, name) values(GeometryFromText('POINT( -71.03 42.37)', 4326), 'Boston');
+insert into cities(location, name) values(GeometryFromText('POINT( -87.65 41.90)', 4326), 'Chicago');
+insert into cities(location, name) values(GeometryFromText('POINT( -95.35 29.97)', 4326), 'Houston');
+insert into cities(location, name) values(GeometryFromText('POINT(-118.40 33.93)', 4326), 'Los Angeles');
+insert into cities(location, name) values(GeometryFromText('POINT( -80.28 25.82)', 4326), 'Miami');
+insert into cities(location, name) values(GeometryFromText('POINT( -73.98 40.77)', 4326), 'New York');
+insert into cities(location, name) values(GeometryFromText('POINT(-112.02 33.43)', 4326), 'Phoenix');
+insert into cities(location, name) values(GeometryFromText('POINT( -77.04 38.85)', 4326), 'Washington DC');
Added: sandbox/ggl/formal_review/libs/ggl/example/data/cities.wkt
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/data/cities.wkt 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,10 @@
+# Source: http://www.realestate3d.com/gps/latlong.htm
+# Note: selected and converted manually
+POINT( -71.03 42.37) ; Boston
+POINT( -87.65 41.90) ; Chicago
+POINT( -95.35 29.97) ; Houston
+POINT(-118.40 33.93) ; Los Angeles
+POINT( -80.28 25.82) ; Miami
+POINT( -73.98 40.77) ; New York
+POINT(-112.02 33.43) ; Phoenix
+POINT( -77.04 38.85) ; Washington DC
Added: sandbox/ggl/formal_review/libs/ggl/example/data/roads.wkt
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/data/roads.wkt 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,1331 @@
+LINESTRING(-122.191 47.9758,-122.181 47.9958,-122.177 48.0022,-122.171 48.0081,-122.174 48.0402,-122.178 48.0718,-122.181 48.1036,-122.183 48.1361,-122.189 48.143,-122.206 48.205,-122.231 48.2515,-122.261 48.2977,-122.291 48.3592,-122.297 48.4234,-122.299 48.5183,-122.324 48.6237,-122.41 48.7339,-122.407 48.7538,-122.4 48.7749,-122.399 48.793,-122.423 48.8044,-122.45 48.8124,-122.481 48.8304,-122.517 48.8718,-122.521 48.8813,-122.523 48.901,-122.527 48.9105,-122.543 48.919,-122.551 48.9305,-122.561 48.9411,-122.585 48.9471,-122.612 48.9669,-122.638 48.9849,-122.661 49.0022)
+LINESTRING(-122.191 47.9758,-122.204 47.9372,-122.221 47.9019,-122.242 47.8674,-122.266 47.8312)
+LINESTRING(-122.176 47.5801,-122.182 47.5932,-122.185 47.6067,-122.187 47.6202,-122.187 47.6338,-122.187 47.6691,-122.182 47.7052,-122.181 47.7412,-122.192 47.776,-122.2 47.7864,-122.212 47.7945,-122.223 47.8027,-122.232 47.8132,-122.241 47.8168,-122.25 47.821,-122.259 47.8258,-122.266 47.8312)
+LINESTRING(-122.193 47.5075,-122.192 47.5108,-122.192 47.5147,-122.192 47.5184,-122.192 47.5224,-122.192 47.5265,-122.192 47.5307,-122.192 47.5327,-122.191 47.5348,-122.19 47.5395,-122.189 47.5443,-122.188 47.549,-122.187 47.5538,-122.185 47.5584,-122.183 47.5609,-122.182 47.563,-122.18 47.5667,-122.179 47.5676,-122.178 47.5711,-122.177 47.5726,-122.177 47.5742,-122.177 47.5762,-122.176 47.5781,-122.176 47.5801)
+LINESTRING(-122.193 47.5025,-122.193 47.5075)
+LINESTRING(-122.193 47.5025,-122.195 47.504,-122.193 47.5075)
+LINESTRING(-122.272 47.4615,-122.273 47.4725,-122.273 47.4841,-122.272 47.4874,-122.271 47.4906,-122.27 47.4938,-122.269 47.4971,-122.279 47.5069,-122.287 47.5167,-122.292 47.5272,-122.295 47.5391,-122.303 47.543,-122.309 47.5475,-122.315 47.5523,-122.321 47.5571,-122.321 47.5682,-122.32 47.5794,-122.32 47.5904,-122.324 47.6012,-122.324 47.6105,-122.324 47.6197,-122.324 47.6289,-122.324 47.6381,-122.324 47.6491,-122.324 47.66,-122.323 47.6709,-122.32 47.6818,-122.326 47.6884,-122.33 47.6965,-122.332 47.705,-122.33 47.7125,-122.326 47.716,-122.322 47.7195,-122.322 47.7272,-122.323 47.7352,-122.326 47.7433,-122.329 47.7508,-122.324 47.7628,-122.318 47.7798,-122.312 47.7957,-122.308 47.8044,-122.298 47.8114,-122.287 47.8175,-122.276 47.8237,-122.266 47.8312)
+LINESTRING(-122.272 47.4615,-122.217 47.4637,-122.202 47.4689,-122.201 47.4723,-122.2 47.4757,-122.198 47.4791,-122.197 47.4825,-122.195 47.4866,-122.195 47.4892,-122.194 47.4902,-122.194 47.4941,-122.194 47.498,-122.193 47.4995,-122.193 47.501,-122.193 47.5025)
+LINESTRING(-67.83 46.1421,-67.868 46.1397,-67.9165 46.1393,-67.9648 46.1407,-68.0025 46.1439,-68.0191 46.1465,-68.0342 46.1489,-68.0496 46.1507,-68.0667 46.1512,-68.1027 46.1344,-68.1427 46.1199,-68.1803 46.1063,-68.2092 46.0922,-68.2261 46.0797,-68.243 46.0654,-68.2589 46.0513,-68.2747 46.0371,-68.2875 46.0205,-68.2944 46.0023,-68.3008 45.9838,-68.3122 45.9664,-68.3374 45.9435,-68.3696 45.9156,-68.3975 45.8871,-68.41 45.8621,-68.4104 45.8527,-68.4108 45.8433,-68.4112 45.8339,-68.4116 45.8245,-68.4158 45.8021,-68.4248 45.7858,-68.4367 45.7703,-68.4494 45.7506,-68.4601 45.7285,-68.4695 45.7061,-68.479 45.6836,-68.4899 45.6616,-68.5018 45.6423,-68.5151 45.6234,-68.5282 45.6045,-68.54 45.5854,-68.5603 45.5441,-68.5848 45.4878,-68.607 45.4306,-68.62 45.3866,-68.6368 45.3571,-68.6665 45.3216,-68.6933 45.2801,-68.7015 45.2323)
+LINESTRING(-122.555 47.2721,-122.556 47.2726,-122.562 47.2824,-122.568 47.2906,-122.575 47.3043,-122.586 47.3152,-122.606 47.3388,-122.618 47.3657,-122.613 47.3768,-122.613 47.3929,-122.615 47.3966,-122.622 47.4098,-122.622 47.4162,-122.626 47.481,-122.634 47.4892,-122.648 47.5041,-122.656 47.5114,-122.66 47.5214,-122.671 47.5272,-122.695 47.5223,-122.702 47.5249,-122.697 47.5328,-122.682 47.5404,-122.665 47.5554,-122.67 47.5654,-122.685 47.5693,-122.689 47.5729,-122.699 47.5815,-122.699 47.5894,-122.703 47.5948,-122.711 47.6002,-122.711 47.6067,-122.71 47.615,-122.711 47.6232,-122.709 47.6297,-122.706 47.6371,-122.705 47.6422,-122.706 47.6463,-122.706 47.6537,-122.687 47.6613,-122.683 47.6623,-122.676 47.6735,-122.673 47.6777,-122.671 47.6846,-122.665 47.6898,-122.66 47.6935,-122.66 47.7018,-122.66 47.7147,-122.665 47.7275,-122.652 47.7553)
+LINESTRING(-122.544 47.2628,-122.555 47.2721)
+LINESTRING(-122.46 47.2256,-122.463 47.2276,-122.466 47.2296,-122.469 47.2316,-122.472 47.2337,-122.478 47.2336,-122.484 47.2335,-122.49 47.2334,-122.496 47.2333,-122.508 47.2406,-122.52 47.2479,-122.532 47.2552,-122.544 47.2625,-122.544 47.2628)
+LINESTRING(-122.46 47.2256,-122.405 47.234,-122.364 47.2366,-122.333 47.2501,-122.309 47.2911,-122.298 47.3117,-122.292 47.3402,-122.289 47.3691,-122.289 47.3911,-122.292 47.4016,-122.291 47.4125,-122.286 47.4223,-122.274 47.4294,-122.271 47.4408,-122.272 47.4566,-122.272 47.4615)
+LINESTRING(-122.479 47.1637,-122.468 47.1764,-122.462 47.1929,-122.46 47.2103,-122.46 47.2256)
+LINESTRING(-122.479 47.1637,-122.478 47.1629,-122.476 47.1622,-122.475 47.1614,-122.474 47.1606,-122.433 47.1581,-122.389 47.1573,-122.346 47.1581,-122.306 47.1601,-122.304 47.1611,-122.302 47.162,-122.3 47.163,-122.298 47.1639,-122.298 47.1667,-122.298 47.1694,-122.298 47.1722,-122.299 47.1749,-122.295 47.1782,-122.291 47.181,-122.287 47.1838,-122.284 47.1871,-122.284 47.1897,-122.284 47.1923,-122.284 47.195,-122.284 47.1976,-122.28 47.2011,-122.274 47.2007,-122.265 47.2,-122.257 47.2021,-122.242 47.1954,-122.233 47.1939,-122.224 47.1958,-122.209 47.199,-122.202 47.1955,-122.2 47.1845,-122.18 47.1718)
+LINESTRING(-122.479 47.1637,-122.586 47.1047,-122.726 47.06,-122.853 47.0274,-122.92 47.0048)
+LINESTRING(-123.032 47.0497,-123.013 47.0387,-122.979 47.0249,-122.943 47.0123,-122.92 47.0048)
+LINESTRING(-111.958 49.0001,-111.951 48.9695,-111.938 48.9331,-111.92 48.8985,-111.9 48.8733,-111.891 48.8663,-111.88 48.8578,-111.87 48.849,-111.866 48.8409,-111.864 48.7653,-111.863 48.6898,-111.862 48.6143,-111.863 48.5388,-111.864 48.5314,-111.867 48.5243,-111.872 48.5175,-111.877 48.5109,-111.879 48.5085)
+LINESTRING(-68.7774 44.8296,-68.7576 44.8372,-68.7428 44.8595,-68.7344 44.8858,-68.7339 44.9055,-68.7415 44.9322,-68.745 44.9534,-68.7442 44.9749,-68.7393 45.0023,-68.7377 45.0041,-68.7361 45.0059,-68.7249 45.0394,-68.7164 45.0689,-68.712 45.0984,-68.7128 45.1316,-68.7127 45.1507,-68.7094 45.1683,-68.7049 45.1859,-68.7011 45.2047,-68.7012 45.2111,-68.702 45.2195,-68.7025 45.2274,-68.7015 45.2323)
+LINESTRING(-117.442 47.6383,-117.461 47.6406,-117.47 47.6371)
+LINESTRING(-117.42 47.6351,-117.429 47.6368,-117.442 47.6383)
+LINESTRING(-116.796 47.7226,-116.821 47.7326,-116.856 47.7386,-116.894 47.7385,-116.934 47.734,-116.995 47.7161,-117.041 47.6892,-117.041 47.6892)
+LINESTRING(-117.041 47.6892,-117.088 47.6623,-117.148 47.6443,-117.18 47.6431,-117.209 47.6465,-117.238 47.6499,-117.27 47.6487,-117.289 47.6445,-117.306 47.6393,-117.322 47.6341,-117.342 47.6299,-117.373 47.6284,-117.401 47.6317,-117.42 47.6351)
+LINESTRING(-122.874 46.5507,-122.883 46.5734,-122.903 46.5972,-122.928 46.6195,-122.952 46.6378,-122.953 46.6392,-122.954 46.6404,-122.954 46.6418,-122.954 46.6436,-122.948 46.6851,-122.946 46.7187,-122.948 46.7486,-122.952 46.7786,-122.96 46.7925,-122.973 46.8078,-122.983 46.8235,-122.984 46.8387,-122.969 46.8755,-122.953 46.9164,-122.937 46.9599,-122.92 47.0048)
+LINESTRING(-122.176 47.5801,-122.168 47.5804,-122.158 47.5804,-122.15 47.5798,-122.14 47.5787,-122.13 47.5763,-122.118 47.5721,-122.106 47.5676,-122.097 47.5636,-122.08 47.5557,-122.07 47.5515,-122.06 47.5469,-122.051 47.5429,-122.039 47.5385,-122.025 47.5328,-122.014 47.5289,-122.003 47.526,-121.993 47.5247,-121.983 47.5248,-121.974 47.525,-121.965 47.5242,-121.954 47.5225,-121.945 47.5204,-121.933 47.5158,-121.923 47.5118,-121.913 47.5098,-121.903 47.5089,-121.892 47.5085,-121.883 47.5083,-121.848 47.4895,-121.771 47.4688,-121.737 47.4524,-121.696 47.445,-121.652 47.4405,-121.634 47.4391,-121.613 47.4301,-121.6 47.4249,-121.582 47.4182,-121.571 47.414,-121.467 47.4125,-121.364 47.4119,-121.339 47.3851,-121.301 47.3409,-121.244 47.3038,-121.174 47.2725,-121.113 47.2568,-121.048 47.2281,-121.017 47.2092,-120.982 47.2076,-120.969 47.2077,-120.958 47.208,-120.942 47.2053,-120.93 47.2027,-120.913 47.1944,-120.889 47.1756,-120.87 47.161,-120.853 47.1472,-120.787 47.0988,-120.727 47.0706,-120.705 47.055,-120.666
47.03,-120.647 47.0166,-120.631 47.0012,-120.602 46.9797,-120.574 46.9701,-120.547 46.9704,-120.51 46.9701)
+LINESTRING(-117.47 47.6371,-117.523 47.6166,-117.57 47.5883,-117.613 47.5563,-117.663 47.5213,-117.705 47.4973,-117.745 47.4785,-117.785 47.4597,-117.827 47.4357,-117.853 47.4165,-117.872 47.3981,-117.893 47.3802,-117.92 47.3628,-117.95 47.3503,-117.98 47.342,-118.01 47.3329,-118.037 47.3183,-118.115 47.2558,-118.183 47.1981,-118.261 47.1512,-118.366 47.1211,-118.375 47.1197,-118.384 47.1183,-118.393 47.1169,-118.402 47.1155)
+LINESTRING(-116.796 47.7226,-116.787 47.7188,-116.763 47.7075,-116.742 47.6991,-116.72 47.6912,-116.696 47.6816,-116.681 47.6742,-116.669 47.667,-116.655 47.6607,-116.639 47.6559,-116.604 47.6513,-116.572 47.6503,-116.54 47.6484,-116.506 47.6411,-116.464 47.6245,-116.431 47.6067,-116.397 47.5883,-116.357 47.5702,-116.273 47.5522,-116.191 47.5512,-116.111 47.5486,-116.032 47.5259,-115.985 47.5034,-115.941 47.4858,-115.894 47.4729,-115.838 47.4646,-115.812 47.4644,-115.789 47.4671,-115.766 47.4695,-115.74 47.4683,-115.672 47.455,-115.667 47.4536)
+LINESTRING(-118.402 47.1155,-118.432 47.1112,-118.461 47.1081,-118.492 47.1062,-118.527 47.1057,-118.532 47.1048,-118.539 47.1032,-118.544 47.1032,-118.549 47.1036,-118.556 47.1031,-118.604 47.0963,-118.647 47.0921,-118.692 47.09,-118.741 47.0895,-118.805 47.0876,-118.86 47.0828,-118.916 47.0777,-118.98 47.075,-119.035 47.0732,-119.099 47.0704,-119.165 47.0682,-119.228 47.0685,-119.331 47.0789,-119.427 47.0962,-119.515 47.1114,-119.59 47.1154,-119.642 47.1125,-119.684 47.1106,-119.725 47.1073,-119.776 47.1001,-119.848 47.0877,-119.891 47.0697,-119.912 47.0397,-119.925 47.0031,-119.945 46.9655,-119.952 46.9539,-119.958 46.9429,-119.967 46.934,-119.982 46.9285,-120.029 46.9265,-120.071 46.9333,-120.114 46.9416,-120.163 46.9438,-120.201 46.9434,-120.248 46.9495,-120.299 46.9588,-120.347 46.9683,-120.389 46.9751,-120.427 46.9778,-120.465 46.9763,-120.51 46.9701,-120.499 46.9403,-120.49 46.9282,-120.475 46.9202,-120.458 46.9131,-120.441 46.904,-120.409 46.8811,-120.384 46.8591,-120.364 46.835,-120.35 46.8057,-12
0.346 46.7755,-120.354 46.7435,-120.371 46.7125,-120.395 46.6854,-120.424 46.6624,-120.458 46.6449,-120.496 46.6319,-120.538 46.6222,-120.54 46.6219,-120.542 46.6215,-120.545 46.6209)
+LINESTRING(-120.545 46.6209,-120.573 46.621,-120.592 46.6307,-120.609 46.6462,-120.629 46.6639,-120.646 46.6797,-120.658 46.6941,-120.671 46.7075,-120.691 46.722)
+LINESTRING(-69.8176 44.2194,-69.8106 44.2468,-69.8134 44.2765,-69.817 44.3065,-69.8126 44.3347,-69.8001 44.3513,-69.7792 44.3705,-69.7563 44.3898,-69.738 44.4068,-69.7105 44.4489,-69.6945 44.4934,-69.6815 44.5342,-69.6628 44.5649,-69.6537 44.5726,-69.6429 44.5801,-69.6318 44.5875,-69.6214 44.5948,-69.6179 44.5976,-69.6139 44.6007,-69.6093 44.6033,-69.6042 44.6044,-69.573 44.6206,-69.53 44.6458,-69.4896 44.672,-69.4663 44.6912,-69.4392 44.7349,-69.4193 44.7695,-69.386 44.7982,-69.3186 44.8244,-69.2836 44.8242,-69.2395 44.8132,-69.1946 44.799,-69.1576 44.7891,-69.1303 44.7857,-69.1024 44.7838,-69.0744 44.7826,-69.0466 44.7807,-68.9958 44.7735,-68.9431 44.7661,-68.8913 44.7663,-68.8432 44.7818,-68.8321 44.7921,-68.827 44.8037,-68.8217 44.8155,-68.8096 44.826,-68.8017 44.8273,-68.7936 44.8282,-68.7855 44.8289,-68.7774 44.8296)
+LINESTRING(-120.294 46.4397,-120.33 46.464,-120.363 46.4857,-120.374 46.4926,-120.392 46.5017,-120.411 46.5106,-120.423 46.5172,-120.437 46.5251,-120.449 46.5316,-120.461 46.5384,-120.474 46.547,-120.486 46.5566,-120.497 46.5652,-120.507 46.5743,-120.517 46.5852,-120.529 46.5988,-120.537 46.6091,-120.545 46.6209)
+LINESTRING(-111.879 48.5085,-111.881 48.5059,-111.881 48.5012,-111.881 48.4965,-111.88 48.4915,-111.897 48.4171,-111.918 48.3851,-111.933 48.3423,-111.932 48.2354,-111.929 48.2038,-111.925 48.1774,-111.915 48.1511,-111.897 48.12,-111.88 48.0949,-111.862 48.0692,-111.844 48.0439,-111.824 48.0198,-111.797 47.9946,-111.766 47.9711,-111.737 47.9465,-111.715 47.9181,-111.71 47.9025,-111.709 47.8861,-111.708 47.8695,-111.704 47.8532,-111.697 47.8438,-111.686 47.835,-111.674 47.8264,-111.667 47.8172,-111.665 47.8022,-111.666 47.7864,-111.668 47.7707,-111.669 47.7555,-111.662 47.7205,-111.643 47.6926,-111.617 47.6665,-111.588 47.637,-111.573 47.6174,-111.562 47.5977,-111.548 47.5783,-111.529 47.5592)
+LINESTRING(-111.529 47.5592,-111.491 47.5583,-111.454 47.5526,-111.419 47.5434,-111.383 47.5322,-111.366 47.527,-111.335 47.5178)
+LINESTRING(-97.0955 47.9343,-97.0945 47.9494,-97.0936 47.9654,-97.0936 47.9813,-97.0956 47.9961,-97.1145 48.012,-97.1412 48.0417,-97.1641 48.0716,-97.1713 48.0883,-97.1758 48.0926,-97.1808 48.0967,-97.1863 48.1005,-97.1921 48.104,-97.1958 48.2072,-97.1962 48.3109,-97.1945 48.4144,-97.192 48.5171,-97.1877 48.5218,-97.1834 48.5265,-97.179 48.5313,-97.1747 48.536,-97.1751 48.5391,-97.1754 48.5421,-97.1758 48.5451,-97.1761 48.5481,-97.1791 48.5497,-97.1821 48.5512,-97.1851 48.5528,-97.1881 48.5544,-97.1877 48.559,-97.1874 48.5636,-97.1872 48.5682,-97.1871 48.5728,-97.1877 48.6062,-97.1877 48.64,-97.1886 48.6738,-97.1918 48.7069,-97.1997 48.7317,-97.2129 48.756,-97.2271 48.78,-97.2381 48.8042,-97.24 48.8226,-97.2374 48.8422,-97.2347 48.8615,-97.2363 48.8791,-97.2464 48.9003,-97.2576 48.919,-97.2644 48.939,-97.2876 48.9782,-97.2784 48.986,-97.2706 48.9956,-97.2675 49.001)
+LINESTRING(-122.645 45.7164,-122.668 45.7741,-122.719 45.9049,-122.769 46.0453,-122.79 46.1318,-122.804 46.1967,-122.836 46.2833,-122.865 46.3654,-122.867 46.4168,-122.872 46.4494,-122.875 46.4837,-122.876 46.518,-122.874 46.5507)
+LINESTRING(-70.0103 43.9228,-69.9821 43.9414,-69.9641 43.9539,-69.951 43.9698,-69.9374 43.9984,-69.9348 44.0059,-69.9322 44.0134,-69.929 44.0222,-69.9266 44.0273,-69.8988 44.0663,-69.8635 44.122,-69.8324 44.1784,-69.8176 44.2194)
+LINESTRING(-72.0897 45.0036,-72.0897 45.0036,-72.099 44.9925,-72.1189 44.9767,-72.1404 44.9612,-72.1545 44.9508,-72.1731 44.9293,-72.1769 44.9115,-72.1753 44.8948,-72.1781 44.8769,-72.1857 44.8572,-72.1898 44.8473,-72.1944 44.8377,-72.2047 44.8217,-72.2144 44.8073,-72.2201 44.7919,-72.2185 44.7725,-72.2134 44.7652,-72.205 44.7584,-72.1969 44.7527,-72.1928 44.7487,-72.1903 44.7378,-72.1876 44.7267,-72.1822 44.7164,-72.1718 44.7076,-72.162 44.7053,-72.1532 44.7017,-72.1465 44.6966,-72.143 44.6897,-72.1385 44.663,-72.1322 44.6375,-72.1186 44.6147,-72.0922 44.5956,-72.082 44.5913,-72.0681 44.5858,-72.0547 44.5802,-72.0462 44.5754,-72.0403 44.5686,-72.0365 44.5619,-72.0324 44.5553,-72.0252 44.5486,-72.0183 44.5438,-72.0093 44.5375,-72.0014 44.5305,-71.9972 44.5242,-72.0035 44.5158,-72.0167 44.5048,-72.031 44.4942,-72.0405 44.4873,-72.0446 44.4779,-72.046 44.4594,-72.041 44.4364,-72.0282 44.4175)
+LINESTRING(-72.0255 44.4136,-72.0282 44.4175)
+LINESTRING(-122.645 45.7164,-122.651 45.7027,-122.657 45.6899,-122.662 45.677,-122.665 45.6621,-122.665 45.6533,-122.663 45.6453,-122.662 45.6374,-122.663 45.6287,-122.664 45.6223,-122.667 45.6176)
+LINESTRING(-115.667 47.4536,-115.614 47.439,-115.557 47.4221,-115.49 47.4059,-115.443 47.3988,-115.399 47.3951,-115.356 47.3903,-115.31 47.3797,-115.272 47.3637,-115.243 47.3449,-115.215 47.3255,-115.179 47.3079,-115.15 47.3012,-115.122 47.3,-115.094 47.2997,-115.063 47.2959,-115.016 47.2791,-114.978 47.263,-114.941 47.2473,-114.896 47.2316,-114.838 47.2115,-114.79 47.1875,-114.754 47.157,-114.734 47.1173,-114.731 47.1091,-114.726 47.0954,-114.724 47.0872,-114.719 47.0765,-114.711 47.0679,-114.701 47.0596,-114.691 47.0501,-114.684 47.0421,-114.678 47.0351,-114.671 47.0285,-114.663 47.0215,-114.65 47.012,-114.639 47.0033,-114.629 46.9946,-114.615 46.9853,-114.604 46.9774,-114.592 46.9708,-114.579 46.9668,-114.564 46.9666,-114.53 46.9708,-114.52 46.9732,-114.512 46.9772,-114.505 46.982,-114.476 46.9999,-114.459 47.0131,-114.443 47.0267,-114.424 47.0412,-114.413 47.0497,-114.403 47.0565,-114.392 47.0616,-114.376 47.0652,-114.361 47.0679,-114.346 47.0707,-114.332 47.0733,-114.316 47.0756,-114.264 47.0743,-114.2
16 47.0592,-114.176 47.0334,-114.143 47.0003,-114.134 46.9899,-114.127 46.9853)
+LINESTRING(-119.016 46.4527,-119.033 46.4282,-119.048 46.4069,-119.063 46.3857,-119.079 46.3612,-119.086 46.3444,-119.089 46.3202,-119.084 46.2883,-119.061 46.2476)
+LINESTRING(-119.061 46.2476,-119.135 46.2834,-119.204 46.2996,-119.273 46.2992,-119.348 46.2825,-119.403 46.2648,-119.456 46.2485,-119.509 46.234,-119.568 46.2219,-119.587 46.2188,-119.605 46.2156,-119.624 46.2124,-119.642 46.2092,-119.68 46.2068,-119.713 46.2113,-119.746 46.2193,-119.784 46.2275,-119.842 46.2388,-119.893 46.2521,-119.94 46.27,-119.988 46.2955,-120.014 46.3101,-120.042 46.3226,-120.071 46.3333,-120.101 46.3427,-120.15 46.3599,-120.199 46.3835,-120.247 46.4109,-120.294 46.4397)
+LINESTRING(-71.8992 44.3365,-71.8999 44.3409,-71.9027 44.3565,-71.9087 44.368,-71.9155 44.3791,-71.9208 44.3898,-71.9234 44.4002,-71.9247 44.408,-71.9287 44.4153,-71.9397 44.4241,-71.9504 44.4231,-71.9616 44.4186,-71.9726 44.4138,-71.9826 44.4122,-71.9934 44.4126,-72.0041 44.4129,-72.0148 44.4133,-72.0255 44.4136)
+LINESTRING(-122.645 45.7164,-122.622 45.6988,-122.585 45.6698,-122.572 45.6508,-122.559 45.6107,-122.557 45.591)
+LINESTRING(-114.127 46.9853,-114.123 46.9823,-114.112 46.9766,-114.098 46.9714,-114.058 46.9552,-114.023 46.9416,-113.992 46.9303,-113.986 46.9284,-113.982 46.9263)
+LINESTRING(-122.667 45.6176,-122.667 45.6166,-122.67 45.611,-122.671 45.6047,-122.673 45.5928,-122.672 45.582,-122.671 45.5713,-122.67 45.5594,-122.669 45.5493,-122.67 45.5405,-122.672 45.5317,-122.675 45.5218,-122.676 45.5164)
+LINESTRING(-123.067 45.6154,-123.013 45.5954,-122.987 45.5858,-122.953 45.5728,-122.939 45.5666,-122.883 45.5461,-122.846 45.533,-122.786 45.5094,-122.764 45.506,-122.751 45.5097,-122.746 45.5108,-122.73 45.5127,-122.7 45.5125,-122.683 45.5143,-122.676 45.5164)
+LINESTRING(-122.557 45.591,-122.556 45.5744,-122.557 45.5356)
+LINESTRING(-122.557 45.5356,-122.557 45.5306)
+LINESTRING(-122.676 45.5164,-122.669 45.5183,-122.657 45.523,-122.644 45.5277,-122.63 45.5316,-122.62 45.533,-122.611 45.533,-122.602 45.5319,-122.593 45.5299,-122.588 45.5284,-122.584 45.5267,-122.579 45.5256,-122.574 45.5258,-122.569 45.5271,-122.565 45.5285,-122.561 45.5298,-122.557 45.5306)
+LINESTRING(-122.676 45.5164,-122.677 45.5108,-122.679 45.5009,-122.682 45.4913,-122.688 45.4812,-122.706 45.4661,-122.728 45.4546,-122.746 45.4424,-122.75 45.429,-122.745 45.4127,-122.744 45.398,-122.745 45.3831,-122.746 45.3733)
+LINESTRING(-73.1873 44.454,-73.1586 44.4943,-73.1614 44.5402,-73.1552 44.5512,-73.1659 44.6078,-73.1411 44.6371,-73.0859 44.7081,-73.0415 44.8398,-73.0665 44.9029,-73.0887 44.9437,-73.0588 45.0157)
+LINESTRING(-118.865 46.0558,-118.871 46.0683,-118.896 46.0979,-118.925 46.1261,-118.954 46.1526,-118.981 46.1775,-119.006 46.1996,-119.032 46.2206,-119.061 46.2476)
+LINESTRING(-122.557 45.5306,-122.558 45.4962,-122.558 45.4714,-122.557 45.4494,-122.559 45.4276,-122.564 45.4031,-122.567 45.3931,-122.571 45.3843,-122.577 45.3757,-122.584 45.3664,-122.589 45.3595,-122.594 45.3532,-122.601 45.3481,-122.611 45.3447,-122.618 45.3446,-122.625 45.3469,-122.631 45.3502,-122.638 45.3535,-122.65 45.3579,-122.662 45.3614,-122.674 45.364,-122.688 45.3659,-122.705 45.3675,-122.721 45.3689,-122.737 45.3711,-122.746 45.3733)
+LINESTRING(-118.859 46.0042,-118.856 46.0073,-118.855 46.0376,-118.865 46.0558)
+LINESTRING(-119.061 46.2476,-119.09 46.2258,-119.114 46.2197,-119.138 46.2117,-119.159 46.2007,-119.176 46.189,-119.189 46.1754,-119.2 46.1587,-119.208 46.1443,-119.215 46.1311,-119.221 46.1175,-119.223 46.102,-119.221 46.0804,-119.217 46.0606,-119.218 46.0418,-119.228 46.0233,-119.242 46.0125,-119.258 46.0045,-119.275 45.9975,-119.293 45.9898,-119.319 45.9762,-119.339 45.9606,-119.35 45.9426,-119.349 45.922,-119.349 45.9188)
+LINESTRING(-119.349 45.9188,-119.346 45.9181)
+LINESTRING(-119.349 45.9188,-119.348 45.9177)
+LINESTRING(-69.8176 44.2194,-69.9019 44.1546,-69.9658 44.1316,-70.0139 44.1275,-70.0508 44.1198,-70.0758 44.1054,-70.1015 44.0901,-70.1284 44.0765,-70.1575 44.0669,-70.1647 44.0682,-70.1718 44.0696,-70.179 44.0709,-70.1862 44.0722,-70.1968 44.0704,-70.2089 44.0641,-70.2208 44.0564,-70.231 44.0506,-70.2433 44.0464,-70.2582 44.0423,-70.2723 44.0381,-70.2822 44.0339,-70.31 44.0075,-70.3259 43.9745,-70.3338 43.9394,-70.3374 43.9066,-70.3384 43.9022,-70.3401 43.8962,-70.3417 43.8904,-70.3423 43.8866,-70.34 43.8774,-70.3366 43.868,-70.3328 43.8585,-70.3297 43.8492,-70.3177 43.8012,-70.3112 43.7544,-70.3143 43.7083,-70.3309 43.6618,-70.3347 43.6546,-70.3385 43.6473,-70.3423 43.6401,-70.3462 43.6329)
+LINESTRING(-70.3462 43.6329,-70.3414 43.6314,-70.3366 43.6298,-70.3318 43.6283,-70.3271 43.6268,-70.3244 43.6295,-70.3218 43.6323,-70.3192 43.635,-70.3165 43.6378,-70.312 43.6381,-70.3074 43.6383,-70.3028 43.6386,-70.2982 43.6389,-70.2756 43.6597,-70.2622 43.6787,-70.2551 43.6989,-70.2512 43.7236,-70.2113 43.7785,-70.156 43.8325,-70.1017 43.8749,-70.0651 43.8955,-70.0566 43.9066,-70.0437 43.9143,-70.0277 43.9195,-70.0103 43.9228)
+LINESTRING(-121.123 45.5856,-121.131 45.5844,-121.139 45.5831,-121.147 45.5818,-121.155 45.5805,-121.16 45.5797,-121.164 45.579,-121.172 45.5828,-121.18 45.5865,-121.188 45.5903,-121.197 45.5941,-121.2 45.6005,-121.203 45.6069,-121.206 45.6133,-121.209 45.6197,-121.214 45.6257,-121.218 45.6317,-121.223 45.6377,-121.228 45.6437,-121.233 45.6464,-121.239 45.6491,-121.245 45.6517,-121.25 45.6543,-121.259 45.6572,-121.268 45.6601,-121.277 45.6631,-121.286 45.666,-121.291 45.6672,-121.297 45.6684,-121.302 45.6696,-121.307 45.6708,-121.312 45.671,-121.318 45.6713,-121.323 45.6716,-121.329 45.6718,-121.339 45.6719,-121.349 45.6719,-121.359 45.6719,-121.369 45.6719,-121.379 45.6712,-121.389 45.6705,-121.399 45.6698,-121.409 45.6691,-121.418 45.6699,-121.428 45.6708,-121.438 45.6716,-121.448 45.6724,-121.458 45.6749,-121.467 45.6773,-121.476 45.6798,-121.486 45.6823,-121.494 45.6856,-121.503 45.689,-121.512 45.6924,-121.52 45.6957,-121.525 45.6968,-121.53 45.6978,-121.536 45.696,-121.543 45.6941,-121.55 45.6923,-121
.556 45.6904,-121.561 45.6892,-121.565 45.6881,-121.569 45.6869,-121.573 45.6857,-121.579 45.6857,-121.585 45.6857,-121.591 45.6857,-121.597 45.6857,-121.607 45.6839,-121.616 45.6821,-121.625 45.6803,-121.635 45.6785,-121.644 45.6771,-121.654 45.6756,-121.663 45.6742,-121.673 45.6728,-121.683 45.6716,-121.693 45.6704,-121.704 45.6692,-121.714 45.668,-121.724 45.6688,-121.734 45.6696,-121.743 45.6704,-121.753 45.6712,-121.763 45.672,-121.773 45.6728,-121.783 45.6736,-121.793 45.6744,-121.802 45.6726,-121.812 45.6708,-121.821 45.669,-121.83 45.6672,-121.835 45.6612,-121.84 45.6553,-121.845 45.6493,-121.85 45.6433,-121.857 45.6385,-121.864 45.6337,-121.871 45.6288,-121.878 45.624,-121.887 45.6218,-121.897 45.6196,-121.906 45.6175,-121.915 45.6153,-121.925 45.613,-121.935 45.6107,-121.944 45.6085,-121.954 45.6062,-121.964 45.6039,-121.974 45.6016,-121.983 45.5993,-121.993 45.597,-122.002 45.5949,-122.012 45.5927,-122.021 45.5905,-122.03 45.5883,-122.04 45.586,-122.05 45.5837,-122.059 45.5814,-122.069 45.5791,-12
2.078 45.5762,-122.087 45.5733,-122.096 45.5704,-122.105 45.5675,-122.114 45.5646,-122.123 45.5617,-122.132 45.5588,-122.141 45.5559,-122.149 45.5519,-122.157 45.5479,-122.166 45.5439,-122.174 45.54,-122.184 45.5385,-122.193 45.537,-122.203 45.5355,-122.212 45.534,-122.222 45.5336,-122.232 45.5332,-122.242 45.5328,-122.252 45.5324,-122.262 45.5327,-122.273 45.533,-122.283 45.5332,-122.293 45.5335,-122.303 45.5339,-122.313 45.5343,-122.322 45.5347,-122.332 45.5351,-122.342 45.5366,-122.352 45.538,-122.363 45.5395,-122.373 45.541,-122.38 45.5428,-122.384 45.5421,-122.388 45.5411,-122.393 45.5401,-122.398 45.5387,-122.406 45.5374,-122.414 45.5362,-122.422 45.5349,-122.43 45.5337,-122.434 45.5341,-122.438 45.5345,-122.444 45.5346,-122.449 45.5348,-122.453 45.5347,-122.458 45.5346,-122.462 45.5346,-122.466 45.5345,-122.47 45.5348,-122.474 45.5351,-122.478 45.5354,-122.482 45.5357,-122.486 45.5359,-122.49 45.5362,-122.494 45.5365,-122.497 45.5368,-122.504 45.5372,-122.511 45.5375,-122.515 45.5378,-122.518 45.5381,
-122.522 45.5384,-122.526 45.5387,-122.532 45.5402,-122.539 45.5417,-122.544 45.5414,-122.548 45.5411,-122.551 45.5397,-122.554 45.5382,-122.557 45.5356)
+LINESTRING(-121.123 45.5856,-121.117 45.5903,-121.111 45.5949,-121.105 45.5994,-121.099 45.604,-121.096 45.6063,-121.093 45.6086,-121.091 45.6109,-121.088 45.6132,-121.083 45.616,-121.078 45.6188,-121.073 45.6216,-121.068 45.6244,-121.059 45.6257,-121.051 45.627,-121.042 45.6284,-121.034 45.6297,-121.032 45.63,-121.03 45.6303,-121.02 45.6302,-121.01 45.6301,-121 45.6299,-120.99 45.6298,-120.981 45.6293,-120.973 45.6288,-120.965 45.6283,-120.957 45.6278,-120.956 45.6277,-120.954 45.6276,-120.952 45.6274,-120.95 45.6273,-120.943 45.6266,-120.935 45.6259,-120.927 45.6251,-120.92 45.6244,-120.918 45.6235,-120.917 45.6227,-120.915 45.6218,-120.914 45.6209,-120.911 45.6199,-120.908 45.6189,-120.905 45.6179,-120.902 45.6168,-120.899 45.6171,-120.896 45.6173,-120.893 45.6176,-120.89 45.6178,-120.889 45.6184,-120.887 45.6189,-120.885 45.6195,-120.883 45.6201,-120.879 45.6225,-120.875 45.6249,-120.871 45.6273,-120.867 45.6297,-120.866 45.631,-120.864 45.6323,-120.863 45.6335,-120.862 45.6348,-120.861 45.6356,-120.86
45.6364,-120.858 45.6372,-120.857 45.638,-120.855 45.6394,-120.853 45.6408,-120.852 45.6421,-120.85 45.6435,-120.848 45.6441,-120.847 45.6447,-120.846 45.6452,-120.845 45.6458,-120.843 45.6464,-120.841 45.647,-120.84 45.6475,-120.838 45.6481,-120.835 45.6483,-120.833 45.6485,-120.831 45.6486,-120.828 45.6488,-120.824 45.6496,-120.82 45.6504,-120.816 45.6512,-120.812 45.6521)
+LINESTRING(-119.346 45.9181,-119.327 45.9129,-119.306 45.9083,-119.286 45.9038,-119.265 45.898,-119.225 45.8846,-119.185 45.8718,-119.145 45.864,-119.103 45.8653,-119.056 45.8765,-119.018 45.8922,-118.984 45.9122,-118.948 45.9363,-118.911 45.9595,-118.877 45.9822,-118.859 46.0042)
+LINESTRING(-119.348 45.9177,-119.346 45.8878,-119.356 45.8575,-119.372 45.8271,-119.386 45.7925)
+LINESTRING(-120.812 45.6521,-120.806 45.6525,-120.8 45.653,-120.794 45.6535,-120.788 45.654,-120.782 45.6557,-120.776 45.6574,-120.769 45.6591,-120.763 45.6608,-120.755 45.6634,-120.747 45.666,-120.739 45.6686,-120.731 45.6712,-120.724 45.673,-120.717 45.6747,-120.709 45.6765,-120.702 45.6782,-120.7 45.6792,-120.697 45.6801,-120.695 45.681,-120.692 45.6819,-120.688 45.6832,-120.683 45.6845,-120.679 45.6858,-120.674 45.6871,-120.67 45.6894,-120.666 45.6918,-120.661 45.6941,-120.657 45.6964,-120.653 45.699,-120.649 45.7016,-120.645 45.7042,-120.642 45.7068,-120.639 45.7086,-120.636 45.7104,-120.633 45.7122,-120.63 45.7139,-120.628 45.7146,-120.622 45.7156,-120.617 45.7165,-120.612 45.7175,-120.606 45.7185,-120.603 45.7191,-120.599 45.7181,-120.596 45.7171,-120.592 45.7161,-120.589 45.7151,-120.586 45.7141,-120.583 45.713,-120.581 45.712,-120.578 45.711,-120.574 45.7094,-120.57 45.7078,-120.566 45.7061,-120.562 45.7045,-120.558 45.703,-120.555 45.7015,-120.547 45.6975,-120.539 45.6934,-120.531 45.6894,-120.523
45.6854,-120.514 45.6826,-120.505 45.6799,-120.496 45.6771,-120.487 45.6743,-120.483 45.6728,-120.476 45.6713,-120.468 45.6698,-120.461 45.6683,-120.453 45.6668,-120.45 45.6675,-120.448 45.6681,-120.445 45.6687,-120.442 45.6694,-120.43 45.669,-120.418 45.6686,-120.406 45.6681,-120.394 45.6677,-120.381 45.6707,-120.368 45.6737,-120.355 45.6767,-120.342 45.6797,-120.336 45.681,-120.329 45.6823,-120.323 45.6836,-120.316 45.6849,-120.311 45.6848,-120.305 45.6847,-120.3 45.6846,-120.294 45.6845,-120.291 45.6862,-120.287 45.6879,-120.284 45.6896,-120.281 45.6913,-120.278 45.6923,-120.275 45.6933,-120.272 45.6934,-120.268 45.6934,-120.265 45.6935,-120.262 45.6935,-120.259 45.6927,-120.256 45.692,-120.252 45.6912,-120.249 45.6905,-120.241 45.692,-120.232 45.6935,-120.223 45.695,-120.215 45.6965,-120.21 45.6973,-120.206 45.6981,-120.202 45.6989,-120.197 45.6997,-120.192 45.7011,-120.186 45.7026,-120.181 45.7041,-120.175 45.7055,-120.172 45.7092,-120.169 45.7128,-120.166 45.7165,-120.162 45.7201,-120.16 45.7222,-120.
158 45.7242,-120.155 45.7262,-120.153 45.7283,-120.149 45.7308,-120.146 45.7333,-120.142 45.7359,-120.138 45.7384,-120.136 45.7398,-120.133 45.7413,-120.131 45.7427,-120.129 45.7441,-120.125 45.7448,-120.121 45.7454,-120.117 45.7461,-120.113 45.7467,-120.109 45.7474,-120.106 45.7481,-120.102 45.7488,-120.099 45.7495,-120.095 45.7503,-120.091 45.7511,-120.087 45.7519,-120.083 45.7527,-120.081 45.7531,-120.078 45.7535,-120.076 45.7539,-120.074 45.7543,-120.07 45.7548,-120.066 45.7553,-120.062 45.7559,-120.058 45.7564,-120.049 45.7595,-120.04 45.7626,-120.031 45.7658,-120.022 45.7689,-120.017 45.771,-120.012 45.7732,-120.007 45.7754,-120.002 45.7775,-119.997 45.7798,-119.992 45.7822,-119.986 45.7845,-119.981 45.7868,-119.969 45.7888,-119.958 45.7909,-119.947 45.7929,-119.935 45.795,-119.922 45.7971,-119.908 45.7993,-119.894 45.8014,-119.881 45.8036,-119.85 45.8068,-119.819 45.8101,-119.788 45.8134,-119.757 45.8166,-119.749 45.817,-119.742 45.8175,-119.735 45.8179,-119.728 45.8184,-119.723 45.8195,-119.717 45.82
05,-119.711 45.8216,-119.705 45.8227,-119.701 45.8234,-119.696 45.8242,-119.692 45.8249,-119.687 45.8257,-119.684 45.8256,-119.68 45.8256,-119.677 45.8256,-119.674 45.8256,-119.671 45.8251,-119.668 45.8246,-119.665 45.8241,-119.663 45.8237,-119.657 45.8239,-119.651 45.8241,-119.645 45.8243,-119.639 45.8244,-119.619 45.8242,-119.599 45.824,-119.578 45.8238,-119.558 45.8236,-119.53 45.8187,-119.502 45.8138,-119.474 45.8089,-119.446 45.804,-119.431 45.8011,-119.416 45.7983,-119.401 45.7954,-119.386 45.7925)
+LINESTRING(-84.3438 46.5045,-84.3427 46.4867,-84.3562 46.457,-84.3677 46.4241,-84.3773 46.3909,-84.385 46.3603)
+LINESTRING(-112.71 46.5344,-112.721 46.5396,-112.728 46.5429,-112.767 46.5596,-112.805 46.58,-112.836 46.6003,-112.869 46.6185,-112.911 46.6325,-112.937 46.6382,-112.959 46.6429,-112.98 46.6481,-113.005 46.6557,-113.018 46.6626,-113.052 46.6795,-113.102 46.7006,-113.163 46.72,-113.232 46.7342,-113.294 46.7418,-113.357 46.747,-113.429 46.7538,-113.486 46.7583,-113.538 46.7615,-113.587 46.7682,-113.638 46.7831,-113.653 46.7905,-113.665 46.7992,-113.677 46.8074,-113.693 46.8136,-113.741 46.8302,-113.774 46.8515,-113.804 46.8767,-113.842 46.9048,-113.851 46.9129,-113.863 46.9188,-113.876 46.9219,-113.891 46.9218,-113.902 46.9188,-113.91 46.914,-113.918 46.9092,-113.929 46.9062,-113.944 46.9069,-113.957 46.9118,-113.969 46.9189,-113.982 46.9263)
+LINESTRING(-111.997 46.5914,-112.005 46.6226,-112.018 46.6873,-112.029 46.7535,-112.03 46.7892,-112.009 46.8006,-112.004 46.8185,-112.01 46.8382,-112.023 46.8549,-112.042 46.861,-112.066 46.8647,-112.09 46.8681,-112.111 46.8732,-112.119 46.8858,-112.131 46.9028,-112.142 46.9183,-112.147 46.926,-112.142 46.9399,-112.13 46.9491,-112.114 46.9572,-112.102 46.9679,-112.097 46.9784,-112.094 46.9897,-112.09 47.0008,-112.082 47.0103,-112.057 47.0247,-112.029 47.0374,-112 47.0521,-111.973 47.0726,-111.935 47.1038,-111.905 47.1135,-111.869 47.1146,-111.811 47.1199,-111.806 47.1268,-111.798 47.1319,-111.791 47.1364,-111.75 47.2145,-111.728 47.2648,-111.716 47.2935,-111.71 47.3021,-111.627 47.3706,-111.56 47.4122,-111.483 47.4404,-111.365 47.4688,-111.352 47.4754,-111.344 47.4858,-111.342 47.4977,-111.335 47.5178)
+LINESTRING(-119.386 45.7925,-119.233 45.7694,-119.087 45.7403,-118.945 45.7048,-118.805 45.663)
+LINESTRING(-104.801 47.1034,-104.799 47.1074,-104.79 47.1159,-104.776 47.123,-104.764 47.1263,-104.754 47.1299,-104.743 47.1329,-104.731 47.1344,-104.705 47.1355,-104.679 47.1338,-104.658 47.1281,-104.637 47.1205,-104.581 47.1072,-104.562 47.1032,-104.505 47.085,-104.447 47.0674,-104.39 47.0488,-104.336 47.0272,-104.327 47.0219,-104.317 47.0153,-104.308 47.0094,-104.297 47.006,-104.264 47.0023,-104.232 46.9998,-104.198 46.997,-104.165 46.9921,-104.141 46.9842,-104.123 46.9729,-104.105 46.9607,-104.086 46.9502,-104.076 46.9479,-104.064 46.9469,-104.053 46.9462,-104.045 46.9445,-104.045 46.9445)
+LINESTRING(-72.3907 43.6448,-72.4119 43.6698,-72.4168 43.6838,-72.4136 43.6983,-72.4102 43.7249,-72.4143 43.737,-72.424 43.7584,-72.4346 43.7801,-72.4418 43.7928,-72.4483 43.7955,-72.4559 43.7972,-72.4639 43.7979,-72.4752 43.7943,-72.4824 43.787,-72.4975 43.7871,-72.5106 43.7996,-72.5225 43.813,-72.5305 43.8192,-72.5377 43.815,-72.5504 43.8104,-72.5622 43.8124,-72.5689 43.8184,-72.5679 43.8249,-72.5816 43.8342,-72.5907 43.8387,-72.6011 43.8518,-72.607 43.8614,-72.6124 43.8711,-72.6162 43.8802,-72.6162 43.8868,-72.6151 43.8983,-72.6139 43.9108,-72.6137 43.9203,-72.617 43.9283,-72.6207 43.9358,-72.6243 43.96,-72.6253 43.9835,-72.6237 44.0069,-72.6196 44.031,-72.6141 44.0396,-72.6084 44.0462,-72.6052 44.0544,-72.6048 44.0641,-72.6046 44.0821,-72.605 44.1012,-72.6044 44.1201,-72.6013 44.138,-72.5961 44.1495,-72.5889 44.1599,-72.5822 44.1704,-72.5784 44.1823,-72.5784 44.1982,-72.5808 44.2144,-72.5842 44.2305,-72.5868 44.2465,-72.603 44.2579,-72.6343 44.2763,-72.6687 44.2967,-72.6942 44.3139,-72.709 44.3175,-72.7
18 44.3186,-72.7255 44.3211,-72.7377 44.3302,-72.7479 44.3401,-72.7588 44.3496,-72.7729 44.3575,-72.7807 44.3602,-72.7891 44.3623,-72.7977 44.3639,-72.8062 44.3652,-72.8157 44.3621,-72.8253 44.3606,-72.8481 44.3655,-72.8659 44.3721,-72.8826 44.3794,-72.902 44.3863,-72.9305 44.3911,-72.9618 44.395,-72.9878 44.4032,-73.0002 44.4211,-73.0339 44.4308,-73.0903 44.4345,-73.1485 44.4397,-73.1873 44.454)
+LINESTRING(-92.1598 46.8139,-92.1933 46.7818,-92.2085 46.768,-92.2276 46.7518)
+LINESTRING(-72.3311 43.626,-72.3351 43.6255,-72.3636 43.6279)
+LINESTRING(-72.3636 43.6279,-72.363 43.6302,-72.3623 43.6325,-72.3614 43.6345,-72.3603 43.6357,-72.3589 43.6393,-72.3575 43.6429,-72.3562 43.6466,-72.3552 43.6502,-72.3344 43.7103,-72.3075 43.7449,-72.2815 43.7662,-72.2633 43.7867,-72.254 43.8122,-72.2485 43.8388,-72.2429 43.8655,-72.2337 43.8914,-72.2245 43.9052,-72.2132 43.9166,-72.2016 43.9275,-72.1916 43.9396,-72.1829 43.954,-72.1745 43.9695,-72.1668 43.9852,-72.1602 44.0001,-72.1483 44.0345,-72.1397 44.0697,-72.1324 44.1053,-72.1242 44.1403,-72.1216 44.1608,-72.1217 44.1857,-72.1228 44.2107,-72.123 44.2316,-72.1119 44.2862,-72.0903 44.3261,-72.0682 44.352,-72.0555 44.3643,-72.0431 44.378,-72.0326 44.3898,-72.0257 44.4021,-72.0255 44.4136)
+LINESTRING(-72.3907 43.6448,-72.3839 43.6406,-72.3772 43.6363,-72.3704 43.6321,-72.3636 43.6279)
+LINESTRING(-92.1598 46.8139,-92.1636 46.7991,-92.1559 46.7779,-92.1438 46.7556,-92.1348 46.7374)
+LINESTRING(-92.1348 46.7374,-92.1347 46.7374,-92.1257 46.7205)
+LINESTRING(-123.06 44.6288,-123.059 44.6457,-123.056 44.6623,-123.051 44.6787,-123.046 44.6953,-123.052 44.7271,-123.043 44.7674,-123.025 44.8072,-123.006 44.8375,-123.001 44.8691,-122.997 44.9286,-122.994 44.9889,-122.991 45.0232,-122.964 45.0658,-122.906 45.1307,-122.843 45.1976,-122.799 45.2463,-122.777 45.2841,-122.773 45.3129,-122.773 45.3389,-122.746 45.3733)
+LINESTRING(-96.8473 46.8983,-96.8501 46.9115,-96.8658 46.9442,-96.8909 46.9676,-96.8969 46.9858,-96.9108 47.0094,-96.9282 47.0318,-96.9445 47.0466,-96.9553 47.0896,-96.9833 47.1706,-97.0147 47.2545,-97.0353 47.3063,-97.0397 47.3143,-97.0453 47.3222,-97.0507 47.3301,-97.055 47.3381,-97.0571 47.3471,-97.0576 47.3568,-97.0583 47.3667,-97.061 47.3764,-97.0651 47.3836,-97.0702 47.3911,-97.075 47.3986,-97.0782 47.4058,-97.0807 47.4239,-97.0805 47.4432,-97.0803 47.4628,-97.0829 47.4819,-97.0851 47.4858,-97.0888 47.4907,-97.0924 47.4955,-97.0941 47.4991,-97.0932 47.5175,-97.0896 47.5361,-97.0857 47.5545,-97.0842 47.5725,-97.0864 47.6461,-97.0885 47.7197,-97.0896 47.7933,-97.0889 47.8669,-97.0905 47.8716,-97.0941 47.8767,-97.0977 47.8818,-97.0994 47.8865,-97.0988 47.8983,-97.0978 47.9104,-97.0966 47.9224,-97.0955 47.9343)
+LINESTRING(-104.045 46.9445,-104.035 46.9399,-104.028 46.9367,-104.021 46.9349,-104.008 46.9344,-103.947 46.937,-103.887 46.9421,-103.827 46.9467,-103.767 46.9477,-103.759 46.9488,-103.749 46.9517,-103.739 46.9551,-103.732 46.9577,-103.704 46.9539,-103.675 46.951,-103.646 46.9491,-103.617 46.9484,-103.588 46.932,-103.575 46.931,-103.56 46.931,-103.546 46.9319,-103.532 46.9337,-103.498 46.9203,-103.456 46.9098,-103.42 46.901,-103.398 46.8926,-103.387 46.8928,-103.376 46.8923,-103.364 46.8909,-103.354 46.8884,-103.315 46.8953,-103.274 46.8976,-103.232 46.8975,-103.191 46.8972)
+LINESTRING(-92.2276 46.7518,-92.2444 46.7376,-92.2629 46.7248,-92.2837 46.7142,-92.3079 46.7069,-92.332 46.7046,-92.354 46.7063,-92.3762 46.7088,-92.4007 46.709,-92.4236 46.7046,-92.4419 46.6955,-92.457 46.683,-92.4707 46.6685)
+LINESTRING(-70.7622 43.0946,-70.7446 43.1066,-70.7183 43.1232,-70.6931 43.1397,-70.6783 43.1513,-70.6645 43.1725,-70.6457 43.2068,-70.6288 43.2416,-70.6207 43.2644,-70.6209 43.2742,-70.6224 43.2845,-70.6229 43.2948,-70.6204 43.3044,-70.617 43.3092,-70.6125 43.3138,-70.608 43.3185,-70.6045 43.3233,-70.5953 43.3411,-70.587 43.3592,-70.5788 43.3773,-70.5696 43.3951,-70.5528 43.417,-70.519 43.4588,-70.4831 43.5014,-70.4602 43.5261,-70.43 43.5506,-70.3981 43.5769,-70.3687 43.6045,-70.3462 43.6329)
+LINESTRING(-96.8424 46.8469,-96.8427 46.8767,-96.8473 46.8983)
+LINESTRING(-96.8424 46.8469,-96.8244 46.846,-96.8062 46.8456,-96.7881 46.8455,-96.77 46.8454,-96.7596 46.8454)
+LINESTRING(-98.7127 46.8835,-98.7028 46.887,-98.693 46.8896,-98.6829 46.8912,-98.672 46.8917,-98.5927 46.8915,-98.5133 46.8913,-98.434 46.8911,-98.3547 46.8908,-98.3366 46.8926,-98.3234 46.8967,-98.3111 46.9008,-98.2959 46.9027,-98.2447 46.9013,-98.1861 46.8996,-98.1295 46.9019,-98.0843 46.9124,-98.0677 46.9129,-98.0513 46.9116,-98.035 46.9098,-98.0187 46.909,-97.9987 46.9108,-97.9769 46.9148,-97.9548 46.9189,-97.9339 46.9212,-97.8709 46.9225,-97.8074 46.9225,-97.7439 46.9219,-97.6808 46.9213,-97.6637 46.9105,-97.6438 46.8951,-97.6248 46.8812,-97.6104 46.8753,-97.4461 46.877,-97.2816 46.8785,-97.1172 46.879,-96.9529 46.8778,-96.9297 46.8585,-96.9066 46.8499,-96.879 46.8475,-96.8424 46.8469)
+LINESTRING(-92.1257 46.7205,-92.1245 46.7181,-92.1094 46.7013,-92.0909 46.6854,-92.0701 46.6692,-92.039 46.6513,-92.0003 46.6363,-91.9598 46.6229,-91.9031 46.6023)
+LINESTRING(-84.385 46.3603,-84.4033 46.3269,-84.4225 46.2997,-84.4482 46.2766,-84.4859 46.2552,-84.4979 46.2503,-84.5108 46.2457,-84.5234 46.2409,-84.5345 46.2353,-84.5391 46.2313,-84.5421 46.2269,-84.5448 46.2224,-84.5488 46.2181,-84.549 46.2104,-84.5534 46.2046,-84.5588 46.1989,-84.5619 46.1912,-84.5732 46.1552,-84.5962 46.1434,-84.6297 46.1357,-84.6728 46.112,-84.7022 46.0829,-84.7367 46.0419,-84.7669 46.0001,-84.7834 45.9692,-84.782 45.9391,-84.7655 45.9127,-84.7454 45.8881,-84.7385 45.8745)
+LINESTRING(-84.7385 45.8745,-84.7329 45.8635,-84.7334 45.846)
+LINESTRING(-100.289 46.8362,-100.283 46.8366,-100.277 46.8369,-100.271 46.8372,-100.265 46.8376,-100.175 46.8653,-100.057 46.8658,-99.9458 46.8608,-99.879 46.8721,-99.8652 46.873,-99.8514 46.8731,-99.8377 46.873,-99.8239 46.8733,-99.7404 46.877,-99.657 46.8806,-99.5735 46.8841,-99.4899 46.8873,-99.47 46.8857,-99.4538 46.8813,-99.4391 46.8765,-99.4237 46.8739,-99.3542 46.8748,-99.2838 46.8797,-99.2132 46.885,-99.1434 46.887,-99.1368 46.8863,-99.1299 46.8846,-99.1229 46.883,-99.1163 46.8822,-99.1016 46.8835,-99.0861 46.8868,-99.0705 46.8903,-99.0557 46.8926,-99.0368 46.8934,-99.0167 46.8934,-98.9965 46.893,-98.9773 46.8927,-98.9184 46.8923,-98.8595 46.892,-98.8006 46.8916,-98.7417 46.8912,-98.7348 46.8879,-98.728 46.8857,-98.7208 46.8843,-98.7127 46.8835)
+LINESTRING(-100.773 46.8311,-100.754 46.8309,-100.737 46.8326,-100.72 46.8351,-100.703 46.8376,-100.68 46.8391,-100.655 46.8389,-100.629 46.8379,-100.605 46.8373,-100.528 46.8375,-100.447 46.8384,-100.366 46.8385,-100.289 46.8362)
+LINESTRING(-75.9866 44.3056,-75.982 44.2993)
+LINESTRING(-100.773 46.8311,-100.792 46.8307,-100.807 46.8296,-100.822 46.8265,-100.838 46.8202,-100.856 46.827,-100.894 46.8417,-100.922 46.8524,-100.949 46.8632,-100.996 46.8621,-101.043 46.8628,-101.09 46.8638,-101.136 46.8638,-101.32 46.8614,-101.503 46.8607,-101.686 46.8607,-101.869 46.8603,-101.872 46.8602,-101.875 46.8601,-101.877 46.8602,-101.88 46.8602,-101.897 46.8624,-101.916 46.8649,-101.935 46.867,-101.953 46.8677,-101.967 46.8669,-101.982 46.8654,-101.997 46.8639,-102.011 46.8629,-102.05 46.8631,-102.091 46.8645,-102.132 46.8652,-102.169 46.8634,-102.179 46.8612,-102.19 46.8576,-102.201 46.854,-102.213 46.8519,-102.244 46.8535,-102.275 46.8603,-102.305 46.8684,-102.336 46.8738,-102.39 46.8756,-102.444 46.8735,-102.496 46.8711,-102.543 46.8717,-102.588 46.8762,-102.633 46.8811,-102.679 46.8842,-102.726 46.8831,-102.754 46.8926,-102.787 46.8936,-102.82 46.8906,-102.845 46.8884,-102.916 46.8883,-103.022 46.8891,-103.126 46.8917,-103.191 46.8972)
+LINESTRING(-84.7334 45.846,-84.7334 45.8433,-84.734 45.8232,-84.7345 45.8031,-84.7349 45.7867)
+LINESTRING(-71.5367 43.1704,-71.5365 43.1762,-71.5341 43.1817,-71.5246 43.1931,-71.5157 43.2097,-71.5096 43.2264,-71.5086 43.2379,-71.5243 43.2661,-71.5485 43.2971,-71.5721 43.3256,-71.5854 43.3462,-71.5906 43.382,-71.5851 43.4124,-71.5762 43.4352,-71.5714 43.448,-71.5823 43.4636,-71.6013 43.4757,-71.6225 43.4869,-71.6401 43.4997,-71.6426 43.5073,-71.6411 43.5173,-71.6382 43.5275,-71.6364 43.5357,-71.6381 43.5497,-71.6425 43.5623,-71.6456 43.5755,-71.6438 43.5908,-71.6559 43.6002,-71.6624 43.6059,-71.6727 43.6339,-71.6744 43.6587,-71.6757 43.6835,-71.6808 43.7068,-71.6925 43.7303,-71.7059 43.7534,-71.7155 43.7773,-71.716 43.8028,-71.7109 43.8128,-71.7015 43.8242,-71.6913 43.8356,-71.6838 43.8457,-71.686 43.8536,-71.6957 43.8597,-71.7066 43.8648,-71.7311 43.9108,-71.7284 43.936,-71.7147 43.96,-71.7062 44.0024,-71.7056 44.0209,-71.7048 44.0399,-71.7042 44.0585,-71.7043 44.0759,-71.7016 44.0914,-71.6956 44.1207,-71.691 44.1417,-71.6864 44.1627,-71.6903 44.1783,-71.6918 44.1887,-71.6971 44.1965,-71.7058 44.1977
,-71.7145 44.1988,-71.724 44.2003,-71.7316 44.2019,-71.7405 44.212,-71.7545 44.2247,-71.7675 44.2357,-71.7732 44.2403,-71.7655 44.2518,-71.7567 44.2652,-71.7508 44.2786,-71.752 44.2906,-71.7589 44.2933,-71.7664 44.2948,-71.7788 44.3005,-71.7872 44.3015,-71.7954 44.3031,-71.8015 44.3165,-71.8055 44.3235,-71.8166 44.3278,-71.8323 44.3239,-71.8388 44.3192,-71.8445 44.3129,-71.8553 44.3123,-71.8662 44.3118,-71.8781 44.3189,-71.8873 44.3238,-71.8985 44.3318,-71.8992 44.3365)
+LINESTRING(-84.7349 45.7867,-84.735 45.783,-84.7345 45.7726,-84.7343 45.7625,-84.7336 45.7525,-84.7315 45.7422)
+LINESTRING(-71.5367 43.1704,-71.546 43.1693,-71.5551 43.1743,-71.5673 43.1797,-71.5802 43.184,-71.5914 43.1855,-71.5973 43.1833,-71.6031 43.1811,-71.609 43.1789,-71.6148 43.1767,-71.6335 43.179,-71.652 43.1806,-71.6705 43.1808,-71.6891 43.1787,-71.7042 43.1959,-71.7213 43.2116,-71.7382 43.2269,-71.7528 43.2427,-71.7563 43.2483,-71.7593 43.2544,-71.7624 43.2604,-71.7663 43.2657,-71.7718 43.2696,-71.7805 43.2738,-71.7899 43.2772,-71.7978 43.2788,-71.8074 43.2764,-71.817 43.274,-71.8274 43.2764,-71.8403 43.2809,-71.8529 43.2861,-71.8623 43.2903,-71.8656 43.2967,-71.8663 43.3029,-71.8666 43.3089,-71.8688 43.3149,-71.8796 43.3176,-71.8914 43.3195,-71.9023 43.3223,-71.9106 43.3277,-71.9123 43.3334,-71.914 43.3391,-71.9157 43.3448,-71.9174 43.3505,-71.9335 43.3695,-71.9615 43.3822,-71.9904 43.3913,-72.0095 43.3991,-72.0201 43.4083,-72.0293 43.4181,-72.0381 43.4279,-72.0477 43.4371,-72.0558 43.4411,-72.0658 43.4427,-72.0764 43.4437,-72.0861 43.4456,-72.0966 43.4593,-72.1013 43.4719,-72.104 43.4828,-72.1086 43.4911,
-72.1222 43.4953,-72.1341 43.5042,-72.1429 43.5151,-72.1468 43.5253,-72.1429 43.5322,-72.1396 43.5393,-72.1368 43.5466,-72.1345 43.5538,-72.1378 43.5601,-72.1434 43.5658,-72.1499 43.5712,-72.1556 43.5766,-72.1597 43.5828,-72.1627 43.5898,-72.166 43.5967,-72.1706 43.6024,-72.1835 43.613,-72.1964 43.623,-72.2086 43.6335,-72.2194 43.6454,-72.2298 43.6488,-72.2388 43.6506,-72.2478 43.6511,-72.2583 43.6508,-72.2809 43.6379,-72.307 43.6291,-72.3311 43.626)
+LINESTRING(-112.65 46.0082,-112.726 46.0286,-112.795 46.0514,-112.847 46.0829,-112.875 46.1298,-112.872 46.2123,-112.839 46.2802,-112.8 46.3264,-112.79 46.3365,-112.771 46.3455,-112.735 46.3572,-112.701 46.3703,-112.672 46.3918,-112.659 46.4134,-112.651 46.4341,-112.648 46.4554,-112.651 46.4787,-112.666 46.5064,-112.693 46.5265,-112.71 46.5344)
+LINESTRING(-70.8935 42.8831,-70.8815 42.9071,-70.8668 42.9334,-70.8583 42.9591)
+LINESTRING(-111.997 46.5914,-111.979 46.58,-111.962 46.5668,-111.948 46.5528,-111.934 46.5385,-111.951 46.4912,-111.989 46.4419,-112.026 46.3926,-112.045 46.3457,-112.064 46.3214,-112.096 46.2849,-112.131 46.2508,-112.156 46.234,-112.161 46.2405,-112.168 46.248,-112.177 46.2547,-112.186 46.2588,-112.196 46.2595,-112.214 46.2639,-112.239 46.2691,-112.264 46.272,-112.283 46.2723,-112.302 46.2717,-112.32 46.27,-112.338 46.2669,-112.347 46.2572,-112.345 46.2502,-112.339 46.2445,-112.339 46.2333,-112.344 46.2238,-112.336 46.212,-112.34 46.2023,-112.337 46.1961,-112.335 46.1894,-112.335 46.1825,-112.337 46.1762,-112.357 46.1555,-112.382 46.1354,-112.408 46.1041,-112.433 46.0499,-112.443 46.044,-112.453 46.0382,-112.459 46.0231,-112.468 46.0081,-112.476 45.9939,-112.481 45.9814)
+LINESTRING(-112.65 46.0082,-112.646 46.0086,-112.643 46.0085,-112.636 46.0082,-112.628 46.0079,-112.621 46.0074,-112.614 46.0064,-112.606 46.0047,-112.594 46.0021,-112.583 45.9993,-112.579 45.9984,-112.575 45.9977,-112.567 45.9963,-112.556 45.9935,-112.547 45.9908,-112.537 45.9883,-112.526 45.986,-112.516 45.9841,-112.505 45.9823,-112.499 45.9816,-112.493 45.9812,-112.487 45.9811,-112.481 45.9814)
+LINESTRING(-70.8961 42.8601,-70.8941 42.882,-70.8935 42.8831)
+LINESTRING(-70.8583 42.9591,-70.8744 42.9648,-70.8897 42.9695,-70.9045 42.9751,-70.9194 42.9832,-70.9262 42.9888,-70.9347 42.9962,-70.9439 43.003,-70.9527 43.0066,-70.9623 43.008,-70.9719 43.0093,-70.9816 43.0103,-70.9913 43.0105,-70.994 43.0094,-70.9966 43.0084,-71.0074 43.0108,-71.0183 43.0135,-71.0292 43.0159,-71.0401 43.0175,-71.0778 43.0369,-71.1074 43.0405,-71.1361 43.0381,-71.1711 43.0394,-71.1736 43.0413,-71.1761 43.0432,-71.1802 43.0436,-71.1847 43.0433,-71.189 43.0425,-71.1926 43.041,-71.1949 43.0413,-71.1971 43.0415,-71.1994 43.0418,-71.2016 43.0421,-71.2079 43.0466,-71.2142 43.0512,-71.2208 43.0567,-71.2242 43.0611,-71.2303 43.0618,-71.2365 43.0626,-71.2427 43.0632,-71.2488 43.0637,-71.2511 43.0623,-71.2533 43.061,-71.2555 43.0596,-71.2577 43.0583,-71.2659 43.0582,-71.2739 43.059,-71.2819 43.0598,-71.29 43.0595,-71.2946 43.0556,-71.2992 43.0516,-71.3038 43.0477,-71.3084 43.0438,-71.3348 43.0391,-71.3615 43.0277,-71.3874 43.0142,-71.4114 43.0032,-71.4144 42.9984,-71.4175 42.9935,-71.4206 42.9887,
-71.4236 42.9839)
+LINESTRING(-71.4236 42.9839,-71.4347 43.0016,-71.4464 43.0189,-71.4605 43.035,-71.4787 43.0492,-71.4768 43.0576,-71.4766 43.066,-71.4777 43.0746,-71.4791 43.083,-71.4933 43.1249,-71.5121 43.1495,-71.5289 43.1628,-71.5367 43.1704)
+LINESTRING(-104.801 47.1034,-104.804 47.0976,-104.808 47.0863,-104.813 47.0731,-104.817 47.0615,-104.823 47.0503,-104.832 47.0383,-104.841 47.0292,-104.85 47.0215,-104.859 47.014,-104.869 47.0052,-104.874 46.9996,-104.886 46.9904,-104.894 46.986,-104.903 46.9799,-104.91 46.974,-104.919 46.9686,-104.93 46.9643,-104.967 46.938,-105.004 46.9179,-105.044 46.901,-105.091 46.8846,-105.112 46.8697,-105.12 46.8479,-105.126 46.8245,-105.142 46.8049,-105.156 46.7931,-105.166 46.781,-105.177 46.7695,-105.193 46.7589,-105.218 46.7479,-105.243 46.7405,-105.269 46.7337,-105.297 46.7245,-105.328 46.7089,-105.35 46.6913,-105.37 46.6714,-105.391 46.6487,-105.399 46.6395,-105.404 46.6307,-105.41 46.6218,-105.416 46.6118,-105.436 46.5843,-105.457 46.5608,-105.48 46.5383,-105.507 46.5141,-105.521 46.5022,-105.535 46.4918,-105.55 46.4828,-105.57 46.4754,-105.601 46.469,-105.63 46.4662,-105.658 46.4621,-105.686 46.4519,-105.698 46.4427,-105.705 46.432)
+LINESTRING(-70.8961 42.8601,-70.9156 42.8644,-70.9329 42.8611,-70.9503 42.8556,-70.9698 42.8512,-70.9894 42.8501,-71.0076 42.8501,-71.0244 42.8481,-71.0396 42.8409,-71.0462 42.8339,-71.0502 42.8265,-71.0546 42.8196,-71.0622 42.8137,-71.0633 42.8133)
+LINESTRING(-71.0633 42.8133,-71.0766 42.8085)
+LINESTRING(-71.2314 42.746,-71.2354 42.7525,-71.2388 42.7564,-71.2424 42.7602,-71.2457 42.764,-71.2481 42.7682,-71.2495 42.7719,-71.2509 42.7755,-71.2523 42.7792,-71.2537 42.7829,-71.2574 42.784,-71.2611 42.785,-71.2648 42.7861,-71.2684 42.7871,-71.2724 42.7909,-71.2733 42.8017,-71.2759 42.8101,-71.2823 42.8165,-71.2946 42.8218,-71.2999 42.8345,-71.3115 42.8458,-71.326 42.8558,-71.3397 42.8644,-71.3515 42.8837,-71.363 42.9046,-71.3749 42.925,-71.3878 42.9426,-71.3938 42.9477,-71.4011 42.9528,-71.408 42.9579,-71.4128 42.9634,-71.4155 42.9686,-71.4182 42.9737,-71.4209 42.9788,-71.4236 42.9839)
+LINESTRING(-73.4559 45.0081,-73.4559 45.008,-73.4644 44.9844,-73.4542 44.9363,-73.46 44.8944,-73.4472 44.8485,-73.4522 44.813,-73.4476 44.7429,-73.531 44.691,-73.5231 44.6293,-73.5416 44.5666,-73.5437 44.4946,-73.5381 44.4001,-73.5713 44.3554,-73.5717 44.277,-73.5628 44.1889,-73.583 44.1741,-73.5864 44.1445,-73.6928 44.0424,-73.7668 43.9128,-73.7793 43.6689,-73.7329 43.604,-73.7446 43.4685,-73.7076 43.3638)
+LINESTRING(-71.0766 42.8085,-71.0911 42.8032,-71.119 42.7952,-71.1428 42.7848,-71.1591 42.7671,-71.1613 42.7438,-71.1407 42.7008,-71.1429 42.6776,-71.1501 42.6705,-71.1612 42.6672,-71.1744 42.667,-71.194 42.667)
+LINESTRING(-71.194 42.667,-71.205 42.6885,-71.2135 42.7102,-71.2225 42.7317,-71.2314 42.746)
+LINESTRING(-70.9999 42.5128,-70.9943 42.5144,-70.9887 42.5159,-70.9831 42.5175,-70.9775 42.5191,-70.9787 42.5248,-70.9799 42.5304,-70.9811 42.5361,-70.9823 42.5418,-70.9615 42.5782,-70.9646 42.6004,-70.9755 42.6243,-70.9776 42.6659,-70.9646 42.7079,-70.9432 42.7483,-70.9226 42.7861,-70.9121 42.8202,-70.9105 42.8312,-70.9075 42.8409,-70.9028 42.8502,-70.8961 42.8601)
+LINESTRING(-71.1169 42.5018,-71.101 42.5031,-71.0932 42.5083,-71.0875 42.5158,-71.0782 42.524,-71.0648 42.5229,-71.0462 42.5179,-71.0241 42.5132,-70.9999 42.5128)
+LINESTRING(-71.1169 42.5018,-71.1182 42.5042,-71.1194 42.5065,-71.1206 42.5089,-71.1219 42.5112,-71.1268 42.5187,-71.133 42.5259,-71.1391 42.533,-71.1441 42.5405,-71.1489 42.5516,-71.1527 42.5631,-71.1568 42.5745,-71.1626 42.5856,-71.167 42.59,-71.1728 42.5937,-71.1784 42.5975,-71.1824 42.602,-71.1864 42.6156,-71.1883 42.6327,-71.1902 42.6507,-71.194 42.667)
+LINESTRING(-71.194 42.667,-71.2314 42.6476,-71.2649 42.63,-71.3016 42.616,-71.3487 42.6077,-71.3949 42.5947,-71.4425 42.5718,-71.4848 42.5435,-71.5156 42.5142)
+LINESTRING(-105.705 46.432,-105.708 46.4287,-105.71 46.4253,-105.713 46.4219,-105.717 46.4186,-105.736 46.4024,-105.754 46.3862,-105.771 46.3699,-105.791 46.3534,-105.804 46.3438,-105.818 46.329,-105.832 46.3142,-105.845 46.3046,-105.871 46.2915,-105.898 46.2777,-105.924 46.2642,-105.951 46.2518,-106.001 46.2355,-106.088 46.2121,-106.179 46.1924,-106.244 46.187,-106.26 46.1903,-106.28 46.1953,-106.299 46.1998,-106.315 46.2016,-106.391 46.2004,-106.466 46.1997,-106.541 46.1995,-106.617 46.2,-106.626 46.2,-106.634 46.2,-106.646 46.1952,-106.662 46.1897,-106.679 46.1851,-106.692 46.1833,-106.704 46.184,-106.716 46.1854,-106.729 46.1869,-106.741 46.1879,-106.772 46.1899,-106.808 46.1933,-106.846 46.1976,-106.883 46.2023,-106.897 46.2032,-106.91 46.2027,-106.923 46.2017,-106.938 46.2011,-106.983 46.2038,-107.069 46.2091,-107.155 46.2124,-107.2 46.2091,-107.208 46.1844,-107.222 46.1578,-107.245 46.1352,-107.278 46.1227,-107.293 46.1198,-107.31 46.1161,-107.326 46.1121,-107.342 46.1087,-107.353 46.1064,-107.364 46
.1041,-107.375 46.1018,-107.385 46.1,-107.399 46.0967,-107.413 46.0922,-107.427 46.0878,-107.441 46.0852,-107.463 46.0838,-107.482 46.0829,-107.501 46.0807,-107.524 46.0751,-107.539 46.069,-107.551 46.0613,-107.563 46.0532,-107.576 46.046,-107.586 46.0425,-107.598 46.0399,-107.61 46.0371,-107.621 46.0328,-107.628 46.0284,-107.635 46.0236,-107.643 46.0188,-107.65 46.0146,-107.685 46.0009,-107.727 45.987,-107.764 45.9763,-107.779 45.972,-107.831 45.9555,-107.868 45.9456,-107.904 45.9393,-107.958 45.9338,-108.063 45.9133,-108.192 45.8958,-108.312 45.8714,-108.39 45.8303)
+LINESTRING(-112.481 45.9814,-112.475 45.9667,-112.468 45.9512,-112.459 45.9368,-112.445 45.9252,-112.36 45.9117,-112.275 45.9003,-112.189 45.8895,-112.102 45.878,-112.062 45.8769,-111.984 45.8762,-111.907 45.8758,-111.87 45.8759,-111.843 45.8838,-111.818 45.8954,-111.794 45.907,-111.77 45.9149,-111.725 45.9185,-111.653 45.9201,-111.582 45.9174,-111.543 45.9081,-111.536 45.9009,-111.527 45.8945,-111.447 45.8792,-111.341 45.8487,-111.246 45.8096,-111.199 45.7685,-111.159 45.7567,-111.123 45.7402,-111.092 45.7205,-111.063 45.6987,-111.053 45.6983,-111.043 45.6965,-111.033 45.6937,-111.025 45.6902,-111.012 45.6733,-110.987 45.6631,-110.958 45.6536,-110.934 45.6388,-110.908 45.6457,-110.873 45.6553,-110.84 45.6641,-110.816 45.6689,-110.807 45.6658,-110.798 45.6623,-110.789 45.6584,-110.78 45.6543,-110.756 45.6552,-110.73 45.6573,-110.705 45.6598,-110.679 45.6623,-110.67 45.6617,-110.661 45.6611,-110.652 45.6606,-110.643 45.66,-110.628 45.6549,-110.608 45.6484,-110.588 45.6434,-110.572 45.6427,-110.56 45.6391,-11
0.549 45.6354,-110.538 45.6318,-110.527 45.6281)
+LINESTRING(-108.479 45.7969,-108.462 45.8024,-108.432 45.8139,-108.411 45.8221,-108.39 45.8303)
+LINESTRING(-71.5156 42.5142,-71.5329 42.517,-71.5512 42.5183,-71.5683 42.52,-71.5822 42.5242,-71.6076 42.5198,-71.6429 42.519,-71.6803 42.519,-71.7122 42.5168)
+LINESTRING(-72.3636 43.6279,-72.3681 43.6255,-72.3726 43.6243,-72.3767 43.6226,-72.3799 43.6188,-72.3845 43.6151,-72.3917 43.6137,-72.3999 43.6131,-72.4073 43.6112,-72.4236 43.6017,-72.435 43.591,-72.4435 43.5787,-72.451 43.5643,-72.4549 43.552,-72.4555 43.5404,-72.4554 43.5288,-72.457 43.5162,-72.4595 43.5079,-72.4622 43.5003,-72.464 43.4928,-72.4636 43.4847,-72.4588 43.475,-72.4515 43.4672,-72.4443 43.4593,-72.4395 43.4496,-72.437 43.4222,-72.4412 43.3976,-72.4478 43.3729,-72.4524 43.3453,-72.4509 43.3318,-72.4471 43.3197,-72.4447 43.3078,-72.4476 43.2949,-72.4522 43.2855,-72.4568 43.276,-72.4614 43.2666,-72.466 43.2571,-72.4755 43.2431,-72.4871 43.2317,-72.4987 43.2203,-72.5082 43.2063,-72.5131 43.1909,-72.514 43.1767,-72.5141 43.1624,-72.5168 43.1464,-72.5243 43.1238,-72.5309 43.1039,-72.5357 43.0838,-72.5377 43.0607,-72.54 43.0549,-72.5422 43.0492,-72.5448 43.0435,-72.5473 43.0378,-72.5623 43.0218,-72.5833 43.0116,-72.6044 43.0014,-72.6193 42.9854,-72.6239 42.976,-72.6284 42.9665,-72.6329 42.9571,-72.6
374 42.9476,-72.6435 42.9295,-72.6453 42.9116,-72.6447 42.8934,-72.6436 42.8747,-72.6428 42.854,-72.6415 42.8378,-72.6383 42.8217,-72.632 42.8014,-72.6196 42.784,-72.6004 42.7687,-72.5828 42.7579,-72.5751 42.7538,-72.5595 42.7364,-72.558 42.7299)
+LINESTRING(-71.2699 42.3314,-71.2727 42.3358,-71.2749 42.3408,-71.2763 42.346,-71.2766 42.3509,-71.2728 42.3687,-71.2656 42.3871,-71.2585 42.4057,-71.2553 42.424,-71.2559 42.4353,-71.2565 42.4468,-71.2552 42.4582,-71.2502 42.469,-71.2448 42.4719,-71.2355 42.4743,-71.2254 42.4763,-71.2178 42.478,-71.1907 42.4883,-71.1708 42.4944,-71.1492 42.4983,-71.1169 42.5018)
+LINESTRING(-108.812 45.6861,-108.777 45.691,-108.745 45.698,-108.714 45.7055,-108.682 45.712,-108.654 45.7219,-108.63 45.7294,-108.605 45.7365,-108.578 45.745,-108.551 45.7551,-108.525 45.7669,-108.501 45.7807,-108.479 45.7969)
+LINESTRING(-110.527 45.6281,-110.505 45.6341,-110.487 45.6444,-110.47 45.6546,-110.448 45.6606,-110.43 45.6595,-110.414 45.6541,-110.399 45.6466,-110.381 45.6394,-110.353 45.6321,-110.327 45.6285,-110.299 45.6281,-110.269 45.63,-110.225 45.6404,-110.191 45.6596,-110.158 45.6828,-110.122 45.7054,-110.1 45.7134,-110.076 45.7189,-110.053 45.7244,-110.031 45.7327,-110.007 45.7466,-109.986 45.759,-109.964 45.7687,-109.935 45.7742,-109.921 45.7724,-109.906 45.7663,-109.892 45.7586,-109.88 45.7516,-109.87 45.7435,-109.862 45.7343,-109.854 45.7248,-109.846 45.7156,-109.817 45.6945,-109.782 45.6796,-109.743 45.6701,-109.703 45.6655,-109.663 45.6607,-109.627 45.659,-109.591 45.6598,-109.55 45.6627,-109.519 45.6663,-109.492 45.6709,-109.465 45.6755,-109.434 45.6791,-109.406 45.6812,-109.381 45.6829,-109.357 45.6846,-109.329 45.6867,-109.312 45.6888,-109.297 45.6915,-109.281 45.6942,-109.264 45.6963,-109.217 45.6908,-109.178 45.6737,-109.139 45.6566,-109.093 45.6511,-109.055 45.6551,-109.019 45.6603,-108.984 45.6662,-1
08.946 45.6723,-108.937 45.6741,-108.927 45.676,-108.918 45.6775,-108.908 45.6787,-108.884 45.6805,-108.86 45.6824,-108.836 45.6842,-108.812 45.6861)
+LINESTRING(-70.9999 42.5128,-71.0202 42.4814,-71.0191 42.4449,-71.0248 42.4035,-71.0656 42.3576,-71.0528 42.334,-71.0462 42.2992,-71.0379 42.2612,-71.0199 42.228)
+LINESTRING(-72.558 42.7299,-72.5551 42.7169,-72.5587 42.6964,-72.5671 42.6758,-72.5735 42.6634,-72.58 42.6518,-72.5866 42.6402,-72.593 42.6278)
+LINESTRING(-71.7122 42.5168,-71.7304 42.5246,-71.7454 42.5358,-71.7584 42.5461,-71.7708 42.5507,-71.7955 42.5507,-71.8216 42.5493,-71.8473 42.5466,-71.871 42.5428,-71.8741 42.5428,-71.9049 42.5448,-71.9373 42.5496,-71.9695 42.5552,-71.9999 42.5596,-72.0094 42.5593,-72.019 42.5576,-72.0294 42.5562,-72.0416 42.5567,-72.0519 42.5587,-72.0621 42.5612,-72.0721 42.5639,-72.0821 42.5665,-72.1005 42.5691,-72.1137 42.5687,-72.1273 42.5711,-72.147 42.5817,-72.1847 42.5786,-72.2245 42.566,-72.2621 42.555,-72.2931 42.5568,-72.302 42.5619,-72.3097 42.5677,-72.317 42.5737,-72.3251 42.5793,-72.3331 42.5835,-72.3414 42.5874,-72.3495 42.5916,-72.3564 42.5968,-72.36 42.6012,-72.3627 42.6059,-72.3654 42.6106,-72.3691 42.6149,-72.4003 42.6215,-72.4252 42.6165,-72.4472 42.6057,-72.4698 42.5947,-72.4727 42.5949,-72.4757 42.5952,-72.4789 42.5952,-72.4816 42.5946,-72.499 42.6062,-72.5304 42.6149,-72.5653 42.6218,-72.593 42.6278)
+LINESTRING(-96.8424 46.8469,-96.8423 46.8224,-96.8429 46.7977,-96.8432 46.773,-96.8419 46.7486,-96.8402 46.7414,-96.8374 46.734,-96.8346 46.7267,-96.833 46.7195,-96.8329 46.6969,-96.8348 46.6739,-96.8362 46.651,-96.8347 46.6286,-96.832 46.6167,-96.829 46.6058,-96.8264 46.5943,-96.8252 46.5807,-96.8266 46.5578,-96.8299 46.5358,-96.8332 46.5138,-96.8344 46.491,-96.8331 46.3812,-96.8339 46.2715,-96.8358 46.1618,-96.8377 46.052,-96.8372 46.0204,-96.8366 45.9867,-96.8389 45.9534,-96.8434 45.936)
+LINESTRING(-71.1303 42.202,-71.1129 42.2035,-71.0943 42.2032,-71.0759 42.2032,-71.0591 42.2059,-71.0482 42.2109,-71.039 42.2174,-71.0301 42.2236,-71.0199 42.228)
+LINESTRING(-71.1303 42.202,-71.1914 42.2171,-71.2108 42.233,-71.2128 42.2535,-71.2217 42.2822,-71.2319 42.2945,-71.2452 42.306,-71.2587 42.3179,-71.2699 42.3314)
+LINESTRING(-71.2699 42.3314,-71.2938 42.3293,-71.3159 42.323,-71.3373 42.3157,-71.3593 42.3106,-71.3777 42.3094,-71.397 42.3097,-71.4162 42.3098,-71.4343 42.3084,-71.4473 42.3049,-71.4584 42.2995,-71.4685 42.2931,-71.4784 42.2866,-71.4964 42.2785,-71.518 42.2726,-71.5403 42.2668,-71.5608 42.2593)
+LINESTRING(-71.5156 42.5142,-71.5453 42.4872,-71.5783 42.4498,-71.6028 42.4103,-71.6068 42.3774,-71.6005 42.3644,-71.5925 42.352,-71.5847 42.3395,-71.5788 42.3265,-71.5744 42.3097,-71.5708 42.2928,-71.5668 42.2759,-71.5608 42.2593)
+LINESTRING(-96.7596 46.8454,-96.7446 46.8455,-96.7192 46.8456,-96.6938 46.8456,-96.6684 46.8455,-96.6284 46.8409,-96.6166 46.8298,-96.6138 46.8136,-96.601 46.7938,-96.5789 46.7759,-96.5549 46.7585,-96.5304 46.7414,-96.5067 46.7244,-96.4772 46.7063,-96.444 46.6896,-96.4137 46.6741,-96.3928 46.6593,-96.3271 46.5796,-96.2703 46.4977,-96.2093 46.4177,-96.1307 46.3436,-96.1241 46.3302,-96.1227 46.3107,-96.1229 46.2925,-96.1211 46.2828,-96.0682 46.2439,-96.015 46.2056,-95.9631 46.1666,-95.914 46.1254,-95.9041 46.1148,-95.898 46.1056,-95.893 46.0964,-95.8864 46.086,-95.8796 46.0792,-95.871 46.0727,-95.8621 46.0664,-95.8546 46.06,-95.8498 46.0541,-95.8455 46.0479,-95.8406 46.0418,-95.8341 46.0361,-95.8149 46.0254,-95.7943 46.0182,-95.7725 46.0126,-95.7499 46.0073,-95.7354 46.0021,-95.7212 45.9949,-95.7074 45.9873,-95.694 45.9807,-95.6518 45.9638,-95.6174 45.9499,-95.5844 45.9339,-95.546 45.9104,-95.5349 45.9031,-95.5215 45.895,-95.5075 45.8874,-95.4946 45.8818,-95.4836 45.8791,-95.4717 45.8775,-95.46 45.876,-95.449
2 45.8737,-95.4282 45.865,-95.4044 45.8532,-95.3804 45.8422,-95.3586 45.8361,-95.3063 45.8339,-95.2513 45.836,-95.1966 45.8373,-95.1455 45.8329,-95.104 45.8029,-95.0558 45.7712,-95.0042 45.7429,-94.9524 45.7235)
+LINESTRING(-107.436 45.5783,-107.46 45.6401,-107.492 45.6747,-107.533 45.7027,-107.584 45.7449,-107.635 45.749,-107.711 45.7464,-107.79 45.7442,-107.849 45.7494,-107.917 45.7788,-108.028 45.7878,-108.145 45.7881,-108.232 45.7916,-108.238 45.7937,-108.244 45.7958,-108.25 45.7978,-108.256 45.7999,-108.289 45.8095,-108.323 45.8162,-108.357 45.8224,-108.39 45.8303)
+LINESTRING(-73.8409 42.6969,-73.7669 42.7619,-73.7827 42.8808,-73.8124 42.9185,-73.8053 43.0066,-73.7491 43.07,-73.7578 43.101,-73.7117 43.185,-73.6791 43.2979,-73.7076 43.3638)
+LINESTRING(-73.8409 42.6969,-73.8424 42.6978,-73.844 42.6986,-73.8455 42.6994,-73.8471 42.7002,-73.8671 42.7142,-73.889 42.729,-73.9117 42.7431,-73.9344 42.7549,-73.9549 42.763,-73.9759 42.7701,-73.9965 42.7776,-74.0161 42.7872,-74.0164 42.7885,-74.0167 42.7898,-74.017 42.791,-74.0173 42.7923)
+LINESTRING(-71.5608 42.2593,-71.6 42.2393,-71.6313 42.2275,-71.6658 42.2215,-71.7144 42.2186,-71.7206 42.2186,-71.7274 42.2188,-71.734 42.2187,-71.7398 42.2178,-71.766 42.2095,-71.7932 42.2007,-71.8208 42.1928,-71.848 42.1871)
+LINESTRING(-71.7122 42.5168,-71.7157 42.5062,-71.7164 42.4949,-71.7176 42.4829,-71.7226 42.4704,-71.7342 42.4596,-71.7501 42.4516,-71.7674 42.4443,-71.7828 42.4353,-71.8107 42.4,-71.8143 42.3634,-71.8025 42.3263,-71.7847 42.2894,-71.788 42.2794,-71.7886 42.2696,-71.7896 42.2597,-71.7944 42.2494,-71.8099 42.2363,-71.8272 42.2267,-71.8415 42.2128,-71.848 42.1871)
+LINESTRING(-71.2839 42.0211,-71.2758 42.027,-71.2686 42.0331,-71.2617 42.0394,-71.2547 42.0456,-71.2346 42.0695,-71.2255 42.0921,-71.2169 42.1148,-71.1981 42.1391,-71.1778 42.1541,-71.1585 42.1656,-71.142 42.1797,-71.1303 42.202)
+LINESTRING(-71.5608 42.2593,-71.5523 42.2362,-71.5442 42.2145,-71.5352 42.1932,-71.5236 42.1712,-71.5133 42.1663,-71.5013 42.1603,-71.4905 42.1534,-71.484 42.1458,-71.481 42.1384,-71.4781 42.131,-71.4746 42.1236,-71.4704 42.1167,-71.4636 42.1099,-71.4547 42.1036,-71.4452 42.0976,-71.437 42.0912,-71.4312 42.0845,-71.4266 42.0774,-71.4217 42.0703,-71.4148 42.0635,-71.4035 42.0555,-71.3902 42.0472,-71.3761 42.0397,-71.3623 42.034,-71.3439 42.0297,-71.3239 42.0274,-71.3035 42.0252,-71.2839 42.0211)
+LINESTRING(-94.9524 45.7235,-94.9185 45.7034,-94.8716 45.6838,-94.8217 45.6684,-94.7784 45.6606,-94.7602 45.6603,-94.7414 45.6611,-94.7229 45.6612,-94.7054 45.6591,-94.6808 45.6515,-94.6574 45.6417,-94.6337 45.6319,-94.6084 45.6243,-94.5825 45.6198,-94.5558 45.6166,-94.529 45.6138,-94.5026 45.6105,-94.4806 45.6051,-94.4684 45.6004,-94.4509 45.5997,-94.4127 45.6061,-94.3817 45.5976,-94.345 45.5711,-94.3111 45.5403,-94.2887 45.5191)
+LINESTRING(-71.2839 42.0211,-71.2599 42.0164,-71.2366 42.01,-71.2144 42.002,-71.1939 41.9921,-71.1721 41.9799,-71.1497 41.968,-71.1258 41.9584,-71.0996 41.9529,-71.0885 41.9518,-71.0774 41.9505,-71.0664 41.9487,-71.0558 41.9461,-71.0396 41.9388,-71.0114 41.9248,-70.9881 41.913,-70.9648 41.9012,-70.9621 41.8996,-70.9593 41.898,-70.9565 41.8964,-70.9538 41.8948,-70.9471 41.8895,-70.9414 41.8836,-70.9354 41.8778,-70.9281 41.8729,-70.9106 41.866,-70.8913 41.8605,-70.8718 41.8548,-70.8537 41.8476,-70.8447 41.8425,-70.8362 41.8369,-70.8276 41.8313,-70.8188 41.8261,-70.7962 41.8154,-70.7739 41.806,-70.752 41.796,-70.7306 41.7833)
+LINESTRING(-70.5858 41.7429,-70.6007 41.7714,-70.625 41.7761,-70.6518 41.7701,-70.6741 41.7662,-70.6887 41.7689,-70.7026 41.7736,-70.7164 41.7789,-70.7306 41.7833)
+LINESTRING(-69.9924 41.7832,-70.0022 41.7634,-70.0154 41.7453,-70.03 41.7278,-70.0444 41.7098,-70.0598 41.7041,-70.0861 41.7033,-70.1135 41.7048,-70.1318 41.7062,-70.1642 41.7034,-70.1933 41.694,-70.2213 41.6828,-70.2505 41.6741,-70.2683 41.6729,-70.29 41.6737,-70.3126 41.6749,-70.3329 41.6749,-70.3394 41.6741,-70.3486 41.6727,-70.3573 41.6714,-70.3624 41.6711,-70.3826 41.6807,-70.4017 41.6975,-70.4214 41.715,-70.4433 41.7264,-70.4576 41.7303,-70.4751 41.735,-70.4927 41.7389,-70.5071 41.7405,-70.5175 41.7477,-70.5264 41.7553,-70.5346 41.7633,-70.543 41.7716,-70.5779 41.8094,-70.597 41.8414,-70.6059 41.8666,-70.6099 41.8834,-70.6174 41.903,-70.6285 41.9142,-70.6464 41.9206,-70.6745 41.9261,-70.6834 41.9318,-70.6986 41.9438,-70.7141 41.9566,-70.724 41.9646,-70.7326 41.9791,-70.7376 42.0016,-70.7394 42.0244,-70.7386 42.0397,-70.7447 42.075,-70.7719 42.1057,-70.8097 42.1316,-70.8478 42.1523,-70.8573 42.1561,-70.868 42.1589,-70.879 42.1615,-70.8892 42.1643,-70.914 42.1744,-70.9355 42.1851,-70.9584 42.1954,-70.98
79 42.2042,-70.9943 42.2096,-70.9977 42.2182,-71.0042 42.2258,-71.0199 42.228)
+LINESTRING(-72.0711 42.1322,-72.0295 42.1359,-71.9612 42.154,-71.892 42.175,-71.848 42.1871)
+LINESTRING(-74.0173 42.7923,-74.0225 42.7988,-74.0276 42.7982,-74.0278 42.8046,-74.0631 42.8357,-74.1067 42.8562,-74.1557 42.871,-74.2068 42.8851,-74.2186 42.889,-74.2315 42.8933,-74.2445 42.8972,-74.2566 42.8997,-74.2727 42.9,-74.2899 42.8983,-74.3068 42.8966,-74.3223 42.8971,-74.3322 42.8994,-74.3417 42.9027,-74.3513 42.9061,-74.3609 42.9088,-74.3653 42.9095,-74.3699 42.91,-74.3743 42.9107,-74.3784 42.9122,-74.4146 42.9012,-74.4437 42.8786,-74.478 42.8594,-74.5299 42.8588,-74.5375 42.8609,-74.5451 42.8636,-74.5527 42.8663,-74.5604 42.8686,-74.5767 42.871,-74.5934 42.872,-74.61 42.8737,-74.6259 42.8781,-74.639 42.8959,-74.6547 42.918,-74.6725 42.9383,-74.692 42.9504,-74.7061 42.9511,-74.7201 42.9518,-74.7342 42.9522,-74.7483 42.9525,-74.7808 42.968,-74.8066 42.9771,-74.8348 42.9796,-74.8746 42.9755,-74.8816 42.9737,-74.887 42.9715,-74.8939 42.9701,-74.9053 42.9702,-74.9357 42.9731,-74.9721 42.9773,-75.0089 42.9823,-75.0404 42.9875,-75.0442 42.991,-75.0472 42.9946,-75.05 42.9981,-75.0529 43.0017,-75.0648 43
.0129,-75.0773 43.0219,-75.0904 43.0302,-75.104 43.0396,-75.1126 43.041,-75.1222 43.044,-75.1317 43.0476,-75.1397 43.0511,-75.1775 43.0657,-75.2152 43.0778,-75.2528 43.0894,-75.2906 43.1023,-75.2989 43.0997,-75.3076 43.0962,-75.3161 43.0931,-75.3239 43.0914,-75.3323 43.092,-75.3386 43.0941,-75.3448 43.0965,-75.3533 43.0979,-75.3656 43.0967,-75.3778 43.0937,-75.3902 43.0913,-75.403 43.0917,-75.4276 43.0975,-75.4506 43.103,-75.4742 43.1072,-75.5008 43.109,-75.5629 43.1056,-75.6265 43.0971,-75.6898 43.0876,-75.7507 43.0811,-75.781 43.0816,-75.8101 43.0852,-75.8391 43.0897,-75.8692 43.0927,-75.9426 43.0943,-76.0161 43.0937,-76.0896 43.0932,-76.1631 43.095)
+LINESTRING(-75.982 44.2993,-75.9737 44.2878,-75.8757 44.1568,-75.9131 44.0852,-75.9158 44.0059,-75.9449 43.989,-75.965 43.9425,-76.0191 43.8808,-76.0471 43.8035,-76.0767 43.7376,-76.075 43.6565,-76.1242 43.5056,-76.1155 43.3769,-76.1326 43.2557,-76.109 43.1399,-76.1631 43.095)
+LINESTRING(-84.7315 45.7422,-84.7205 45.7113,-84.6962 45.6916,-84.6678 45.6768,-84.6444 45.6605,-84.6369 45.6459,-84.6308 45.6246,-84.6264 45.6033,-84.6236 45.5889,-84.6178 45.5585,-84.6144 45.533,-84.6123 45.5074,-84.6104 45.4769,-84.6067 45.4661,-84.5985 45.4464,-84.5897 45.4251,-84.5839 45.4096,-84.5831 45.3927,-84.5882 45.3762,-84.595 45.3597,-84.5994 45.3431,-84.598 45.3279,-84.5923 45.3123,-84.5853 45.2967,-84.5798 45.2816,-84.6022 45.2505,-84.6213 45.2256,-84.6423 45.2024,-84.6701 45.1768,-84.6729 45.1596,-84.6775 45.1431,-84.6832 45.1266,-84.6894 45.1095,-84.6911 45.1062,-84.6935 45.1029,-84.6959 45.0996,-84.6975 45.0964,-84.7 45.0774,-84.7009 45.0447,-84.6969 45.0131,-84.6847 44.9971,-84.6718 44.9774,-84.6733 44.9557,-84.6815 44.9336,-84.6882 44.9122,-84.6879 44.9006,-84.6851 44.8885,-84.6826 44.8762,-84.6831 44.8642,-84.6896 44.8534,-84.6995 44.8445,-84.7091 44.8315,-84.7148 44.8081,-84.7148 44.7906,-84.7127 44.7729,-84.7096 44.7552,-84.7064 44.7378,-84.7008 44.7141,-84.6953 44.6906,-84.6955 44.66
74,-84.707 44.6446,-84.706 44.6295,-84.7064 44.6143,-84.7071 44.5991,-84.7073 44.5839)
+LINESTRING(-73.821 42.53,-73.8229 42.551,-73.8265 42.5678,-73.8282 42.5838,-73.8241 42.6018,-73.8223 42.6091,-73.8231 42.6159,-73.8254 42.6227,-73.8286 42.6304,-73.8271 42.6353,-73.8262 42.6475,-73.8315 42.6627,-73.8482 42.677,-73.8478 42.6819,-73.8459 42.6872,-73.8434 42.6925,-73.8409 42.6969)
+LINESTRING(-71.8681 42.025,-71.8695 42.0303,-71.868 42.0481,-71.8632 42.0657,-71.858 42.0834,-71.8556 42.1012,-71.8574 42.116,-71.8607 42.1314,-71.863 42.1467,-71.8615 42.1612,-71.8581 42.1676,-71.8548 42.1741,-71.8514 42.1806,-71.848 42.1871)
+LINESTRING(-71.3774 41.8922,-71.3712 41.8967,-71.3576 41.9034,-71.3422 41.9117,-71.3304 41.9213,-71.3173 41.9443,-71.3061 41.9727,-71.2954 42.0004,-71.2839 42.0211)
+LINESTRING(-123.365 43.1586,-123.371 43.1635,-123.377 43.1684,-123.384 43.1733,-123.39 43.1782,-123.392 43.1986,-123.39 43.2317,-123.387 43.2656,-123.383 43.2884,-123.379 43.304,-123.372 43.3194,-123.365 43.3346,-123.36 43.3497,-123.357 43.363,-123.356 43.3763,-123.355 43.3898,-123.35 43.4032,-123.345 43.4131,-123.339 43.4228,-123.333 43.4327,-123.327 43.4426,-123.331 43.4487,-123.327 43.4562,-123.321 43.4639,-123.317 43.4705,-123.326 43.4876,-123.321 43.5053,-123.308 43.522,-123.293 43.5361,-123.284 43.5605,-123.266 43.5769,-123.243 43.5917,-123.221 43.611,-123.22 43.6187,-123.22 43.6272,-123.221 43.6355,-123.219 43.6429,-123.212 43.6563,-123.206 43.6672,-123.202 43.6789,-123.201 43.6947,-123.202 43.7001,-123.2 43.7159,-123.191 43.7309,-123.179 43.7443,-123.164 43.7533,-123.149 43.7532,-123.133 43.749,-123.114 43.7468,-123.092 43.7525,-123.045 43.7979,-123.017 43.8675,-123.004 43.9406,-123.005 43.996,-123.013 44.0005,-123.023 44.0177,-123.035 44.0269,-123.045 44.0401,-123.047 44.0695,-123.045 44.0854,-123.
043 44.1011,-123.043 44.1169,-123.046 44.1329,-123.05 44.1426,-123.056 44.1533,-123.061 44.1638,-123.063 44.1732,-123.061 44.2871,-123.06 44.401,-123.059 44.515,-123.06 44.6288)
+LINESTRING(-73.821 42.53,-73.7878 42.522,-73.7431 42.5067,-73.7018 42.4924,-73.6786 42.487,-73.6769 42.486,-73.6753 42.4849,-73.6736 42.4839,-73.6719 42.4828,-73.6442 42.4838,-73.6107 42.4735,-73.5786 42.4578,-73.5555 42.443,-73.5544 42.4379,-73.5533 42.4328,-73.5518 42.4278,-73.5498 42.4229)
+LINESTRING(-72.0711 42.1322,-72.0734 42.129,-72.0753 42.1237,-72.079 42.1097,-72.0835 42.0971,-72.0893 42.085,-72.096 42.0753,-72.1115 42.0599,-72.1285 42.0442,-72.1423 42.0307)
+LINESTRING(-72.0711 42.1322,-72.0744 42.1338,-72.0779 42.1352,-72.0816 42.1363,-72.0854 42.1372,-72.1279 42.1372,-72.1581 42.1516,-72.1827 42.1697,-72.2089 42.1806,-72.2319 42.18,-72.2506 42.1743,-72.2651 42.1678,-72.2756 42.1648,-72.2868 42.1658,-72.298 42.1676,-72.3093 42.1694,-72.3209 42.17,-72.3325 42.1708,-72.3419 42.1734,-72.3509 42.1768,-72.3616 42.1796,-72.3998 42.1866,-72.4306 42.1895,-72.4678 42.1878,-72.5251 42.1807,-72.5452 42.1823,-72.5593 42.1881,-72.5735 42.1894,-72.5938 42.1774,-72.6019 42.1718,-72.6168 42.1622,-72.6326 42.1535,-72.643 42.1503)
+LINESTRING(-72.643 42.1503,-72.6424 42.1626,-72.6441 42.1879,-72.6459 42.2153,-72.6457 42.2338,-72.6433 42.2466,-72.641 42.2594,-72.6377 42.2739,-72.6347 42.2825,-72.6266 42.2901,-72.6173 42.2961,-72.6096 42.3025,-72.606 42.3119,-72.6073 42.3137,-72.609 42.3153,-72.6108 42.3169,-72.6123 42.3186,-72.6464 42.344,-72.6489 42.3803,-72.6375 42.4207,-72.6301 42.4584,-72.635 42.5111,-72.639 42.5491,-72.6293 42.5842,-72.593 42.6278)
+LINESTRING(-71.3736 41.8166,-71.3567 41.8123,-71.3427 41.8074)
+LINESTRING(-73.4183 42.3379,-73.469 42.3677,-73.5224 42.4002,-73.5498 42.4229)
+LINESTRING(-71.4151 41.816,-71.4081 41.8176)
+LINESTRING(-71.4151 41.816,-71.4177 41.8191,-71.4193 41.8215,-71.4196 41.8241,-71.4188 41.8278,-71.4142 41.8388,-71.4097 41.8497,-71.4038 41.8632,-71.4008 41.8695,-71.396 41.8719,-71.3901 41.8725,-71.3841 41.8728,-71.3792 41.8745,-71.3788 41.879,-71.3783 41.8834,-71.3778 41.8878,-71.3774 41.8922,-71.3774 41.8922)
+LINESTRING(-73.291 42.3121,-73.3052 42.3129,-73.3194 42.3137,-73.3335 42.3144,-73.3477 42.3152,-73.3553 42.3158,-73.3689 42.3158,-73.3824 42.3161,-73.3891 42.3177,-73.4158 42.3364,-73.4183 42.3379)
+LINESTRING(-92.4707 46.6685,-92.4929 46.6526,-92.5167 46.638,-92.5371 46.6218,-92.5491 46.6012,-92.5534 46.5997,-92.5981 46.5678,-92.6453 46.5305,-92.6906 46.4923,-92.7279 46.4584,-92.7379 46.4466,-92.7462 46.4335,-92.754 46.4201,-92.7621 46.4077,-92.7739 46.3944,-92.7874 46.3814,-92.8007 46.368,-92.8114 46.3539,-92.8244 46.3107,-92.8246 46.2663,-92.8288 46.2222,-92.8539 46.18,-92.8607 46.1741,-92.868 46.1685,-92.8753 46.1626,-92.8824 46.1559,-92.8882 46.1438,-92.8897 46.1284,-92.8897 46.1128,-92.8908 46.0996,-92.892 46.0967,-92.8932 46.0937,-92.8945 46.0907,-92.8957 46.0877,-92.905 46.0689,-92.9156 46.0498,-92.9249 46.0305,-92.9302 46.011,-92.9308 46.0065,-92.9316 46.002,-92.9331 45.9975,-92.9356 45.9932,-92.9392 45.9896,-92.9449 45.985,-92.9511 45.9808,-92.9561 45.9781,-92.967 45.9251,-92.9764 45.873,-92.9831 45.8206,-92.9858 45.7669,-92.9878 45.6465,-92.9915 45.5263,-92.9962 45.4061,-93.0012 45.286)
+LINESTRING(-72.643 42.1503,-72.6543 42.15,-72.6656 42.1491,-72.6767 42.1482,-72.6876 42.148,-72.6972 42.149,-72.7073 42.1507,-72.7175 42.1524,-72.7273 42.1536,-72.7498 42.1541,-72.7741 42.154,-72.7981 42.1542,-72.8195 42.1558,-72.84 42.1599,-72.8631 42.166,-72.8866 42.1725,-72.9085 42.1776,-72.9297 42.1886,-72.9493 42.2072,-72.9694 42.2253,-72.9927 42.2348,-73.0666 42.2478,-73.1088 42.2653,-73.1385 42.283,-73.1751 42.2967,-73.2022 42.3024,-73.2321 42.3077,-73.2625 42.3113,-73.291 42.3121)
+LINESTRING(-71.3427 41.8074,-71.3412 41.8068,-71.3276 41.8005,-71.3142 41.7935,-71.3008 41.7867,-71.2871 41.7809,-71.2726 41.7767,-71.2601 41.7738,-71.2479 41.7699,-71.2348 41.7627,-71.2065 41.7396,-71.1877 41.7226)
+LINESTRING(-71.1877 41.7226,-71.1738 41.7101,-71.1643 41.7023)
+LINESTRING(-72.643 42.1503,-72.6285 42.1427,-72.6126 42.136,-72.5965 42.13,-72.5781 42.123,-72.5677 42.1202,-72.5545 42.1173,-72.5416 42.1141,-72.5323 42.11,-72.5233 42.1013,-72.5187 42.092,-72.517 42.0818,-72.5168 42.0706,-72.5167 42.0626,-72.5164 42.055,-72.516 42.0475,-72.516 42.0395,-72.5161 42.0348)
+LINESTRING(-89.6954 45.1986,-89.711 45.1825,-89.7182 45.1669,-89.7194 45.1504,-89.7168 45.1315,-89.7035 45.1303,-89.6903 45.1291,-89.677 45.1279,-89.6637 45.1267,-89.6651 45.119,-89.6666 45.1113,-89.668 45.1035,-89.6694 45.0958,-89.672 45.0916,-89.6767 45.0886,-89.682 45.0857,-89.6861 45.0819,-89.6891 45.0762,-89.6909 45.0708,-89.692 45.0652,-89.6931 45.0591,-89.6953 45.047,-89.6975 45.035,-89.6996 45.023,-89.7018 45.011,-89.7035 45.0016,-89.7043 44.9929,-89.7034 44.9845,-89.7002 44.9758,-89.6941 44.9633,-89.6909 44.9554)
+LINESTRING(-96.8434 45.936,-96.8468 45.9227,-96.8501 45.9162,-96.8542 45.9096,-96.8581 45.9029,-96.8606 45.8965,-96.8635 45.8751,-96.8639 45.8529,-96.8649 45.8309,-96.8693 45.8097,-96.8821 45.7869,-96.9038 45.7572,-96.9273 45.728,-96.9454 45.7069,-96.9566 45.6961,-96.9694 45.6853,-96.9814 45.6742,-96.9901 45.6623,-96.9909 45.6541,-96.9908 45.6391,-96.9904 45.6269,-96.99 45.6147,-96.9901 45.6124,-96.9881 45.5733,-96.9854 45.5276,-96.9853 45.4824,-96.9912 45.4446,-97.0001 45.4326,-97.0192 45.4101,-97.04 45.3867,-97.054 45.3721,-97.0532 45.3591,-97.0524 45.346,-97.0517 45.333,-97.0509 45.3202)
+LINESTRING(-89.6064 44.827,-89.5999 44.8343,-89.5935 44.8417,-89.5853 44.8515,-89.5761 44.8632,-89.5685 44.8709,-89.564 44.8789,-89.5595 44.8869,-89.5519 44.8949,-89.5442 44.8991,-89.5355 44.9009,-89.526 44.901,-89.5157 44.9002,-89.5115 44.8998,-89.5073 44.8995,-89.5031 44.8991,-89.4989 44.8987,-89.4946 44.8985,-89.4908 44.8986,-89.487 44.8986,-89.4828 44.8984,-89.4727 44.8975,-89.4626 44.8966,-89.4526 44.8956,-89.4434 44.8948)
+LINESTRING(-89.6909 44.9554,-89.6899 44.9529,-89.6856 44.9425,-89.6796 44.93,-89.6643 44.901,-89.6499 44.8754,-89.632 44.8514,-89.6064 44.827)
+LINESTRING(-118.805 45.663,-118.789 45.6592,-118.767 45.6627,-118.751 45.6634,-118.734 45.6621,-118.712 45.6595,-118.688 45.644,-118.664 45.6224,-118.64 45.6033,-118.617 45.5951,-118.602 45.5875,-118.591 45.5819,-118.555 45.5843,-118.515 45.5937,-118.476 45.5959,-118.453 45.58,-118.453 45.5709,-118.457 45.5623,-118.461 45.5537,-118.461 45.5444,-118.445 45.5285,-118.416 45.4976,-118.389 45.4672,-118.377 45.453,-118.378 45.4462,-118.367 45.4356,-118.357 45.4246,-118.347 45.4136,-118.337 45.403,-118.325 45.3935,-118.313 45.3843,-118.301 45.375,-118.29 45.3648,-118.262 45.3665,-118.23 45.3746,-118.2 45.3839,-118.176 45.3889,-118.167 45.3884,-118.145 45.3866,-118.118 45.3831,-118.093 45.3776,-118.057 45.3561,-118.039 45.3255,-118.029 45.2901,-118.017 45.2545,-118.016 45.2463,-118.017 45.2346,-118.02 45.2231,-118.024 45.2158,-118.023 45.2094,-118.019 45.2027,-118.014 45.1969,-118 45.1909,-117.986 45.1848,-117.973 45.1773,-117.964 45.1708,-117.961 45.1602,-117.962 45.1488,-117.964 45.1387,-117.965 45.132,-117.945
45.0591,-117.922 45.0149,-117.884 44.9748,-117.816 44.914,-117.812 44.8865,-117.81 44.8492,-117.81 44.8106,-117.809 44.7792,-117.809 44.7734,-117.81 44.7677,-117.81 44.7618,-117.809 44.7563,-117.804 44.7501,-117.793 44.7399,-117.782 44.7298,-117.775 44.7242,-117.764 44.7186,-117.752 44.7141,-117.723 44.7027,-117.692 44.6898,-117.661 44.6777,-117.631 44.6687,-117.609 44.6639,-117.575 44.6566,-117.542 44.649,-117.523 44.6435,-117.502 44.6286,-117.47 44.6027,-117.439 44.5765,-117.422 44.5609,-117.418 44.5546,-117.415 44.5484,-117.411 44.5422,-117.405 44.5363,-117.397 44.5309,-117.387 44.5266,-117.378 44.5227,-117.367 44.5119,-117.364 44.5044,-117.362 44.4967,-117.358 44.4896,-117.346 44.4852,-117.332 44.4658,-117.322 44.4487,-117.309 44.4261,-117.304 44.4148,-117.298 44.3779,-117.29 44.3464,-117.269 44.3193,-117.224 44.2957,-117.219 44.2862,-117.206 44.2738,-117.19 44.2624,-117.178 44.2562,-117.178 44.242,-117.172 44.2322,-117.162 44.2237,-117.15 44.2136,-117.142 44.2001,-117.137 44.1849,-117.129 44.1673,-117.1
12 44.1465,-117.102 44.1386,-117.091 44.1315,-117.079 44.1247,-117.068 44.1175,-117.039 44.0956,-117.007 44.0711,-116.977 44.046,-116.952 44.0249)
+LINESTRING(-116.952 44.0249,-116.955 44.0225)
+LINESTRING(-87.6632 45.1145,-87.6726 45.1072,-87.6849 45.0913,-87.6987 45.0742,-87.7132 45.0633,-87.7438 45.0576,-87.7774 45.0561,-87.808 45.0521,-87.8294 45.0387,-87.8324 45.0315,-87.8356 45.0242,-87.8469 45.0074,-87.8547 44.9917,-87.8592 44.9802,-87.8638 44.9709,-87.8667 44.9602,-87.8691 44.9475,-87.8706 44.937,-87.8785 44.9076,-87.8919 44.879,-87.9075 44.851,-87.9217 44.823,-87.9586 44.811,-87.9956 44.8049,-88.0281 44.7991,-88.0518 44.788,-88.0527 44.7551,-88.0518 44.7212,-88.0505 44.6872,-88.0505 44.6542)
+LINESTRING(-77.648 43.0482,-77.6247 43.0529,-77.5993 43.0542,-77.5742 43.0539,-77.5463 43.05,-77.5103 43.0401,-77.4499 43.0165,-77.4139 43.0066,-77.1672 42.9558,-77.1157 42.9446,-77.0915 42.9399,-77.0634 42.9355,-77.0365 42.9329,-77.007 42.9316,-76.9775 42.9319,-76.9507 42.9341,-76.8965 42.9402,-76.8521 42.9451,-76.8085 42.9521,-76.7568 42.9647,-76.7253 42.9742,-76.6989 42.9831,-76.672 42.9911,-76.6394 42.9984,-76.6267 43.0006,-76.6146 43.0032,-76.6028 43.0064,-76.5909 43.0105,-76.571 43.0152,-76.5488 43.0174,-76.5255 43.0199,-76.5022 43.026,-76.4756 43.0403,-76.4485 43.049,-76.4193 43.055,-76.3863 43.0613,-76.3717 43.0673,-76.3606 43.076,-76.3497 43.0845,-76.3356 43.0903,-76.2961 43.0996,-76.2604 43.107,-76.2242 43.1106,-76.1631 43.095)
+LINESTRING(-116.955 44.0225,-116.944 44.0107,-116.942 44.0081)
+LINESTRING(-91.7307 45.4148,-91.7149 45.3894,-91.6902 45.3664,-91.6645 45.3446,-91.6453 45.3225,-91.6299 45.2974,-91.6101 45.2669,-91.5926 45.2404,-91.5751 45.214,-91.573 45.2092,-91.5721 45.2047,-91.5704 45.2,-91.5654 45.1945,-91.5523 45.1852,-91.5397 45.1773,-91.5292 45.1681,-91.5221 45.1549,-91.5219 45.1452,-91.5239 45.1334,-91.5248 45.1216,-91.5215 45.112,-91.5144 45.1052,-91.5058 45.099,-91.4968 45.093,-91.4884 45.0869,-91.4763 45.0742,-91.4715 45.0636,-91.4687 45.0534,-91.4626 45.0421,-91.4582 45.0377,-91.4529 45.0333,-91.4481 45.0287,-91.4453 45.0236,-91.4435 45.013,-91.4431 45.0016,-91.4432 44.9905,-91.4433 44.9794,-91.4316 44.9669,-91.4283 44.9539,-91.4294 44.9404,-91.4308 44.9261)
+LINESTRING(-116.942 44.0081,-116.934 43.9989,-116.923 43.9871,-116.912 43.9754)
+LINESTRING(-107.436 45.5783,-107.424 45.5539,-107.407 45.5318,-107.391 45.5096,-107.38 45.4846,-107.358 45.3708,-107.343 45.2657,-107.325 45.1611,-107.294 45.0486,-107.267 45.0099,-107.251 45.0008)
+LINESTRING(-112.65 46.0082,-112.664 45.9713,-112.674 45.9381,-112.683 45.905,-112.696 45.8681,-112.704 45.8406,-112.706 45.8166,-112.703 45.7924,-112.697 45.7645,-112.688 45.747,-112.673 45.7322,-112.659 45.7174,-112.649 45.6999,-112.63 45.6687,-112.614 45.6392,-112.606 45.6127,-112.609 45.5903,-112.626 45.5629,-112.673 45.5377,-112.722 45.5194,-112.744 45.5122,-112.752 45.4934,-112.754 45.4736,-112.753 45.4545,-112.755 45.438,-112.762 45.419,-112.771 45.4017,-112.776 45.382,-112.773 45.3559,-112.76 45.3279,-112.736 45.2981,-112.713 45.2682,-112.699 45.2402,-112.705 45.2011,-112.732 45.1678,-112.772 45.1378,-112.811 45.1084,-112.819 45.1041,-112.834 45.0924,-112.848 45.075,-112.852 45.0538,-112.837 45.0283,-112.812 44.998,-112.79 44.968,-112.787 44.943,-112.809 44.9061,-112.828 44.8795,-112.838 44.8515,-112.835 44.8105,-112.832 44.7966,-112.828 44.7842,-112.824 44.7726,-112.82 44.7612,-112.807 44.7345,-112.789 44.7071,-112.766 44.6809,-112.734 44.6568,-112.676 44.6338,-112.614 44.624,-112.549 44.6173,-112.4
84 44.6035,-112.363 44.5552,-112.34 44.5396)
+LINESTRING(-93.0012 45.286,-93.0018 45.2764,-93.0066 45.2692,-93.0139 45.2627,-93.0221 45.2551,-93.0229 45.2317,-93.0253 45.1981,-93.0286 45.1657,-93.032 45.1459,-93.0361 45.1392,-93.0422 45.1331,-93.0481 45.127,-93.0515 45.12,-93.0522 45.112,-93.0516 45.1038,-93.0508 45.0956,-93.0505 45.0875,-93.0519 45.0747,-93.0548 45.0621,-93.0581 45.0496,-93.0611 45.0369,-93.0672 45.0374,-93.0735 45.0375,-93.0798 45.0371,-93.0857 45.0361,-93.0852 45.0156,-93.0866 44.9952,-93.0878 44.9747,-93.0862 44.9539,-93.0806 44.9565,-93.0755 44.9597,-93.0706 44.9631,-93.0661 44.9666,-93.061 44.9628,-93.0558 44.959,-93.0507 44.9553,-93.0456 44.9515,-92.9966 44.9522,-92.9468 44.9509,-92.897 44.9489,-92.8477 44.9475,-92.8244 44.9497,-92.8027 44.9552,-92.7816 44.9612,-92.7599 44.9648,-92.7527 44.9653)
+LINESTRING(-88.0505 44.6542,-88.0536 44.6394,-88.0567 44.6246,-88.0597 44.6099,-88.0628 44.5951,-88.0658 44.5852,-88.0707 44.5767,-88.0776 44.5691,-88.0868 44.5619,-88.0919 44.5568,-88.0986 44.5481,-88.1057 44.5375,-88.1124 44.5264)
+LINESTRING(-72.5161 42.0348,-72.5164 42.0194,-72.5176 42.0021,-72.5211 41.985,-72.5285 41.9659,-72.5358 41.9555,-72.5469 41.9469,-72.5604 41.9404,-72.5753 41.9365,-72.5924 41.9328,-72.6069 41.9277,-72.6202 41.9209,-72.6338 41.9124,-72.6421 41.9052,-72.6471 41.8976,-72.6509 41.8894,-72.6555 41.8802,-72.6616 41.8707,-72.6671 41.8624,-72.6722 41.854,-72.6772 41.8442,-72.678 41.8273,-72.6694 41.8118,-72.6609 41.7962,-72.6617 41.7793,-72.6622 41.7744,-72.6618 41.768,-72.6621 41.7623,-72.6647 41.7591)
+LINESTRING(-84.7073 44.5839,-84.6977 44.5514,-84.6715 44.52,-84.6378 44.4912,-84.6061 44.4662,-84.5998 44.4607,-84.5979 44.442,-84.5964 44.422,-84.5938 44.4021,-84.5885 44.3839,-84.53 44.3327,-84.4358 44.3156,-84.329 44.299,-84.233 44.2497,-84.2099 44.2244,-84.1917 44.1983,-84.1748 44.1717,-84.1556 44.1449,-84.1371 44.1219,-84.1187 44.0989,-84.1002 44.0759,-84.0818 44.0529,-84.0755 44.0498,-84.0693 44.0467,-84.0637 44.0242,-84.0569 44.0127,-84.0447 44.0035,-84.0231 43.988)
+LINESTRING(-93.2984 44.8918,-93.2785 44.8959,-93.2516 44.8981,-93.2245 44.8988,-93.2037 44.8981,-93.1998 44.896,-93.1959 44.894,-93.1918 44.8921,-93.0862 44.9539)
+LINESTRING(-94.2887 45.5191,-94.2763 45.5089,-94.2689 45.5031,-94.2399 45.4953,-94.2142 45.4871,-94.1901 45.4776,-94.1708 45.4686,-94.1576 45.4529,-94.1465 45.4368,-94.1341 45.421,-94.117 45.4063,-94.0972 45.3945,-94.0613 45.3738,-94.036 45.3594,-94.0107 45.345,-93.9776 45.3347,-93.9435 45.326,-93.9095 45.3169,-93.8769 45.3053,-93.8632 45.2984,-93.8502 45.2908,-93.8374 45.283,-93.8243 45.2757,-93.8093 45.2702,-93.7921 45.2665,-93.7744 45.2631,-93.7579 45.2588,-93.74 45.2513,-93.7233 45.2424,-93.7071 45.2329,-93.6907 45.2239,-93.673 45.2167,-93.6546 45.2113,-93.6365 45.2062,-93.6195 45.1998,-93.5967 45.1906,-93.5723 45.1825,-93.5481 45.174,-93.5257 45.164,-93.5135 45.1399,-93.4962 45.1237,-93.4742 45.1099,-93.4477 45.0928,-93.4312 45.0896,-93.4154 45.0858,-93.3997 45.082,-93.3838 45.0787,-93.3707 45.077,-93.3607 45.0769,-93.351 45.0769,-93.3385 45.0755,-93.3304 45.0624,-93.3203 45.0326,-93.3067 44.9961,-93.2882 44.9632,-93.2841 44.9484,-93.2849 44.9328,-93.2899 44.9145,-93.2984 44.8918)
+LINESTRING(-92.7527 44.9653,-92.736 44.9663,-92.7095 44.9675,-92.6831 44.968,-92.6595 44.9672,-92.636 44.9658,-92.6092 44.9641,-92.5829 44.9615,-92.561 44.9571,-92.5509 44.9535,-92.5403 44.9492,-92.5294 44.9454,-92.5185 44.9435,-92.5037 44.9434,-92.4886 44.9441,-92.4734 44.945,-92.4586 44.9453,-92.4472 44.9443,-92.4359 44.9424,-92.4248 44.9404,-92.4138 44.939,-92.3548 44.9362,-92.2955 44.9355,-92.2361 44.9355,-92.177 44.9348,-92.1523 44.9322,-92.1288 44.9271,-92.1061 44.9219,-92.0835 44.9188,-92.071 44.9193,-92.0521 44.9209,-92.0343 44.9225,-92.025 44.9231,-92.0039 44.9185,-91.9849 44.9129,-91.9654 44.9088,-91.9426 44.9086,-91.9383 44.9087,-91.9339 44.9082,-91.9295 44.9075,-91.9252 44.9071,-91.89 44.9071,-91.8529 44.9075,-91.816 44.9069,-91.7814 44.9042,-91.7745 44.9025,-91.7669 44.8998,-91.7598 44.8968,-91.7527 44.8939,-91.7356 44.8866,-91.719 44.8788,-91.7024 44.871,-91.6853 44.8638,-91.6585 44.855,-91.6318 44.8477,-91.6056 44.8396,-91.5806 44.8285,-91.564 44.8151,-91.5525 44.7998,-91.5396 44.7845,-91.519
44.7715,-91.4973 44.7665,-91.4711 44.7657,-91.4441 44.7666,-91.4199 44.767)
+LINESTRING(-72.1099 41.547,-72.0762 41.5767,-72.0376 41.5845,-71.998 41.5872,-71.9616 41.6018,-71.9483 41.6239,-71.9324 41.6471,-71.9179 41.669,-71.9093 41.6869,-71.9048 41.6998,-71.8981 41.7151,-71.8897 41.7301,-71.8805 41.7417,-71.8804 41.7543,-71.8753 41.7661,-71.8725 41.7785,-71.8788 41.793,-71.8737 41.8053,-71.8749 41.82,-71.8795 41.8349,-71.8845 41.8476,-71.8899 41.8605,-71.8951 41.8738,-71.8992 41.8873,-71.9007 41.9008,-71.9003 41.9026,-71.8959 41.9151,-71.8899 41.9267,-71.8843 41.9386,-71.8805 41.9518,-71.88 41.9544,-71.8795 41.957,-71.8786 41.9595,-71.8773 41.9619,-71.8717 41.9697,-71.8657 41.9771,-71.8606 41.9848,-71.8579 41.9936,-71.8591 42.0027,-71.8629 42.0121,-71.8671 42.0214,-71.8681 42.025)
+LINESTRING(-71.7967 41.4462,-71.7293 41.4881,-71.6948 41.5105,-71.6878 41.5187,-71.6821 41.527,-71.6774 41.5357,-71.6737 41.5449,-71.6658 41.5714,-71.6548 41.6037,-71.6374 41.6332,-71.6106 41.6512,-71.6038 41.6515,-71.5971 41.6505,-71.5905 41.6497,-71.5837 41.6503,-71.5623 41.657,-71.5427 41.664,-71.5227 41.6694,-71.4999 41.6713,-71.4907 41.6781,-71.4865 41.6895,-71.4843 41.7021,-71.4811 41.7126,-71.4775 41.7182,-71.4733 41.7235,-71.4651 41.7319,-71.4467 41.7482,-71.4385 41.7567,-71.4339 41.7637,-71.4266 41.7786,-71.4219 41.7856,-71.4189 41.7925,-71.4168 41.8028,-71.4151 41.816)
+LINESTRING(-72.1423 42.0307,-72.1449 42.0281,-72.1585 42.0116,-72.1668 41.9991,-72.1751 41.9865,-72.1841 41.9743,-72.1946 41.9626,-72.211 41.9506,-72.2424 41.9291,-72.2742 41.9079,-72.2917 41.897,-72.3148 41.8866,-72.3379 41.8763,-72.3609 41.8659,-72.3836 41.8549,-72.3972 41.8545,-72.4108 41.8541,-72.4264 41.853,-72.436 41.8508,-72.4704 41.835,-72.511 41.8193,-72.5478 41.8016,-72.5708 41.78,-72.5872 41.7737,-72.6107 41.7688,-72.6353 41.766,-72.6551 41.7658,-72.6533 41.7649,-72.6349 41.7424,-72.6099 41.7249,-72.5817 41.7097,-72.5535 41.6946,-72.5442 41.6879,-72.5366 41.6805,-72.5295 41.6729,-72.5216 41.6656,-72.5077 41.6568,-72.4908 41.6488,-72.4733 41.6409,-72.4577 41.6325,-72.4442 41.6229,-72.4333 41.6134,-72.4232 41.6033,-72.4123 41.592,-72.3994 41.5888,-72.3862 41.5864,-72.373 41.584,-72.3601 41.5811,-72.3515 41.5772,-72.3404 41.571,-72.3292 41.5655,-72.3203 41.5633,-72.3137 41.5653,-72.3065 41.567,-72.2996 41.5687,-72.2938 41.571,-72.2506 41.5675,-72.2184 41.5691,-72.1909 41.5687,-72.1619 41.5594,-72.15
59 41.5596,-72.1497 41.5604,-72.1437 41.5616,-72.138 41.563,-72.1357 41.5625,-72.1334 41.562,-72.1311 41.5616,-72.1288 41.5611,-72.1257 41.5568,-72.121 41.5529,-72.1155 41.5495,-72.1099 41.547)
+LINESTRING(-72.6647 41.7591,-72.6751 41.7412,-72.6809 41.7324,-72.6847 41.7236,-72.6845 41.7137,-72.6806 41.7069,-72.6748 41.7009,-72.6705 41.6948,-72.6706 41.6879,-72.6776 41.6699,-72.6841 41.6431,-72.6904 41.6249)
+LINESTRING(-93.538 44.8112,-93.5185 44.8391,-93.4951 44.8455,-93.4715 44.8437,-93.4514 44.8471,-93.4471 44.8481,-93.4358 44.8532,-93.4203 44.8649,-93.4033 44.8861,-93.3866 44.8948,-93.359 44.8954,-93.3274 44.8927,-93.2984 44.8918)
+LINESTRING(-88.1124 44.5264,-88.1214 44.5051,-88.1343 44.4822,-88.149 44.4599,-88.1632 44.4402,-88.1789 44.4213,-88.208 44.3899,-88.2406 44.3593,-88.2673 44.3431)
+LINESTRING(-97.0484 44.8899,-97.0469 44.9978,-97.0453 45.1054,-97.0458 45.2127,-97.0509 45.3202)
+LINESTRING(-77.648 43.0482,-77.6786 43.0474,-77.7104 43.0481,-77.7422 43.0487,-77.7734 43.0479,-77.7991 43.0444,-77.8243 43.0387,-77.8494 43.0329,-77.8749 43.0292,-77.9088 43.0289,-77.9442 43.0311,-77.9795 43.0331,-78.0129 43.0321,-78.0313 43.0309,-78.0503 43.0308,-78.0692 43.031,-78.0875 43.0308,-78.1079 43.0316,-78.1273 43.034,-78.1468 43.0361,-78.1673 43.036,-78.2246 43.0329,-78.2827 43.0321,-78.3407 43.0303,-78.3976 43.0247,-78.4119 43.0206,-78.4247 43.0142,-78.4373 43.0073,-78.4514 43.002,-78.504 42.9888,-78.5788 42.9715,-78.6535 42.9566,-78.7058 42.951,-78.7441 42.9458,-78.7824 42.9405,-78.8207 42.9352,-78.8589 42.9299)
+LINESTRING(-79.011 43.2536,-79.0119 43.2433,-79.0098 43.2342,-79.0064 43.2251,-79.0033 43.2149,-79.0026 43.2052,-79.0041 43.1967,-79.0063 43.1882,-79.0077 43.1785,-79.0076 43.1675,-79.0069 43.1577,-79.007 43.1481,-79.0095 43.1374,-79.0192 43.1105,-79.0194 43.1029,-79.0152 43.0963,-79.0079 43.0905,-78.999 43.0853,-78.9875 43.078,-78.9789 43.0702,-78.972 43.0614,-78.9659 43.051,-78.9626 43.0429,-78.9608 43.0355,-78.9589 43.0281,-78.9552 43.0201,-78.9503 43.0178,-78.9467 43.0152,-78.9434 43.0123,-78.9396 43.0094,-78.9264 43.0016,-78.9134 42.9954,-78.9011 42.9887,-78.8899 42.9796,-78.8788 42.9669,-78.8702 42.9546,-78.8638 42.9423,-78.8589 42.9299)
+LINESTRING(-78.8589 42.9299,-78.9102 42.9187)
+LINESTRING(-123.282 42.4642,-123.301 42.4725,-123.317 42.484,-123.334 42.4972,-123.356 42.5106,-123.38 42.5284,-123.388 42.546,-123.391 42.5654,-123.392 42.5867,-123.394 42.6015,-123.395 42.6149,-123.393 42.6277,-123.385 42.6409,-123.379 42.6468,-123.368 42.6623,-123.364 42.6745,-123.363 42.6872,-123.363 42.7014,-123.365 42.7117,-123.369 42.7207,-123.372 42.7296,-123.372 42.7399,-123.352 42.7605,-123.315 42.7683,-123.274 42.7765,-123.245 42.7981,-123.247 42.8099,-123.245 42.8243,-123.244 42.8403,-123.246 42.8572,-123.246 42.8654,-123.245 42.883,-123.244 42.8953,-123.245 42.9069,-123.248 42.9196,-123.257 42.9351,-123.269 42.9473,-123.284 42.9586,-123.3 42.9714,-123.307 42.9773,-123.314 42.9831,-123.32 42.9884,-123.328 42.9942,-123.336 43.0005,-123.343 43.0062,-123.35 43.0123,-123.357 43.0194,-123.363 43.0241,-123.367 43.0395,-123.363 43.0511,-123.357 43.0627,-123.351 43.0758,-123.348 43.0854,-123.346 43.0939,-123.345 43.1026,-123.343 43.1124,-123.339 43.1231,-123.34 43.1337,-123.345 43.1408,-123.352 43.1463,
-123.359 43.1517,-123.365 43.1586)
+LINESTRING(-84.7073 44.5839,-84.7317 44.5648,-84.7696 44.5494,-84.8064 44.5341,-84.8277 44.5152,-84.8288 44.5015,-84.8283 44.4777,-84.8276 44.4529,-84.828 44.4358,-84.8329 44.4195,-84.841 44.4038,-84.8489 44.3884,-84.8532 44.3727,-84.8499 44.3523,-84.8401 44.3313,-84.8293 44.3103,-84.8227 44.2901,-84.8188 44.2727,-84.813 44.2543,-84.8076 44.2358,-84.8049 44.2181,-84.7954 44.0899,-84.792 44.0799,-84.785 44.069,-84.7781 44.0571,-84.7749 44.0446,-84.7745 44.0306,-84.7736 44.0171,-84.7712 43.9898,-84.7726 43.9796,-84.7767 43.9691,-84.7814 43.9587,-84.7844 43.9486,-84.7848 43.9278,-84.7826 43.9066,-84.7808 43.8854,-84.7851 43.8652)
+LINESTRING(-72.194 41.3761,-72.1696 41.3718,-72.1438 41.3706,-72.1202 41.3692,-72.1023 41.364,-72.0911 41.364,-72.0803 41.364,-72.0462 41.3657,-71.9979 41.368,-71.9508 41.3708,-71.9205 41.3742,-71.8789 41.3965,-71.803 41.4423,-71.7967 41.4462)
+LINESTRING(-72.194 41.3761,-72.1565 41.4054,-72.1333 41.419,-72.1207 41.4391,-72.1151 41.488,-72.1149 41.5032,-72.1149 41.5173,-72.1137 41.5314,-72.1099 41.547)
+LINESTRING(-84.9046 43.8648,-84.8954 43.8644,-84.8849 43.8649,-84.8666 43.8662,-84.8455 43.8674,-84.8263 43.8673,-84.8071 43.8665,-84.7851 43.8652)
+LINESTRING(-88.2673 44.3431,-88.3089 44.3389,-88.3514 44.3388,-88.3938 44.3343,-88.4356 44.3165,-88.443 44.3022,-88.4522 44.2905,-88.4625 44.2792,-88.4685 44.2723)
+LINESTRING(-84.7851 43.8652,-84.7719 43.8556,-84.7624 43.8457,-84.7531 43.8357,-84.7417 43.8271)
+LINESTRING(-78.8589 42.9299,-78.8559 42.9199,-78.8532 42.9093,-78.8506 42.8977,-78.8479 42.8862,-78.8414 42.8662,-78.8324 42.8491,-78.8214 42.8324,-78.8094 42.8135)
+LINESTRING(-85.418 44.2077,-85.4502 44.1648,-85.4678 44.1292,-85.4784 44.0906,-85.4894 44.0392,-85.4961 44.0207,-85.508 43.9956,-85.521 43.9707,-85.5313 43.9529,-85.5478 43.8901)
+LINESTRING(-72.194 41.3761,-72.2086 41.3709,-72.2225 41.3674,-72.2356 41.363,-72.2489 41.3561,-72.2651 41.3506,-72.2902 41.3458,-72.3166 41.3418,-72.3365 41.3387,-72.3479 41.3376,-72.3585 41.3383,-72.3691 41.3397,-72.3792 41.3416)
+LINESTRING(-72.6904 41.6249,-72.6906 41.607,-72.6871 41.5986,-72.6832 41.5901,-72.6801 41.5804,-72.6638 41.5441,-72.6354 41.5185,-72.5995 41.494,-72.5605 41.4613,-72.5168 41.4253,-72.4602 41.3877,-72.4084 41.3569,-72.3792 41.3416)
+LINESTRING(-88.1124 44.5264,-88.0941 44.5162,-88.0698 44.503,-88.0451 44.4894,-88.0255 44.4781,-88.0138 44.4717,-87.9998 44.4651,-87.9857 44.4587,-87.9738 44.4532,-87.9395 44.432,-87.9088 44.4059,-87.8816 44.3776,-87.8579 44.3501,-87.8542 44.3455,-87.8393 44.3285,-87.8245 44.3115,-87.8099 44.2941,-87.7965 44.2769,-87.787 44.2478,-87.7821 44.2049,-87.779 44.1625,-87.7752 44.1353)
+LINESTRING(-116.34 43.6015,-116.376 43.6021,-116.452 43.6056,-116.531 43.6099,-116.576 43.6132,-116.595 43.6257,-116.613 43.6397,-116.631 43.6543,-116.648 43.6689,-116.66 43.678,-116.678 43.6983,-116.696 43.7222,-116.708 43.742,-116.719 43.7584,-116.732 43.7747,-116.746 43.7907,-116.756 43.8064,-116.762 43.8245,-116.768 43.8424,-116.775 43.86,-116.786 43.8774,-116.815 43.9048,-116.852 43.9277,-116.887 43.9499,-116.912 43.9754)
+LINESTRING(-75.9032 42.1347,-75.885 42.1387,-75.8543 42.1472,-75.8335 42.1534,-75.8126 42.1596,-75.7789 42.1647,-75.764 42.17,-75.7536 42.1756,-75.7335 42.1816,-75.7201 42.1841,-75.7068 42.1864,-75.6937 42.189,-75.6813 42.1926,-75.6757 42.1929,-75.6645 42.1981,-75.6405 42.1927,-75.6166 42.1873,-75.5926 42.1818,-75.5687 42.1764,-75.5496 42.1742,-75.5323 42.176,-75.5158 42.181,-75.499 42.1884,-75.4879 42.1927,-75.4774 42.1962,-75.4677 42.2005,-75.4593 42.2071,-75.4515 42.2178,-75.4474 42.2282,-75.4439 42.239,-75.4379 42.2508,-75.4299 42.2625,-75.4211 42.2725,-75.4099 42.2803,-75.3947 42.2855,-75.3853 42.2862,-75.3766 42.285,-75.3676 42.2831,-75.3578 42.2817,-75.3346 42.281,-75.3137 42.2829,-75.2945 42.2882,-75.2765 42.2978,-75.2701 42.3035,-75.2658 42.3095,-75.2613 42.3153,-75.2542 42.3205,-75.2313 42.3335,-75.2126 42.347,-75.1964 42.3621,-75.1809 42.3801,-75.1685 42.3987,-75.159 42.4162,-75.1484 42.4331,-75.1321 42.4499,-75.11 42.4639,-75.0863 42.4731,-75.0611 42.4807,-75.0344 42.4905,-75.0256 42.4928,-75.01
94 42.4978,-75.0128 42.5052,-75.0065 42.5122,-74.9913 42.5185,-74.98 42.5203,-74.9689 42.5222,-74.9588 42.5249,-74.95 42.5302,-74.9407 42.5357,-74.9092 42.5485,-74.8779 42.5628,-74.8474 42.5779,-74.8181 42.5933,-74.7723 42.6131,-74.7318 42.6247,-74.6913 42.6377,-74.6459 42.6614,-74.625 42.6609,-74.6027 42.6616,-74.5805 42.6616,-74.5599 42.659,-74.5206 42.6689,-74.479 42.6801,-74.4373 42.691,-74.3974 42.7002,-74.3886 42.7011,-74.3787 42.7011,-74.3691 42.7013,-74.3359 42.7106,-74.3122 42.7171,-74.2876 42.7225,-74.2594 42.7272,-74.2045 42.7358,-74.177 42.7421,-74.1543 42.7504,-74.1134 42.7651,-74.0898 42.7728,-74.066 42.7799,-74.0419 42.7864,-74.0173 42.7923)
+LINESTRING(-75.9032 42.1347,-75.9008 42.1607,-75.901 42.1902,-75.9065 42.2189,-75.9202 42.2424,-75.9197 42.2493,-75.9206 42.2578,-75.9234 42.2659,-75.9284 42.2719,-75.9275 42.277,-75.9269 42.2835,-75.9273 42.2901,-75.9439 42.3041,-75.9636 42.3154,-75.9788 42.3275,-75.9803 42.339,-75.9871 42.3643,-75.9925 42.392,-75.9999 42.419,-76.0127 42.442,-76.0234 42.4528,-76.0356 42.4633,-76.0478 42.4739,-76.0584 42.485,-76.0663 42.4995,-76.0702 42.5151,-76.0741 42.5307,-76.0819 42.5453,-76.0925 42.5562,-76.1047 42.5667,-76.1175 42.5782,-76.1297 42.5923,-76.1418 42.5972,-76.1527 42.6006,-76.1625 42.6054,-76.1716 42.6144,-76.175 42.6221,-76.1764 42.6317,-76.1766 42.6414,-76.1763 42.6498,-76.1687 42.6686,-76.1611 42.6874,-76.1535 42.7062,-76.1459 42.725,-76.1399 42.7427,-76.1343 42.7615,-76.1293 42.7804,-76.1253 42.7983,-76.124 42.8099,-76.1238 42.8216,-76.1234 42.8333,-76.1211 42.8454,-76.1179 42.8547,-76.1129 42.8687,-76.1091 42.8825,-76.1093 42.8911,-76.1167 42.9008,-76.1248 42.9111,-76.132 42.9215,-76.1372 42.9319,-7
6.1385 42.9375,-76.1385 42.9428,-76.1376 42.9481,-76.1361 42.9536,-76.1326 42.9784,-76.1344 43.0028,-76.1381 43.0271,-76.1401 43.0519,-76.1509 43.0569,-76.1564 43.0633,-76.1618 43.0691,-76.1677 43.0745,-76.1749 43.08,-76.1697 43.0876,-76.1631 43.095)
+LINESTRING(-75.9032 42.1347,-75.8799 42.13,-75.8452 42.1247,-75.8074 42.1163,-75.7752 42.1033)
+LINESTRING(-84.0231 43.988,-84.0201 43.9583,-84.0229 43.8993,-84.0277 43.8397,-84.0309 43.8077,-84.0289 43.8062,-84.0269 43.8047,-84.0249 43.8032,-84.0228 43.8017,-84.0218 43.7704,-84.0199 43.7392,-84.0184 43.7079,-84.0185 43.6768,-84.0052 43.662,-83.9884 43.6467,-83.9703 43.632,-83.9529 43.6191,-83.9533 43.6126,-83.9522 43.6059,-83.9503 43.5994,-83.9482 43.593)
+LINESTRING(-84.7417 43.8271,-84.7058 43.8127,-84.6695 43.7965,-84.6328 43.781,-84.5963 43.7679,-84.5919 43.7673,-84.5858 43.7672,-84.5796 43.7671,-84.5748 43.7667,-84.5603 43.7622,-84.548 43.7563,-84.5364 43.7499,-84.5241 43.7436,-84.5151 43.7408,-84.5007 43.737,-84.487 43.7331,-84.4795 43.7302,-84.4717 43.7261,-84.4587 43.7213,-84.4455 43.7166,-84.4372 43.713,-84.415 43.7046,-84.3928 43.7042,-84.37 43.7049,-84.3462 43.7001,-84.3322 43.6935,-84.32 43.6871,-84.3067 43.6818,-84.2893 43.6782,-84.2675 43.6739,-84.2467 43.6667,-84.2265 43.658,-84.2062 43.6487,-84.1842 43.6377,-84.1616 43.6243,-84.1399 43.6099,-84.1208 43.596,-84.076 43.5957,-84.0345 43.5951,-83.993 43.5943,-83.9482 43.593)
+LINESTRING(-77.648 43.0482,-77.6548 43.033,-77.6632 43.0196,-77.6723 43.0068,-77.6813 42.9935,-77.6847 42.9836,-77.6907 42.9634,-77.6968 42.942,-77.6999 42.9286,-77.6994 42.9229,-77.6973 42.9175,-77.6952 42.9121,-77.6949 42.9064,-77.7001 42.8903,-77.708 42.8792,-77.7169 42.8695,-77.7252 42.8577,-77.7336 42.8385,-77.7404 42.82,-77.7492 42.8022,-77.7635 42.7847,-77.7759 42.778,-77.793 42.7739,-77.8118 42.7703,-77.829 42.7654,-77.8339 42.7503,-77.8366 42.7347,-77.8356 42.719,-77.8294 42.704,-77.821 42.7,-77.8129 42.6959,-77.8058 42.6912,-77.8001 42.6849,-77.8018 42.681,-77.8046 42.6774,-77.8082 42.6741,-77.8121 42.6711,-77.7961 42.6421,-77.7561 42.5988,-77.7101 42.5579,-77.6763 42.5361,-77.6501 42.5388,-77.642 42.5413,-77.6343 42.5429,-77.6264 42.5434,-77.6177 42.5423,-77.5968 42.5365,-77.5797 42.5286,-77.5654 42.518,-77.553 42.5045,-77.5436 42.4916,-77.5345 42.4799,-77.5229 42.4704,-77.5062 42.4643,-77.4905 42.4617,-77.4763 42.4606,-77.4458 42.4599,-77.4189 42.4535,-77.3927 42.4464,-77.3739 42.4367,-77.3652 4
2.4228,-77.3326 42.3837)
+LINESTRING(-123.282 42.4642,-123.274 42.4603,-123.252 42.4531,-123.23 42.4461,-123.219 42.4428,-123.21 42.4422,-123.2 42.4415,-123.192 42.4415,-123.184 42.4424,-123.177 42.4415,-123.169 42.4373,-123.156 42.4304,-123.15 42.4202,-123.144 42.4095,-123.133 42.4011,-123.112 42.397,-123.09 42.3968,-123.073 42.3984,-123.065 42.3994,-123.035 42.4047,-122.997 42.408,-122.962 42.4071,-122.937 42.4,-122.924 42.3906,-122.911 42.3812,-122.897 42.3719,-122.884 42.3629,-122.88 42.3536,-122.876 42.3429,-122.871 42.3325,-122.865 42.3241)
+LINESTRING(-75.7752 42.1033,-75.7705 42.0978,-75.7593 42.0817,-75.7507 42.067,-75.7437 42.0521,-75.7368 42.0349,-75.7294 42.0203,-75.721 42.0076,-75.7163 41.9989)
+LINESTRING(-72.3792 41.3416,-72.4014 41.3397,-72.4224 41.3381,-72.4433 41.3369,-72.4654 41.3361,-72.4893 41.3337,-72.5106 41.3293,-72.532 41.3247,-72.5559 41.3214,-72.5777 41.3202,-72.5969 41.3207,-72.6151 41.3229,-72.634 41.3271,-72.6545 41.3292,-72.6724 41.3332,-72.6903 41.3371,-72.711 41.3386,-72.7396 41.3369,-72.7646 41.3334,-72.7897 41.3296,-72.8183 41.3269,-72.8359 41.3279,-72.8513 41.3311,-72.8666 41.335,-72.8843 41.3376,-72.9103 41.3373,-72.9332 41.3323,-72.9543 41.3234,-72.9753 41.3113,-72.9855 41.3057,-72.9954 41.3012,-73.0054 41.2966,-73.0157 41.2907,-73.0253 41.2843,-73.0348 41.278,-73.0436 41.2723,-73.0524 41.2671)
+LINESTRING(-72.6904 41.6249,-72.7036 41.6054,-72.7167 41.5854,-72.7306 41.5659,-72.7462 41.5478,-72.7695 41.5315,-72.7955 41.5202,-72.8192 41.5079,-72.8357 41.4887,-72.8529 41.4508,-72.8599 41.4413,-72.8694 41.4342,-72.8798 41.4276,-72.8898 41.4195,-72.8954 41.4121,-72.8995 41.4051,-72.9039 41.3983,-72.9108 41.3918,-72.9168 41.3892,-72.9234 41.3884,-72.93 41.3879,-72.9361 41.3859,-72.968 41.3701,-72.9956 41.3549,-73.018 41.3368,-73.0343 41.3124,-73.0524 41.2671)
+LINESTRING(-107.251 45.0008,-107.225 44.986,-107.183 44.9736,-107.153 44.9697,-107.088 44.9595,-107.041 44.9341,-107.006 44.8942,-106.977 44.8404,-106.968 44.836,-106.96 44.8316,-106.951 44.8272,-106.943 44.8228,-106.938 44.8061,-106.931 44.7713,-106.923 44.7335,-106.915 44.708,-106.909 44.6977,-106.901 44.6894,-106.893 44.6814,-106.884 44.6722,-106.874 44.6584,-106.864 44.6425,-106.855 44.6264,-106.848 44.6121,-106.848 44.6056,-106.847 44.5993,-106.84 44.5892,-106.832 44.5797,-106.824 44.5699,-106.818 44.5589,-106.814 44.543,-106.812 44.5256,-106.81 44.5087,-106.806 44.4941,-106.786 44.4693,-106.753 44.4351,-106.718 44.4011,-106.694 44.3767,-106.687 44.3721)
+LINESTRING(-72.6647 41.7591,-72.6878 41.7586,-72.7085 41.7565,-72.7234 41.7543,-72.7351 41.7511,-72.7507 41.7449,-72.7968 41.7296,-72.8074 41.7168,-72.8095 41.6983,-72.8239 41.6679,-72.8359 41.6613,-72.8592 41.6452,-72.8837 41.6269,-72.8992 41.6132,-72.9019 41.6034,-72.9016 41.5946,-72.9008 41.5865,-72.9021 41.5787,-72.9062 41.5721,-72.9128 41.5648,-72.9204 41.5581,-72.9275 41.5534,-72.9594 41.5393,-72.9742 41.5392,-72.9885 41.5424,-73.019 41.5379,-73.0322 41.5458,-73.0485 41.5514,-73.066 41.5534,-73.0829 41.5508,-73.0909 41.5295,-73.099 41.5213,-73.1124 41.5174,-73.1365 41.5088,-73.1485 41.5027,-73.1598 41.4961,-73.1712 41.4896,-73.1835 41.484,-73.1925 41.4813,-73.2017 41.479,-73.2105 41.4762,-73.2183 41.472,-73.2317 41.46,-73.242 41.4469,-73.2513 41.4333,-73.2621 41.4199,-73.2691 41.4148,-73.2836 41.4144,-73.2936 41.4192,-73.3031 41.4243,-73.3128 41.4265,-73.3413 41.4237,-73.3699 41.4188,-73.3983 41.4157,-73.426 41.4181,-73.4411 41.4125,-73.4533 41.4069,-73.4644 41.4006,-73.4765 41.3927,-73.4765 41.3863,-
73.4834 41.3815,-73.5014 41.3821,-73.5125 41.3851,-73.5231 41.3877,-73.5328 41.3891,-73.5439 41.3882)
+LINESTRING(-104.055 44.5426,-104.032 44.5438,-104.002 44.5441,-103.975 44.541,-103.954 44.5324,-103.933 44.5204,-103.906 44.5087,-103.862 44.501)
+LINESTRING(-73.7719 41.5394,-73.8018 41.5336,-73.8353 41.5284,-73.8692 41.5249,-73.9004 41.5248,-73.9116 41.5267,-73.9231 41.5298,-73.9346 41.5317,-73.9457 41.5303,-73.949 41.5275,-73.9536 41.5244,-73.9585 41.5216,-73.9631 41.5201,-73.983 41.5181,-74.0168 41.5158,-74.0515 41.514,-74.0736 41.5136)
+LINESTRING(-74.0736 41.5136,-74.0821 41.5819,-74.0842 41.6158,-74.0819 41.6504,-74.0727 41.6913,-74.0607 41.7336,-74.0522 41.7758,-74.0533 41.8162,-74.0593 41.8555,-74.0578 41.8795,-74.052 41.9008,-74.0447 41.9324,-74.0335 41.943,-74.0252 41.9519,-74.0186 41.9616,-74.0124 41.9743,-74.0034 41.9985,-73.9964 42.0229,-73.9892 42.0473,-73.98 42.0715,-73.9742 42.0821,-73.9676 42.0922,-73.9612 42.1025,-73.9562 42.1135,-73.9532 42.1246,-73.9509 42.1358,-73.9482 42.1469,-73.9441 42.1579,-73.9385 42.1675,-73.9317 42.1771,-73.9252 42.1867,-73.9203 42.1962,-73.918 42.2035,-73.9161 42.211,-73.9138 42.2184,-73.9104 42.2256,-73.9033 42.234,-73.8942 42.2422,-73.8859 42.25,-73.8811 42.2575,-73.878 42.2746,-73.8762 42.2919,-73.8739 42.3092,-73.869 42.3264,-73.8617 42.3491,-73.8571 42.3703,-73.8524 42.3912,-73.8448 42.413,-73.8392 42.4325,-73.8373 42.4528,-73.8356 42.4733,-73.831 42.4937,-73.8285 42.5013,-73.8254 42.5118,-73.8227 42.5224,-73.821 42.53)
+LINESTRING(-77.3326 42.3837,-77.3193 42.3783,-77.3099 42.3684,-77.3006 42.3585,-77.2878 42.3495,-77.2668 42.3418,-77.2459 42.3377,-77.226 42.3327,-77.208 42.3225,-77.1962 42.3068,-77.1925 42.2904,-77.1902 42.2734,-77.1827 42.256,-77.1697 42.2393,-77.1553 42.2255,-77.1379 42.2137,-77.1158 42.2031,-77.1136 42.2022)
+LINESTRING(-73.5439 41.3882,-73.5486 41.3879,-73.562 41.3845,-73.5768 41.3833,-73.5968 41.3881)
+LINESTRING(-73.5968 41.3881,-73.6008 41.3926,-73.6041 41.3972,-73.6067 41.4021,-73.6085 41.4073,-73.6144 41.4106,-73.6209 41.4143,-73.6266 41.4185,-73.6302 41.423,-73.6335 41.4335,-73.636 41.444,-73.6394 41.4542,-73.6456 41.4641,-73.6526 41.4712,-73.661 41.4788,-73.6687 41.4865,-73.6737 41.494,-73.6766 41.5087,-73.6782 41.5226,-73.6855 41.5345,-73.7055 41.5435,-73.7243 41.5454,-73.7406 41.5431,-73.7559 41.54,-73.7719 41.5394)
+LINESTRING(-103.862 44.501,-103.846 44.4963,-103.833 44.4881,-103.821 44.4801,-103.809 44.4763,-103.79 44.4756,-103.772 44.4749,-103.753 44.4742,-103.734 44.4736)
+LINESTRING(-88.4685 44.2723,-88.4711 44.2694,-88.4733 44.2632,-88.4792 44.2561,-88.4858 44.2491,-88.4915 44.2404,-88.4962 44.2331,-88.5015 44.2265,-88.5062 44.2196,-88.5085 44.2114,-88.5108 44.2012,-88.5154 44.1903,-88.5209 44.1795,-88.5263 44.17,-88.5392 44.1464,-88.5516 44.1207,-88.5627 44.0921,-88.5718 44.0599,-88.5764 44.0309,-88.5789 44.0025,-88.5822 43.9746,-88.5892 43.947)
+LINESTRING(-76.4444 41.9996,-76.4422 42.0018,-76.4367 42.0063,-76.4301 42.0093,-76.4218 42.0106,-76.4115 42.0101,-76.4025 42.0082,-76.3934 42.0059,-76.383 42.0042,-76.3745 42.0039,-76.367 42.0047,-76.3597 42.0061,-76.3517 42.0077,-76.3418 42.0096,-76.3331 42.0118,-76.3253 42.015,-76.3183 42.02,-76.3093 42.0274,-76.3007 42.0334,-76.2918 42.0392,-76.2822 42.0463,-76.2742 42.053,-76.2669 42.0589,-76.2586 42.0639,-76.2479 42.0678,-76.2352 42.07,-76.2234 42.0698,-76.2114 42.068,-76.1983 42.0651,-76.1841 42.061,-76.1722 42.0562,-76.1602 42.0515,-76.1461 42.0474,-76.1281 42.0453,-76.1117 42.0471,-76.096 42.0518,-76.0798 42.0586,-76.0646 42.0647,-76.0506 42.0696,-76.037 42.0749,-76.0231 42.0823,-76.008 42.0926,-75.9951 42.1023,-75.9817 42.1114,-75.9649 42.1202,-75.9493 42.1264,-75.9345 42.1307,-75.9195 42.1333,-75.9032 42.1347)
+LINESTRING(-112.34 44.5396,-112.278 44.498,-112.222 44.4253,-112.189 44.3307,-112.196 44.2822,-112.223 44.2252,-112.25 44.1677,-112.256 44.1175,-112.252 44.0713,-112.252 44.0155,-112.252 43.9597,-112.247 43.9135,-112.24 43.8703,-112.235 43.8383)
+LINESTRING(-111.578 43.997,-111.604 43.9847,-111.626 43.9774,-111.651 43.9739,-111.68 43.9733,-111.688 43.9594,-111.705 43.935,-111.724 43.9104,-111.735 43.896,-111.744 43.8921,-111.753 43.8859,-111.761 43.879,-111.768 43.8733,-111.798 43.8524)
+LINESTRING(-77.1136 42.2022,-77.1107 42.2011,-77.091 42.1942,-77.0724 42.189,-77.0535 42.1838,-77.0329 42.1774,-77.0162 42.1707,-77.0019 42.1635,-76.9873 42.1569,-76.9696 42.1517,-76.9493 42.1502,-76.9311 42.1536,-76.9132 42.1597,-76.8937 42.1661,-76.8734 42.1702,-76.8546 42.1713,-76.8352 42.171,-76.8133 42.1709,-76.8043 42.1638,-76.7983 42.1562,-76.7935 42.1479,-76.7884 42.1387,-76.7828 42.1294,-76.7786 42.1209,-76.7764 42.1121,-76.7769 42.1021,-76.78 42.0877,-76.7831 42.075,-76.7854 42.0624,-76.7865 42.048,-76.7829 42.0295,-76.772 42.0138,-76.7554 42.0022)
+LINESTRING(-76.7554 42.0022,-76.7546 42.0016,-76.7314 41.9937,-76.7186 41.9911,-76.7072 41.9892,-76.6957 41.9876,-76.6824 41.9862,-76.6754 41.9862,-76.6692 41.9869,-76.6631 41.9877,-76.6562 41.9878,-76.6382 41.9862,-76.6224 41.9837,-76.6068 41.9808,-76.589 41.9774,-76.5481 41.9716,-76.5094 41.9706,-76.475 41.9778,-76.4473 41.9965,-76.4444 41.9996)
+LINESTRING(-74.0736 41.5136,-74.0811 41.514,-74.0902 41.516,-74.1005 41.5179,-74.111 41.5181,-74.1718 41.5122,-74.2147 41.5075,-74.2572 41.4968,-74.3166 41.473,-74.3308 41.4669,-74.3444 41.461,-74.3573 41.4543,-74.3691 41.4458)
+LINESTRING(-75.7752 42.1033,-75.7252 42.0971,-75.6729 42.0857,-75.6234 42.0749,-75.5816 42.0705,-75.5689 42.0621,-75.5554 42.053,-75.5412 42.0487,-75.5266 42.0546,-75.5159 42.057,-75.4947 42.0578,-75.4707 42.0545,-75.4512 42.045,-75.4394 42.0435,-75.4269 42.0422,-75.4146 42.0421,-75.403 42.0441,-75.3742 42.0363,-75.3391 42.0309,-75.3095 42.023,-75.2971 42.0076,-75.2616 41.9895,-75.2219 41.986,-75.1816 41.9897,-75.1438 41.9932,-75.098 41.9895,-75.0527 41.9783,-75.0085 41.9641,-74.9657 41.9513,-74.9586 41.9517,-74.9516 41.9526,-74.9446 41.9538,-74.9379 41.9553,-74.9254 41.9504,-74.9148 41.943,-74.9045 41.935,-74.8931 41.9283,-74.782 41.8932,-74.742 41.8233,-74.7365 41.7452,-74.7286 41.6854,-74.7201 41.6772,-74.7062 41.6701,-74.6908 41.6647,-74.6778 41.661,-74.6479 41.6406,-74.6028 41.6234,-74.5539 41.6077,-74.5129 41.5922,-74.5033 41.5834,-74.5022 41.5736,-74.5019 41.5643,-74.495 41.5571,-74.4789 41.554,-74.4665 41.5577,-74.4555 41.5631,-74.4433 41.5649,-74.4349 41.5624,-74.4272 41.5576,-74.423 41.5515,-74.42
52 41.5452,-74.4117 41.5196,-74.3973 41.4951,-74.3828 41.4707,-74.3691 41.4458)
+LINESTRING(-91.4199 44.767,-91.4115 44.7676,-91.3713 44.7408,-91.3416 44.7094,-91.3187 44.6747,-91.2987 44.6382,-91.2797 44.628,-91.2599 44.621,-91.2403 44.6134,-91.2221 44.6013,-91.1965 44.5775,-91.1718 44.5531,-91.1482 44.5282,-91.126 44.5026,-91.112 44.4838,-91.0985 44.4642,-91.0839 44.4452,-91.0667 44.4281,-91.0542 44.4205,-91.0382 44.4126,-91.024 44.4042,-91.0167 44.3954,-90.9674 44.373,-90.9196 44.3498,-90.873 44.3254,-90.8275 44.2998,-90.7812 44.2726,-90.7343 44.2451,-90.6868 44.2183,-90.6386 44.1931,-90.6164 44.1834,-90.5926 44.1739,-90.5697 44.1638,-90.55 44.1519,-90.5414 44.1445,-90.5351 44.1361,-90.5251 44.1081,-90.5201 44.0789,-90.5146 44.0495,-90.5034 44.021,-90.4891 44.0079,-90.4685 43.9982,-90.4499 43.9916,-90.4413 43.9878)
+LINESTRING(-96.7888 44.327,-96.7854 44.3896,-96.7801 44.465,-96.7747 44.5392,-96.7708 44.598,-96.7873 44.6235,-96.8103 44.6551,-96.8343 44.6865,-96.8538 44.7112,-96.8953 44.7566,-96.9418 44.7976,-96.993 44.8359,-97.0486 44.873,-97.0486 44.8772,-97.0485 44.8815,-97.0485 44.8857,-97.0484 44.8899)
+LINESTRING(-77.1136 42.2022,-77.1311 42.1864,-77.1465 42.1718,-77.1593 42.1562,-77.1693 42.1369,-77.1759 42.1109,-77.175 42.087,-77.1664 42.0636,-77.1504 42.0391,-77.131 42.0167,-77.1159 42.0007)
+LINESTRING(-74.0736 41.5136,-74.0739 41.4993,-74.0719 41.4845,-74.068 41.47,-74.0619 41.4563,-74.0649 41.4452,-74.0674 41.4339,-74.0702 41.4227,-74.0745 41.412,-74.0817 41.4,-74.09 41.3879,-74.0975 41.3755,-74.1024 41.3628,-74.1041 41.3477,-74.1058 41.3322,-74.1122 41.3183,-74.128 41.3077)
+LINESTRING(-74.128 41.3077,-74.1285 41.3088,-74.1291 41.31,-74.1297 41.3111,-74.1303 41.3123,-74.1523 41.3202,-74.1739 41.3314,-74.191 41.3415,-74.1994 41.3461,-74.2193 41.3469,-74.2461 41.3471,-74.2712 41.349,-74.2861 41.3551,-74.2925 41.3667,-74.3103 41.381,-74.3314 41.3941,-74.3478 41.4024,-74.35 41.4132,-74.3539 41.4254,-74.3601 41.437,-74.3691 41.4458)
+LINESTRING(-82.4117 42.9802,-82.4874 42.9738)
+LINESTRING(-106.687 44.3721,-106.648 44.3512,-106.619 44.3237,-106.596 44.2986,-106.578 44.2848,-106.517 44.2699,-106.459 44.2582,-106.404 44.2426,-106.35 44.2161,-106.341 44.2171,-106.333 44.2182,-106.325 44.2192,-106.317 44.2202,-106.304 44.2156,-106.291 44.2101,-106.278 44.204,-106.266 44.1977,-106.262 44.1978,-106.257 44.1978,-106.253 44.1979,-106.249 44.1979,-106.239 44.2029,-106.224 44.2101,-106.209 44.2167,-106.2 44.2201,-106.169 44.2224,-106.127 44.2229,-106.087 44.221,-106.058 44.2163,-106.049 44.2192,-106.04 44.2222,-106.031 44.2251,-106.023 44.228,-106.015 44.224,-106.007 44.2199,-105.994 44.2148,-105.98 44.2109,-105.966 44.2071,-105.954 44.2019,-105.947 44.1971,-105.941 44.1918,-105.935 44.1867,-105.927 44.1819,-105.92 44.1816,-105.914 44.1813,-105.907 44.1809,-105.901 44.1806,-105.882 44.1873,-105.867 44.1959,-105.852 44.2048,-105.836 44.2124,-105.825 44.2149,-105.816 44.2156,-105.807 44.2156,-105.797 44.2163,-105.759 44.2258,-105.741 44.2358,-105.716 44.2422,-105.655 44.2412,-105.636 44.2501,-
105.621 44.2594,-105.608 44.2693,-105.591 44.2801,-105.564 44.2811,-105.543 44.2822,-105.524 44.2819,-105.502 44.2785,-105.487 44.2774,-105.479 44.2805,-105.473 44.2859,-105.466 44.2916,-105.429 44.2925,-105.393 44.2942,-105.357 44.2962,-105.32 44.2983,-105.295 44.2985,-105.274 44.297,-105.252 44.2946,-105.228 44.2923,-105.215 44.2921,-105.201 44.2931,-105.187 44.2942,-105.174 44.2948,-105.13 44.2937,-105.079 44.2911,-105.027 44.2875,-104.982 44.2833,-104.978 44.2804,-104.973 44.2777,-104.968 44.2751,-104.963 44.2728,-104.957 44.2731,-104.952 44.2712,-104.947 44.2697,-104.941 44.2659,-104.886 44.2707,-104.83 44.2747,-104.775 44.2784,-104.719 44.2821,-104.697 44.2847,-104.674 44.2885,-104.651 44.2923,-104.627 44.2948,-104.613 44.3074,-104.589 44.3205,-104.562 44.3299,-104.539 44.3313,-104.533 44.3274,-104.528 44.3224,-104.497 44.3293,-104.473 44.3457,-104.452 44.3649,-104.43 44.3805,-104.423 44.3835,-104.414 44.3863,-104.405 44.3889,-104.396 44.3914,-104.381 44.3968,-104.367 44.4026,-104.354 44.4093,-104.34 4
4.4159,-104.327 44.4219,-104.313 44.4281,-104.299 44.4346,-104.287 44.4413,-104.281 44.4457,-104.276 44.4509,-104.271 44.4563,-104.265 44.4613,-104.243 44.4756,-104.229 44.4874,-104.22 44.5012,-104.213 44.5214,-104.189 44.5296,-104.153 44.5364,-104.117 44.5407,-104.09 44.5419,-104.062 44.5423,-104.055 44.5426)
+LINESTRING(-122.865 42.3241,-122.844 42.3061,-122.807 42.2775,-122.769 42.2498,-122.746 42.2344,-122.728 42.2259,-122.706 42.2159,-122.685 42.2052,-122.669 42.1944,-122.66 42.182,-122.653 42.1681,-122.647 42.1537,-122.64 42.1403,-122.625 42.1177,-122.616 42.1065,-122.605 42.0993,-122.582 42.0886,-122.575 42.0754,-122.57 42.0622,-122.567 42.0494,-122.57 42.0377,-122.575 42.0315,-122.584 42.022,-122.593 42.0125,-122.598 42.006)
+LINESTRING(-84.7417 43.8271,-84.7467 43.8189,-84.7531 43.8092,-84.7582 43.7995,-84.7598 43.7902,-84.7583 43.7491,-84.7593 43.7085,-84.7611 43.668,-84.7621 43.6272,-84.7566 43.6227,-84.7507 43.6186,-84.7448 43.6144,-84.7391 43.61,-84.7394 43.5986,-84.7382 43.5872,-84.7366 43.5759,-84.7359 43.5645,-84.7213 43.5589,-84.7068 43.5534,-84.6922 43.5478,-84.6777 43.5423,-84.6747 43.5106,-84.6767 43.4783,-84.6786 43.4463,-84.6754 43.4152,-84.6571 43.4067,-84.6367 43.3966,-84.6175 43.3854,-84.6028 43.3737,-84.6029 43.3594,-84.603 43.345,-84.603 43.3307,-84.6031 43.3164,-84.601 43.3132,-84.5962 43.3084,-84.5911 43.3031,-84.5879 43.2984,-84.5868 43.2933,-84.5863 43.2878,-84.5856 43.2824,-84.5834 43.2774,-84.5735 43.2713,-84.5689 43.264,-84.5677 43.2558,-84.5679 43.2467)
+LINESTRING(-93.2461 44.0978,-93.2524 44.1379,-93.2716 44.1921,-93.2935 44.2474,-93.3079 44.2912,-93.3077 44.3076,-93.3024 44.3225,-93.2961 44.3372,-93.293 44.3531,-93.2941 44.3827,-93.2967 44.4123,-93.2992 44.4418,-93.3003 44.4712,-93.2994 44.482,-93.2975 44.4928,-93.2961 44.5037,-93.2964 44.5146,-93.3014 44.5492,-93.3055 44.5839,-93.308 44.6187,-93.3081 44.6537,-93.304 44.6752,-93.2957 44.6959,-93.2874 44.7169,-93.2828 44.7394,-93.2824 44.7575,-93.2822 44.786,-93.2826 44.8134,-93.2838 44.8284,-93.2912 44.8442,-93.2968 44.8532,-93.2995 44.8657,-93.2984 44.8918)
+LINESTRING(-74.6909 41.3553,-74.6808 41.3555,-74.6618 41.3563,-74.6367 41.3641,-74.608 41.3751,-74.5808 41.3858,-74.5597 41.3924,-74.5429 41.3956,-74.5264 41.3986,-74.51 41.4021,-74.4934 41.4069,-74.4872 41.4057,-74.4809 41.4045,-74.4747 41.4033,-74.4684 41.4021,-74.4405 41.4086,-74.4144 41.4185,-74.3905 41.4312,-74.3691 41.4458)
+LINESTRING(-74.6991 41.355,-74.6909 41.3553)
+LINESTRING(-73.7085 41.1108,-73.6972 41.1377,-73.6828 41.2301,-73.6592 41.3178,-73.6008 41.3772,-73.5998 41.3799,-73.5988 41.3826,-73.5978 41.3853,-73.5968 41.3881)
+LINESTRING(-93.2461 44.0978,-93.2474 44.088,-93.2487 44.0783,-93.25 44.0685,-93.2513 44.0587)
+LINESTRING(-115.628 43.1686,-115.658 43.1924,-115.71 43.2236,-115.766 43.2526,-115.827 43.2848,-115.889 43.3212,-115.942 43.3559,-115.989 43.3942,-116.036 43.4411,-116.061 43.4741,-116.082 43.504,-116.105 43.5326,-116.138 43.5615,-116.183 43.5859,-116.229 43.5971,-116.28 43.6005,-116.34 43.6015)
+LINESTRING(-73.7185 41.0868,-73.7085 41.1108)
+LINESTRING(-73.6909 41.0536,-73.6826 41.0607,-73.6722 41.0685,-73.6569 41.0749,-73.6382 41.0791,-73.6186 41.0827,-73.6008 41.087,-73.5809 41.0921,-73.5613 41.0963,-73.5433 41.1026,-73.528 41.1135,-73.5192 41.1156,-73.5102 41.117,-73.5012 41.1181,-73.4921 41.1196,-73.4704 41.1347,-73.453 41.147,-73.4339 41.1583,-73.4074 41.1702,-73.389 41.175,-73.371 41.1763,-73.3529 41.1765,-73.3342 41.1779,-73.3066 41.1871,-73.2842 41.2004,-73.2607 41.2116,-73.2296 41.214,-73.225 41.2161,-73.2207 41.2198,-73.2172 41.224,-73.2151 41.2277,-73.1925 41.2246,-73.1625 41.2362,-73.1294 41.2444,-73.0922 41.2524,-73.0805 41.2554,-73.0702 41.2589,-73.061 41.2628,-73.0524 41.2671)
+LINESTRING(-83.6783 43.0108,-83.6459 43.0136,-83.5963 43.014,-83.5446 43.0133,-83.5065 43.0129,-83.4617 43.0152,-83.4095 43.0212,-83.3588 43.0306,-83.3189 43.0431,-83.3144 43.0425,-83.3098 43.0419,-83.3053 43.0414,-83.3008 43.0408,-83.2664 43.0244,-83.2303 43.0197,-83.1913 43.021,-83.148 43.0224,-83.1221 43.0087,-83.0895 43.0038,-83.055 43.0031,-83.023 43.0019,-83.0103 42.9999,-82.9975 42.9974,-82.9848 42.9949,-82.9721 42.9932,-82.9313 42.9912,-82.9011 42.9891,-82.8727 42.98,-82.8373 42.9572,-82.7771 42.9649,-82.7173 42.9744,-82.6577 42.9848,-82.5983 42.9953,-82.5718 42.9954,-82.5407 42.9899,-82.5107 42.9817,-82.4874 42.9738)
+LINESTRING(-83.9482 43.593,-83.9501 43.5646,-83.9488 43.5359,-83.9419 43.5078,-83.9265 43.4815,-83.9184 43.4781,-83.9102 43.4763,-83.9021 43.4749,-83.894 43.4727,-83.8871 43.4577,-83.8867 43.4353,-83.8883 43.4118,-83.8876 43.3938,-83.8761 43.3827,-83.8685 43.3658,-83.8643 43.3479,-83.8628 43.3336,-83.8389 43.3153,-83.8157 43.2925,-83.793 43.2686,-83.7705 43.2471,-83.7678 43.2097,-83.7651 43.1724,-83.7626 43.135,-83.7607 43.0976,-83.7437 43.0982,-83.7261 43.0994,-83.7088 43.1003,-83.6922 43.0998,-83.6862 43.0924,-83.6835 43.0835,-83.6831 43.0741,-83.6836 43.0655,-83.6816 43.0573,-83.681 43.0416,-83.6805 43.0241,-83.6783 43.0108)
+LINESTRING(-91.3047 43.8547,-91.2825 43.8598,-91.2434 43.8688,-91.2151 43.8734,-91.2052 43.8735,-91.1949 43.8731,-91.1848 43.8728,-91.1752 43.8735,-91.1505 43.867,-91.1228 43.8699,-91.0954 43.8775,-91.0714 43.8848,-91.0675 43.8835,-91.0542 43.8836,-91.0292 43.881,-91.0016 43.8783,-90.9804 43.8781,-90.9289 43.8886,-90.8685 43.9058,-90.8088 43.925,-90.7595 43.9419,-90.7122 43.9476,-90.6513 43.9447,-90.5864 43.9418,-90.5271 43.9475,-90.5052 43.9548,-90.4827 43.9651,-90.4609 43.9767,-90.4413 43.9878)
+LINESTRING(-73.8191 41.3331,-73.8253 41.323,-73.825 41.3081,-73.8219 41.2925,-73.8192 41.2804,-73.8082 41.2517,-73.8072 41.2033,-73.8076 41.1513,-73.8012 41.1118,-73.8056 41.1006,-73.8132 41.0917,-73.8201 41.0804,-73.8225 41.0622)
+LINESTRING(-73.9923 41.1029,-73.9996 41.1205,-74.0126 41.1364,-74.0264 41.152,-74.0361 41.1683,-74.0386 41.1939,-74.038 41.2352,-74.035 41.308)
+LINESTRING(-73.8225 41.0622,-73.8253 41.0619,-73.8281 41.0613,-73.8307 41.0603,-73.833 41.0591)
+LINESTRING(-92.356 43.9501,-92.349 43.9533,-92.3409 43.9553,-92.3324 43.9565,-92.3242 43.9571,-92.2675 43.9588,-92.2016 43.9581,-92.1358 43.9552,-92.0797 43.9506,-92.0678 43.9487,-92.0563 43.9461,-92.045 43.9434,-92.0335 43.9415,-91.9941 43.9374,-91.9517 43.9345,-91.9093 43.9328,-91.8699 43.9327,-91.8456 43.9341,-91.8007 43.937,-91.7551 43.9405,-91.7292 43.9432,-91.7142 43.947,-91.7005 43.9508,-91.6865 43.9537,-91.6705 43.9547,-91.6425 43.9479,-91.6378 43.9341,-91.62 43.9215,-91.5531 43.918,-91.5298 43.9172,-91.5132 43.9149,-91.4971 43.9145,-91.4753 43.9191,-91.4487 43.9139,-91.4283 43.8992,-91.4118 43.8808,-91.397 43.8646,-91.3871 43.8585,-91.3731 43.8524,-91.3596 43.8478,-91.351 43.8461,-91.3218 43.8508,-91.3047 43.8547)
+LINESTRING(-73.9923 41.1029,-73.9643 41.1027,-73.9443 41.0992,-73.9285 41.09,-73.9131 41.0724,-73.8914 41.0715,-73.8682 41.0663,-73.8474 41.0609,-73.833 41.0591)
+LINESTRING(-73.7215 41.0234,-73.7125 41.034,-73.6977 41.0478,-73.6909 41.0536)
+LINESTRING(-73.7215 41.0234,-73.7233 41.0316,-73.7251 41.0399,-73.7273 41.0534,-73.728 41.0641,-73.7185 41.0868)
+LINESTRING(-73.7215 41.0234,-73.7402 41.0298,-73.7738 41.0424,-73.8066 41.0552,-73.8225 41.0622)
+LINESTRING(-73.9923 41.1029,-74.0044 41.1037,-74.0162 41.1034,-74.0278 41.1019,-74.0393 41.0989)
+LINESTRING(-83.6783 43.0108,-83.7301 42.986)
+LINESTRING(-74.0393 41.0989,-74.0673 41.1007,-74.0979 41.1084,-74.1296 41.1172,-74.1608 41.122)
+LINESTRING(-74.1608 41.122,-74.1611 41.1241,-74.1614 41.1263,-74.1616 41.1285,-74.1619 41.1306,-74.1661 41.1343,-74.1711 41.1376,-74.1758 41.1409,-74.1793 41.1449,-74.1761 41.1998,-74.1678 41.2313,-74.1524 41.2603,-74.128 41.3077)
+LINESTRING(-74.1608 41.122,-74.1613 41.12,-74.1622 41.1179,-74.1636 41.116,-74.1652 41.1144)
+LINESTRING(-103.734 44.4736,-103.711 44.4809,-103.683 44.4805,-103.658 44.4731,-103.639 44.4599,-103.632 44.4592,-103.625 44.4586,-103.618 44.458,-103.611 44.4573,-103.59 44.4403,-103.57 44.4293,-103.547 44.4214,-103.519 44.4138,-103.49 44.3861,-103.459 44.3605,-103.436 44.3319,-103.435 44.2953,-103.426 44.284,-103.421 44.2723,-103.418 44.2606,-103.412 44.2493,-103.383 44.2185,-103.348 44.193,-103.317 44.173,-103.297 44.1587,-103.288 44.1473,-103.28 44.1354,-103.271 44.1235,-103.261 44.1121,-103.253 44.1087,-103.243 44.107,-103.232 44.1067,-103.223 44.1074)
+LINESTRING(-111.798 43.8524,-111.813 43.8369,-111.817 43.8188,-111.817 43.7902,-111.825 43.7812,-111.834 43.7726,-111.843 43.7643,-111.851 43.7563,-111.868 43.7345,-111.884 43.7128,-111.901 43.691,-111.918 43.6692,-111.945 43.6309,-111.989 43.5714,-112.037 43.5149,-112.057 43.4994)
+LINESTRING(-83.7301 42.986,-83.7183 42.9525)
+LINESTRING(-74.0393 41.0989,-74.0526 41.0641)
+LINESTRING(-112.057 43.4994,-112.075 43.4853)
+LINESTRING(-112.235 43.8383,-112.234 43.8343,-112.227 43.7987,-112.212 43.7564,-112.199 43.7289,-112.187 43.7034,-112.176 43.6791,-112.166 43.6555,-112.147 43.6188,-112.124 43.579,-112.099 43.5348,-112.075 43.4853)
+LINESTRING(-75.7163 41.9989,-75.7141 41.9948,-75.7112 41.98,-75.7125 41.9624,-75.7153 41.9468,-75.7171 41.9311,-75.7145 41.8989,-75.714 41.8855,-75.7106 41.8729,-75.7004 41.8609,-75.6934 41.8572,-75.6857 41.8549,-75.6782 41.8524,-75.6717 41.8483,-75.6675 41.8407,-75.6678 41.8327,-75.67 41.8243,-75.671 41.8153,-75.6708 41.8007,-75.6713 41.7873,-75.6731 41.774,-75.6768 41.7593,-75.6746 41.7363,-75.6727 41.7296,-75.6713 41.7228,-75.6705 41.716,-75.6705 41.7091,-75.6734 41.7026,-75.6792 41.6964,-75.6849 41.6906,-75.6877 41.6853,-75.6846 41.6792,-75.681 41.6731,-75.6769 41.6671,-75.6724 41.6615,-75.6663 41.6591,-75.6634 41.6548,-75.6624 41.6504,-75.6618 41.6461,-75.66 41.6418,-75.6557 41.6366,-75.6509 41.6316,-75.647 41.6263,-75.6452 41.6202,-75.6469 41.6015,-75.6521 41.5816,-75.6579 41.5614,-75.6612 41.5415,-75.6613 41.5353,-75.6616 41.5318,-75.6688 41.5154,-75.6749 41.5044,-75.6787 41.4926,-75.6784 41.4768,-75.6745 41.4736,-75.6696 41.4715,-75.6643 41.4675,-75.6592 41.4588,-75.652 41.455,-75.6477 41.4537,-75.6
406 41.4511,-75.6349 41.4469,-75.6306 41.4414,-75.6277 41.4345,-75.6225 41.429,-75.6181 41.4278,-75.6135 41.4266,-75.6093 41.425)
+LINESTRING(-77.3326 42.3837,-77.3834 42.3879,-77.4276 42.386,-77.4676 42.3819,-77.5056 42.3793,-77.5173 42.38,-77.5289 42.3817,-77.5405 42.3831,-77.5523 42.3831,-77.5664 42.3811,-77.5803 42.3783,-77.5944 42.3758,-77.6092 42.375,-77.6199 42.376,-77.631 42.3779,-77.6417 42.3796,-77.6515 42.3802,-77.6754 42.3737,-77.7025 42.359,-77.7251 42.341,-77.7355 42.3242,-77.7715 42.3182,-77.7993 42.3171,-77.8251 42.3175,-77.8549 42.3158,-77.8707 42.3128,-77.8874 42.3084,-77.904 42.3036,-77.9195 42.2996,-77.9394 42.2964,-77.9594 42.2948,-77.9796 42.2936,-77.9997 42.2917,-78.0112 42.2896,-78.022 42.2863,-78.0555 42.2654,-78.0845 42.2414,-78.1157 42.2188,-78.1559 42.2022,-78.1806 42.2038,-78.2144 42.2129,-78.2531 42.2216,-78.2923 42.2216,-78.3117 42.2128,-78.3277 42.1982,-78.3429 42.1839,-78.3599 42.1761,-78.3716 42.1744,-78.3828 42.1722,-78.3932 42.1687,-78.4027 42.1633,-78.4062 42.1557,-78.4087 42.1488,-78.4141 42.1385,-78.4203 42.1296,-78.4288 42.1223,-78.4411 42.117,-78.4641 42.1118,-78.4852 42.1082,-78.5051 42.1033,-7
8.5246 42.094,-78.5366 42.0869,-78.5482 42.0812,-78.5608 42.0769,-78.5756 42.0735,-78.5947 42.0698,-78.612 42.0667,-78.6293 42.0655)
+LINESTRING(-78.6293 42.0655,-78.6485 42.0675,-78.6702 42.0788,-78.6824 42.0965,-78.6947 42.1142,-78.7163 42.1254)
+LINESTRING(-73.006 40.782,-72.8925 40.807,-72.7405 40.8444,-72.5934 40.8781,-72.495 40.8921)
+LINESTRING(-77.1159 42.0007,-77.1127 41.9972,-77.0977 41.9771,-77.0882 41.9525,-77.0872 41.9398,-77.0885 41.9282,-77.09 41.9166,-77.0899 41.9039,-77.0859 41.8911,-77.0785 41.8805,-77.0699 41.8699,-77.0628 41.8573,-77.0567 41.8379,-77.0549 41.8201,-77.0571 41.8024,-77.0631 41.7829,-77.0686 41.7703,-77.0752 41.7596,-77.084 41.7497,-77.0962 41.74,-77.104 41.7351,-77.1117 41.7311,-77.1187 41.727,-77.1243 41.7218)
+LINESTRING(-75.6093 41.425,-75.5912 41.4055,-75.5832 41.3929,-75.5796 41.3844,-75.5751 41.3772,-75.5579 41.3862,-75.5407 41.3948,-75.5229 41.4026,-75.5038 41.4093,-75.4739 41.3966,-75.4444 41.3717,-75.4127 41.3532,-75.3766 41.3596,-75.3577 41.3577,-75.3419 41.3507,-75.3274 41.3433,-75.3124 41.3399,-75.292 41.3417,-75.2725 41.3457,-75.2531 41.3506,-75.2336 41.3549,-75.208 41.3585,-75.1806 41.361,-75.1532 41.3627,-75.1274 41.3638,-75.0952 41.3624,-75.0628 41.3578,-75.0303 41.3527,-74.9981 41.35,-74.9866 41.3507,-74.9755 41.3524,-74.9642 41.3535,-74.9521 41.3527,-74.9277 41.3481,-74.9006 41.3428,-74.8737 41.338,-74.85 41.3352,-74.8375 41.3367,-74.8231 41.341,-74.8085 41.346,-74.7956 41.3495,-74.7631 41.3527,-74.7198 41.3545,-74.6991 41.355)
+LINESTRING(-78.8094 42.8135,-78.8058 42.8048,-78.8043 42.7965,-78.8031 42.7882,-78.8002 42.7791,-78.7947 42.7669,-78.7905 42.7557,-78.7889 42.7444,-78.7913 42.732,-78.8021 42.7125,-78.8179 42.6975,-78.8376 42.6844,-78.8606 42.6706,-78.8814 42.6572,-78.8986 42.6446,-78.9142 42.6309,-78.9301 42.6142,-78.9377 42.6084,-78.9477 42.6014,-78.9567 42.5951,-78.9657 42.5889,-78.9839 42.5767,-79.0031 42.5648,-79.0226 42.5534,-79.0421 42.542,-79.0661 42.5274,-79.0909 42.5124,-79.1166 42.4984,-79.1434 42.4867,-79.1541 42.4843,-79.1661 42.4833,-79.1785 42.4824,-79.1902 42.4804,-79.217 42.4715,-79.2438 42.4601,-79.2695 42.4473,-79.2931 42.4346,-79.3071 42.4376,-79.3149 42.438,-79.3486 42.4348,-79.3631 42.4237,-79.3739 42.4089,-79.3901 42.3945,-79.4289 42.384,-79.4824 42.3628,-79.5363 42.3389,-79.5768 42.3205,-79.6155 42.3025,-79.6706 42.2756,-79.7229 42.2486,-79.7529 42.2304,-79.7632 42.2237)
+LINESTRING(-74.1652 41.1144,-74.1653 41.1144,-74.1647 41.1105,-74.1641 41.1066,-74.1635 41.1027,-74.1629 41.0987,-74.1686 41.0979,-74.1744 41.0961,-74.1796 41.0937,-74.1837 41.0906,-74.1874 41.0753,-74.1917 41.0544,-74.1959 41.0357,-74.1992 41.0267,-74.2042 41.025,-74.2093 41.0233,-74.2143 41.0216,-74.2193 41.0199)
+LINESTRING(-74.0526 41.0641,-74.0593 41.0466,-74.0705 40.9916,-74.0779 40.9461,-74.0865 40.922)
+LINESTRING(-74.2193 41.0199,-74.1826 40.9931,-74.156 40.9667,-74.1279 40.9425,-74.0865 40.922)
+LINESTRING(-79.7632 42.2237,-79.7665 42.2215,-79.774 42.2166,-79.7791 42.2121,-79.7997 42.1956,-79.8325 42.1775,-79.8672 42.1611,-79.8904 42.1509)
+LINESTRING(-78.7163 42.1254,-78.7335 42.1253,-78.7476 42.119,-78.7592 42.1086,-78.7686 42.0962,-78.7745 42.0908,-78.7925 42.0874,-78.8031 42.0877,-78.8165 42.0868,-78.8301 42.0853,-78.8447 42.0857,-78.8576 42.0877,-78.8706 42.0902,-78.8853 42.0922,-78.894 42.0935,-78.9022 42.0951,-78.9099 42.0965,-78.9172 42.097,-78.9267 42.0981,-78.936 42.0994,-78.9576 42.1088,-78.9721 42.123,-78.9867 42.1372,-79.0083 42.1465,-79.0321 42.1486,-79.0535 42.1458,-79.0743 42.1393,-79.096 42.1303,-79.1083 42.1294,-79.1159 42.1296,-79.1306 42.1319,-79.1492 42.1373,-79.1599 42.1433,-79.1705 42.1492,-79.1891 42.1546,-79.2046 42.1563,-79.219 42.1556,-79.2332 42.153,-79.2479 42.1491,-79.2629 42.148,-79.2795 42.1512,-79.2964 42.156,-79.3121 42.1601,-79.3255 42.1642,-79.3363 42.1698,-79.347 42.1753,-79.3604 42.1794,-79.3757 42.1807,-79.3917 42.1795,-79.4077 42.1773,-79.4232 42.1751,-79.444 42.1709,-79.468 42.1641,-79.4879 42.1578,-79.5202 42.1544,-79.5444 42.1534,-79.5686 42.1522,-79.5924 42.1512,-79.6055 42.1499,-79.6195 42.1475,-79.
6334 42.1448,-79.6462 42.1425,-79.7181 42.1307,-79.7633 42.1268)
+LINESTRING(-75.6093 41.425,-75.6452 41.3948,-75.681 41.3646,-75.7169 41.3344,-75.7526 41.3041,-75.7607 41.3009)
+LINESTRING(-79.7633 42.1268,-79.7641 42.1268,-79.8123 42.1329,-79.8904 42.1509)
+LINESTRING(-89.4906 43.4584,-89.4791 43.4773,-89.4822 43.507,-89.4905 43.5376,-89.4944 43.5594,-89.4891 43.5721,-89.479 43.5828,-89.4683 43.5933,-89.4615 43.6054,-89.4611 43.6089,-89.4615 43.6128,-89.4622 43.6165,-89.463 43.6201,-89.4652 43.6388,-89.464 43.6534,-89.4617 43.6671,-89.4608 43.6828,-89.465 43.7,-89.4732 43.7167,-89.4813 43.7336,-89.4849 43.7516,-89.4841 43.7744,-89.4829 43.7974,-89.4821 43.8204,-89.4823 43.8431,-89.4823 43.9025,-89.4815 43.9375,-89.4896 43.9703,-89.5166 44.023,-89.516 44.0276,-89.5325 44.0513,-89.5408 44.0818,-89.5381 44.1124,-89.5217 44.1364,-89.526 44.1876,-89.5264 44.2773,-89.525 44.3695,-89.5244 44.4282,-89.5191 44.4608,-89.5125 44.5028,-89.5196 44.5377,-89.5555 44.5488,-89.574 44.575,-89.5817 44.6134,-89.5865 44.6514,-89.5967 44.6769,-89.5952 44.6826,-89.5942 44.6885,-89.5938 44.6944,-89.5941 44.7002,-89.6044 44.71,-89.6147 44.7198,-89.625 44.7296,-89.6353 44.7394,-89.631 44.7779,-89.6267 44.7991,-89.6196 44.8123,-89.6064 44.827)
+LINESTRING(-90.4413 43.9878,-90.3743 43.9638,-90.278 43.932,-90.1851 43.8987,-90.1282 43.8703,-90.1085 43.852,-90.0896 43.8326,-90.0704 43.8136,-90.0502 43.7964,-90.0256 43.7821,-89.9979 43.7711,-89.9694 43.761,-89.9421 43.7494,-89.9097 43.7264,-89.8816 43.6955,-89.8582 43.6621,-89.8396 43.6316,-89.8393 43.6113,-89.8379 43.5905,-89.8365 43.5698,-89.836 43.5496,-89.8301 43.5455,-89.8232 43.5416,-89.8161 43.5378,-89.8094 43.5338,-89.7981 43.5325,-89.7855 43.5294,-89.7726 43.526,-89.7608 43.5234,-89.6981 43.5167,-89.6091 43.5058,-89.5285 43.4875,-89.4906 43.4584)
+LINESTRING(-85.5478 43.8901,-85.5456 43.8391,-85.5488 43.7879,-85.552 43.7367,-85.5501 43.6857,-85.5345 43.62,-85.5126 43.557,-85.4955 43.4934,-85.4946 43.4259,-85.4981 43.4242,-85.5016 43.4225,-85.5051 43.4208,-85.5086 43.4192,-85.5143 43.3572,-85.5356 43.3202,-85.5625 43.2883,-85.5854 43.2413,-85.5907 43.207,-85.5916 43.1716,-85.5942 43.1364,-85.6041 43.1032,-85.6162 43.0875,-85.6325 43.0747,-85.6498 43.0624,-85.665 43.0481,-85.6668 43.0405,-85.6715 43.0319,-85.6766 43.0229,-85.6792 43.0145)
+LINESTRING(-86.413 43.9542,-86.4124 43.9454,-86.4118 43.9366,-86.4112 43.9279,-86.4105 43.9191,-86.4064 43.9159,-86.4023 43.9127,-86.4006 43.8934,-86.3989 43.8738,-86.3984 43.8541,-86.4005 43.8348,-86.3975 43.827,-86.3971 43.8227,-86.3967 43.8184,-86.3907 43.8143,-86.3847 43.8102,-86.3898 43.7493,-86.3925 43.6517,-86.3866 43.554,-86.3657 43.4929,-86.3436 43.4809,-86.3379 43.474,-86.3381 43.4654,-86.3336 43.4483,-86.3287 43.4403,-86.3215 43.4317,-86.3137 43.4231,-86.3072 43.4155,-86.2743 43.3816,-86.2365 43.3488,-86.2046 43.3144,-86.1893 43.2758,-86.1867 43.2499,-86.184 43.2213,-86.1834 43.1928,-86.1868 43.1673,-86.174 43.1536,-86.1611 43.1399,-86.1483 43.1262,-86.1355 43.1126,-86.1248 43.1026,-86.1135 43.0911,-86.1011 43.0806,-86.0874 43.0738,-86.0659 43.0699,-86.0427 43.0687,-86.0192 43.068,-85.9972 43.0657,-85.9841 43.0622,-85.9711 43.0573,-85.9577 43.0526,-85.9434 43.0496,-85.9113 43.0463,-85.88 43.0429,-85.8488 43.0385,-85.8173 43.0323,-85.8044 43.0283,-85.7923 43.0236,-85.7798 43.0195,-85.7657 43.0173,
-85.7437 43.0171,-85.7224 43.0177,-85.701 43.0174,-85.6792 43.0145)
+LINESTRING(-73.833 41.0591,-73.8357 41.0258,-73.8408 40.9938,-73.8475 40.9627,-73.8554 40.9319,-73.8634 40.9104,-73.8768 40.8889,-73.8975 40.8672,-73.9273 40.8448,-73.9457 40.8325,-73.9642 40.8202,-73.9692 40.8168)
+LINESTRING(-112.075 43.4853,-112.083 43.4738,-112.101 43.4547,-112.122 43.4352,-112.136 43.4224,-112.196 43.372,-112.263 43.3206,-112.333 43.2713,-112.4 43.2271,-112.401 43.2217)
+LINESTRING(-88.5892 43.947,-88.5852 43.8728,-88.57 43.8421,-88.5431 43.826,-88.5041 43.7953,-88.498 43.7852,-88.4955 43.7741,-88.4934 43.7629,-88.4884 43.7526,-88.4794 43.7473,-88.4675 43.7458,-88.455 43.7438,-88.4445 43.7369,-88.4093 43.6699,-88.401 43.6134,-88.3887 43.5657,-88.3415 43.5256,-88.3384 43.517,-88.3342 43.5087,-88.3306 43.5002,-88.3288 43.4909,-88.3292 43.4858,-88.3298 43.4806,-88.3295 43.4754,-88.3273 43.4704,-88.3095 43.4434,-88.2886 43.4093,-88.2678 43.3772,-88.2504 43.3562,-88.2324 43.3378,-88.218 43.3183,-88.204 43.2984,-88.1873 43.2789)
+LINESTRING(-92.9376 43.6742,-92.8982 43.6717,-92.8393 43.6707,-92.7819 43.672,-92.7466 43.6765,-92.7335 43.6829,-92.7215 43.6912,-92.7103 43.7004,-92.7 43.709,-92.6974 43.7126,-92.6656 43.7394,-92.6337 43.7662,-92.6022 43.7932,-92.5713 43.8205,-92.5563 43.8345,-92.5411 43.8495,-92.5255 43.8642,-92.5096 43.8775,-92.4905 43.8857,-92.4578 43.8964,-92.4234 43.9071,-92.3998 43.9154,-92.3869 43.9229,-92.3764 43.9318,-92.3667 43.9411,-92.356 43.9501)
+LINESTRING(-85.6792 43.0145,-85.6802 43.006,-85.6826 42.9982,-85.6833 42.991,-85.6823 42.9846,-85.6804 42.9782,-85.6785 42.9709)
+LINESTRING(-84.5448 42.8168,-84.5248 42.816)
+LINESTRING(-100.3 43.9101,-100.378 43.9093,-100.457 43.9085,-100.535 43.9075,-100.614 43.9066,-100.634 43.8977,-100.659 43.8904,-100.685 43.8851,-100.709 43.8823)
+LINESTRING(-93.2513 44.0587,-93.2522 44.0376,-93.2529 44.0167,-93.2543 43.9958,-93.2573 43.9749,-93.2616 43.9602,-93.2674 43.9454,-93.2726 43.9306,-93.2753 43.9161,-93.2749 43.9035,-93.2737 43.89,-93.2733 43.8766,-93.2755 43.8642,-93.2806 43.853,-93.2862 43.8427,-93.29 43.8321,-93.2896 43.8201,-93.3066 43.7927,-93.3147 43.7554,-93.3175 43.7164,-93.3191 43.6844)
+LINESTRING(-84.5248 42.816,-84.4864 42.8068,-84.4598 42.7967,-84.438 42.7864,-84.4216 42.7832,-84.3835 42.7933,-84.3473 42.8059,-84.3117 42.8195,-84.2757 42.8327,-84.2568 42.8373,-84.2382 42.8396,-84.2196 42.8413,-84.2009 42.8445,-84.1863 42.8491,-84.1635 42.8571,-84.1412 42.8654,-84.1281 42.871,-84.122 42.8752,-84.116 42.8801,-84.1101 42.8849,-84.1037 42.8887,-84.0823 42.8974,-84.0592 42.9049,-84.0362 42.9126,-84.015 42.9216,-83.9948 42.9364,-83.9787 42.9523,-83.9597 42.9651,-83.9305 42.9701,-83.8713 42.9683,-83.8247 42.9675,-83.7808 42.972,-83.7301 42.986)
+LINESTRING(-93.3191 43.6844,-93.2704 43.6718,-93.2174 43.6651,-93.1636 43.6623,-93.1123 43.6617,-93.0964 43.6612,-93.0715 43.6603,-93.0472 43.6598,-93.0333 43.6605,-93.016 43.668,-93.0035 43.6764,-92.9888 43.6826,-92.9648 43.6834,-92.9571 43.6817,-92.9511 43.6789,-92.9451 43.676,-92.9376 43.6742)
+LINESTRING(-74.2193 41.0199,-74.224 41.0234,-74.2296 41.0265,-74.2357 41.029,-74.2418 41.0309,-74.2575 41.0292,-74.2742 41.0264,-74.2886 41.0209,-74.2973 41.011,-74.3399 40.9405,-74.3851 40.9051,-74.4169 40.886,-74.4192 40.8642)
+LINESTRING(-100.709 43.8823,-100.745 43.8827,-100.795 43.8837,-100.842 43.8852,-100.873 43.887,-100.881 43.8894,-100.892 43.8939,-100.904 43.8985,-100.912 43.901,-100.948 43.905,-100.988 43.9079,-101.027 43.9095,-101.064 43.9095,-101.121 43.8986,-101.173 43.8763,-101.226 43.854,-101.285 43.8433,-101.306 43.8449,-101.325 43.8491,-101.343 43.8536,-101.362 43.856,-101.4 43.8573,-101.447 43.8572,-101.493 43.8528,-101.527 43.8412,-101.666 43.8467,-101.755 43.8469,-101.809 43.8453,-101.845 43.8452,-101.879 43.8493,-101.925 43.86,-101.996 43.8799,-102.108 43.9114,-102.146 43.9246,-102.175 43.9413,-102.196 43.9637,-102.207 43.9936,-102.256 43.9991,-102.299 44.0137,-102.335 44.0368,-102.364 44.0676,-102.394 44.0714,-102.421 44.0687,-102.448 44.0676,-102.475 44.0764,-102.49 44.0844,-102.504 44.0924,-102.518 44.1004,-102.532 44.1084,-102.622 44.107,-102.713 44.1055,-102.803 44.104,-102.894 44.1023,-102.899 44.1045,-102.904 44.1067,-102.909 44.1089,-102.914 44.1111,-102.969 44.113,-103.024 44.1148,-103.09 44.1165,-103.
124 44.1162,-103.13 44.1125,-103.136 44.1087,-103.157 44.109,-103.179 44.1084,-103.201 44.1076,-103.223 44.1074)
+LINESTRING(-72.739 40.904,-72.7749 40.8829,-72.815 40.8659,-72.8575 40.8519,-72.9006 40.8402,-73.005 40.8244,-73.1224 40.8182,-73.2342 40.8135,-73.3216 40.8028,-73.3754 40.7893,-73.4042 40.7842,-73.4324 40.7877,-73.4845 40.7995,-73.4957 40.7984,-73.5088 40.793,-73.5219 40.7867,-73.5329 40.7831,-73.559 40.7818,-73.5869 40.7831,-73.615 40.785,-73.6415 40.7856,-73.6826 40.7786,-73.7229 40.7643,-73.7643 40.7495,-73.8087 40.7411,-73.8161 40.7407,-73.8236 40.7407,-73.8309 40.7415,-73.8379 40.7434,-73.8663 40.7315,-73.9027 40.7318,-73.9401 40.7381,-73.948 40.7396)
+LINESTRING(-73.948 40.7396,-73.9714 40.7442)
+LINESTRING(-85.6785 42.9709,-85.6601 42.9759,-85.632 42.9807,-85.603 42.9844,-85.5824 42.9861,-85.5643 42.9741,-85.5499 42.9555,-85.53 42.9338,-85.4952 42.9125,-85.4835 42.9088,-85.4708 42.9058,-85.4589 42.9018,-85.4498 42.8949,-85.4184 42.8921,-85.3894 42.8854,-85.3605 42.8785,-85.3294 42.8754,-85.2661 42.876,-85.2029 42.8775,-85.1397 42.8799,-85.0766 42.8829,-85.0555 42.8834,-85.0318 42.8828,-85.0083 42.8814,-84.9879 42.8792,-84.9823 42.8776,-84.9744 42.8744,-84.9662 42.8711,-84.96 42.8689,-84.9389 42.8657,-84.9149 42.8642,-84.8912 42.8619,-84.8715 42.8564,-84.8573 42.8483,-84.8442 42.8388,-84.8309 42.8293,-84.8161 42.8212,-84.7809 42.8114,-84.7451 42.8088,-84.7086 42.808,-84.6717 42.8033,-84.6479 42.8072,-84.5995 42.8125,-84.5504 42.8171,-84.5448 42.8168)
+LINESTRING(-79.8904 42.1509,-79.8934 42.1496,-79.9047 42.1385,-79.9182 42.1311,-79.9331 42.1249,-79.9486 42.1172,-79.9589 42.1104,-79.9675 42.1039,-79.9765 42.0977,-79.9875 42.0919,-80.0134 42.081,-80.0367 42.0715,-80.0597 42.0615,-80.0849 42.049,-80.0955 42.0438,-80.1051 42.0394,-80.1142 42.0353,-80.1234 42.0311)
+LINESTRING(-73.9982 40.7168,-74.0015 40.7203,-74.0085 40.7227)
+LINESTRING(-84.5248 42.816,-84.5211 42.7939,-84.5189 42.7837,-84.5153 42.7725,-84.5103 42.7605,-84.5063 42.7504,-84.5037 42.7401,-84.5032 42.7277)
+LINESTRING(-73.9692 40.8168,-73.984 40.8071,-74.0042 40.7946,-74.0158 40.7892,-74.0305 40.7845,-74.0452 40.7812,-74.057 40.7799,-74.0968 40.7731,-74.1378 40.7599,-74.1771 40.7508,-74.2119 40.7563)
+LINESTRING(-74.0865 40.922,-74.0934 40.9137,-74.1027 40.907,-74.1129 40.9008,-74.1226 40.894,-74.1567 40.8783,-74.1836 40.8382,-74.2022 40.7916,-74.2119 40.7563)
+LINESTRING(-74.4192 40.8642,-74.3982 40.8592,-74.3769 40.8542,-74.3568 40.8478,-74.3391 40.8387,-74.3243 40.8221,-74.3027 40.8089,-74.2777 40.7989,-74.2524 40.7918,-74.2491 40.7801,-74.2392 40.7703,-74.2258 40.7624,-74.2119 40.7563)
+LINESTRING(-73.1759 40.7462,-73.1912 40.756,-73.221 40.7554,-73.2536 40.7504,-73.2772 40.7471,-73.2811 40.7415,-73.2849 40.7359,-73.3131 40.7303,-73.3433 40.7275,-73.3744 40.7243,-73.4049 40.7179,-73.4078 40.7139,-73.4106 40.7099,-73.4304 40.7074,-73.4703 40.7036,-73.5096 40.7003,-73.5279 40.699,-73.5412 40.6951,-73.5565 40.6915,-73.5721 40.69,-73.5857 40.6922,-73.6096 40.6899,-73.6542 40.6881,-73.6996 40.6871,-73.7259 40.6874,-73.7268 40.6812,-73.7307 40.6755,-73.736 40.6701,-73.741 40.665,-73.7812 40.6654,-73.8202 40.6672,-73.8545 40.6608,-73.8723 40.6441)
+LINESTRING(-75.0847 40.9297,-75.0766 40.9255,-75.0588 40.9276,-75.0412 40.9316,-75.0238 40.9346,-75.0067 40.9335,-74.9575 40.9278,-74.8693 40.9207,-74.7818 40.9148,-74.7348 40.913,-74.7238 40.9066,-74.7174 40.8989,-74.7098 40.892,-74.6958 40.8881,-74.6596 40.8986,-74.6015 40.9063,-74.5425 40.9095,-74.5037 40.9068,-74.4886 40.8992,-74.4769 40.8887,-74.4575 40.8766,-74.4192 40.8642)
+LINESTRING(-75.6944 41.0667,-75.622 41.0751,-75.5059 41.0764,-75.3914 41.0709,-75.3241 41.0587,-75.3153 41.047,-75.3095 41.03,-75.2931 41.011,-75.2528 40.9936,-75.2067 40.9885,-75.1716 40.9932,-75.1477 40.9948,-75.1352 40.9809,-75.1176 40.9676,-75.1032 40.949,-75.0901 40.9326,-75.0847 40.9297)
+LINESTRING(-75.7607 41.3009,-75.7638 41.2949,-75.7663 41.283,-75.7679 41.2711,-75.7714 41.2588,-75.775 41.2517,-75.7794 41.2447,-75.784 41.2382,-75.7886 41.2317,-75.7914 41.2267,-75.7934 41.2215,-75.796 41.2167,-75.8007 41.2124,-75.8031 41.2068,-75.8035 41.2044,-75.8009 41.2028,-75.7942 41.1997,-75.7934 41.1903,-75.7891 41.1823,-75.7834 41.1747,-75.7786 41.1664,-75.7773 41.158,-75.7784 41.1486,-75.7798 41.1387,-75.7795 41.1292,-75.7668 41.118,-75.7553 41.1063,-75.7439 41.0946,-75.7318 41.0836,-75.7231 41.0789,-75.7128 41.0758,-75.7027 41.0724,-75.6944 41.0667)
+LINESTRING(-84.5032 42.7277,-84.4986 42.7172,-84.4964 42.7037,-84.4948 42.6897,-84.4921 42.6775)
+LINESTRING(-95.0011 43.6403,-94.9891 43.6415,-94.9692 43.6455,-94.9495 43.6499,-94.93 43.6531,-94.8817 43.6573,-94.8329 43.6603,-94.784 43.6629,-94.7355 43.666,-94.731 43.6665,-94.6735 43.6736,-94.6194 43.6773,-94.5653 43.6782,-94.5079 43.677,-94.4927 43.6773,-94.477 43.6785,-94.4613 43.6794,-94.4459 43.6789,-94.4363 43.6771,-94.4268 43.6745,-94.4173 43.6718,-94.4078 43.67,-94.3847 43.6688,-94.36 43.6696,-94.3351 43.671,-94.3117 43.672,-94.2579 43.6717,-94.2037 43.6699,-94.1496 43.6671,-94.0959 43.6641,-94.0185 43.661,-93.9375 43.6598,-93.8564 43.6604,-93.779 43.6628,-93.7475 43.6646,-93.7054 43.6671,-93.6633 43.6689,-93.6323 43.669,-93.6153 43.6678,-93.598 43.6664,-93.5806 43.6652,-93.5633 43.6645,-93.5463 43.6662,-93.5295 43.6706,-93.5126 43.6755,-93.4956 43.6786,-93.4772 43.6798,-93.4521 43.6815,-93.4277 43.6848,-93.4115 43.6904,-93.3883 43.6901,-93.3652 43.6884,-93.3421 43.6863,-93.3191 43.6844)
+LINESTRING(-73.8723 40.6441,-73.8804 40.6364,-73.8849 40.6296,-73.8874 40.6257)
+LINESTRING(-74.2119 40.7563,-74.2175 40.7433,-74.2266 40.7307,-74.2375 40.7189,-74.2484 40.7079)
+LINESTRING(-74.0085 40.7227,-74.0179 40.7259,-74.0365 40.7292,-74.0512 40.7304,-74.0697 40.7309,-74.0853 40.7304,-74.1004 40.7286,-74.1172 40.7251,-74.1292 40.7214,-74.1391 40.717,-74.1491 40.7127,-74.1611 40.709,-74.188 40.7049,-74.2157 40.7035,-74.238 40.7046,-74.2484 40.7079)
+LINESTRING(-95.5792 43.6386,-95.4369 43.6367,-95.294 43.6362,-95.1511 43.6371,-95.0088 43.6395,-95.0011 43.6403)
+LINESTRING(-122.598 42.006,-122.598 42.0059,-122.602 41.9736,-122.59 41.9422,-122.572 41.9112,-122.556 41.8801,-122.561 41.8716,-122.567 41.8618,-122.572 41.8532,-122.574 41.8483,-122.571 41.839,-122.569 41.8302,-122.568 41.8216,-122.571 41.8125,-122.572 41.8061,-122.573 41.7964,-122.575 41.7868,-122.577 41.7805,-122.6 41.7588,-122.627 41.7394,-122.641 41.7138,-122.625 41.6736,-122.599 41.6653,-122.573 41.6593,-122.548 41.652,-122.525 41.6396,-122.52 41.6233,-122.515 41.6071,-122.509 41.5909,-122.504 41.5747,-122.497 41.5611,-122.489 41.5477,-122.48 41.5344,-122.474 41.5209,-122.473 41.5169,-122.473 41.5123,-122.474 41.5076,-122.473 41.5037,-122.464 41.4852,-122.454 41.4661,-122.442 41.447,-122.431 41.4288,-122.42 41.4263)
+LINESTRING(-83.7183 42.9525,-83.721 42.9427,-83.7226 42.9329,-83.724 42.9232,-83.7261 42.9136,-83.7297 42.9041,-83.7346 42.895,-83.7394 42.8855,-83.7431 42.8753,-83.7437 42.8728,-83.7443 42.8703,-83.7449 42.8678,-83.7455 42.8653,-83.7434 42.8485,-83.7392 42.833,-83.7363 42.8174,-83.7381 42.8001,-83.7485 42.7782,-83.76 42.764,-83.7683 42.7472,-83.7689 42.7171,-83.7668 42.6988,-83.7647 42.6806,-83.7627 42.6624,-83.7606 42.6441,-83.7569 42.6306,-83.75 42.611,-83.7436 42.5926,-83.7412 42.5828,-83.7449 42.5683,-83.7487 42.5538,-83.7526 42.5394,-83.7565 42.5249)
+LINESTRING(-84.4921 42.6775,-84.4513 42.676,-84.411 42.6733,-84.3708 42.6702,-84.3303 42.6672,-84.301 42.6661,-84.2712 42.6659,-84.2415 42.6651,-84.2126 42.6624,-84.1936 42.6588,-84.1761 42.6544,-84.1581 42.6504,-84.1376 42.6479,-84.1167 42.6474,-84.0903 42.6471,-84.0647 42.6462,-84.0461 42.6435,-84.0176 42.6318,-83.9909 42.617,-83.9644 42.6021,-83.9365 42.59,-83.9056 42.5828,-83.8903 42.5834,-83.8683 42.5794,-83.8171 42.5579,-83.8013 42.5507,-83.785 42.5432,-83.7696 42.5347,-83.7565 42.5249)
+LINESTRING(-100.3 43.9101,-100.271 43.9102,-100.24 43.9106,-100.209 43.9104,-100.18 43.9085,-100.172 43.9059,-100.161 43.9008,-100.149 43.8956,-100.141 43.8929,-100.098 43.8899,-100.053 43.8895,-100.006 43.8899,-99.9625 43.8896,-99.9578 43.8896,-99.953 43.8896,-99.9482 43.8898,-99.9435 43.89,-99.923 43.8909,-99.9014 43.8921,-99.8799 43.8928,-99.8597 43.8923,-99.8209 43.8871,-99.7818 43.8784,-99.7427 43.8694,-99.7039 43.8628,-99.6796 43.8619,-99.6542 43.863,-99.6286 43.8637,-99.6043 43.8617,-99.5938 43.8588,-99.5831 43.8546,-99.5725 43.8505,-99.562 43.8477,-99.5494 43.8469,-99.5361 43.8472,-99.5227 43.8476,-99.51 43.8469,-99.4779 43.8379,-99.4482 43.8237,-99.4188 43.8097,-99.3877 43.8008,-99.3813 43.8024,-99.375 43.8039,-99.3686 43.8055,-99.3623 43.807,-99.3347 43.7979,-99.3033 43.781,-99.2728 43.7625,-99.248 43.7481,-99.1945 43.748,-99.1407 43.7483,-99.087 43.748,-99.0339 43.7459,-99.0189 43.7435,-99.0039 43.7395,-98.9885 43.7357,-98.9721 43.7343,-98.9199 43.736,-98.8653 43.7374,-98.811 43.7365,-98.7594 43.
7312,-98.7374 43.7259,-98.715 43.7185,-98.6927 43.7114,-98.6708 43.7068,-98.6139 43.7043,-98.5566 43.7063,-98.4992 43.7066,-98.4418 43.6989)
+LINESTRING(-74.0268 40.6161,-74.0312 40.6111)
+LINESTRING(-93.3493 43.5035,-93.3509 43.5228,-93.3532 43.5418,-93.3541 43.561,-93.3516 43.5807,-93.3441 43.5994,-93.3337 43.6175,-93.324 43.6355,-93.319 43.6539,-93.3187 43.6575,-93.319 43.6611,-93.3202 43.6645,-93.3229 43.6676,-93.322 43.6718,-93.321 43.676,-93.32 43.6802,-93.3191 43.6844)
+LINESTRING(-74.021 40.6058,-74.0312 40.6111)
+LINESTRING(-74.047 40.6089,-74.0312 40.6111)
+LINESTRING(-96.8027 43.6348,-96.8095 43.6868,-96.8152 43.7407,-96.817 43.7946,-96.8122 43.8469,-96.8077 43.8596,-96.801 43.871,-96.7949 43.883,-96.7923 43.8978,-96.7918 44.007,-96.7905 44.1124,-96.7893 44.2179,-96.7888 44.327)
+LINESTRING(-95.5792 43.6386,-95.6824 43.6405,-95.9 43.6419,-96.1226 43.6412,-96.2408 43.6379,-96.2991 43.6284,-96.3368 43.6243,-96.3784 43.6235,-96.4485 43.6241,-96.4536 43.6241)
+LINESTRING(-96.4536 43.6241,-96.5335 43.6241,-96.6266 43.6242,-96.7192 43.627,-96.8027 43.6348)
+LINESTRING(-75.6944 41.0667,-75.7249 41.0605,-75.7734 41.0561,-75.8224 41.0541,-75.855 41.0548,-75.87 41.0575,-75.8822 41.0604,-75.8952 41.062,-75.9127 41.061,-75.9367 41.0576,-75.9607 41.0541,-75.9847 41.0506,-76.0087 41.0472,-76.0115 41.0462,-76.0142 41.045)
+LINESTRING(-75.7607 41.3009,-75.782 41.2933,-75.8051 41.2827,-75.8218 41.2712,-75.8249 41.2666,-75.8271 41.2617,-75.8298 41.2569,-75.8344 41.2528,-75.8454 41.2477,-75.8583 41.2431,-75.8707 41.2385,-75.8801 41.2334,-75.9005 41.2183,-75.9257 41.2003,-75.9487 41.1835,-75.9626 41.1723,-75.9679 41.154,-75.9659 41.1274,-75.9626 41.1006,-75.9641 41.082,-75.9727 41.0763,-75.9893 41.0678,-76.0057 41.0571,-76.0142 41.045)
+LINESTRING(-98.4418 43.6989,-98.2966 43.6976,-98.1514 43.6961,-98.0062 43.6945,-97.8609 43.6926,-97.8466 43.688,-97.8257 43.6781,-97.8035 43.6682,-97.7855 43.6638,-97.6208 43.6652,-97.456 43.6654,-97.2912 43.6656,-97.1265 43.6668,-97.0663 43.6345,-96.9797 43.6271,-96.8857 43.6315,-96.8027 43.6348)
+LINESTRING(-88.1873 43.2789,-88.1684 43.2396,-88.1487 43.2177,-88.1192 43.2003,-88.0712 43.1749,-88.0662 43.1714,-88.0615 43.1676,-88.0563 43.1641,-88.0501 43.1619,-88.0456 43.1393,-88.0415 43.0949,-88.0395 43.0506,-88.0417 43.0281)
+LINESTRING(-82.4874 42.9738,-82.4887 42.9688,-82.4901 42.9639,-82.4915 42.9589,-82.4929 42.9539,-82.5006 42.9501,-82.5084 42.9462,-82.5078 42.9351,-82.5072 42.9241,-82.5072 42.909,-82.5091 42.9007,-82.5572 42.861,-82.6052 42.8211,-82.6556 42.7832,-82.7109 42.7493,-82.7586 42.7291,-82.8097 42.7094,-82.8536 42.6834,-82.8794 42.6448,-82.8806 42.6343,-82.8796 42.6235,-82.8786 42.6129,-82.8797 42.6034,-82.8842 42.5997,-82.8908 42.5961,-82.8932 42.5928,-82.8848 42.5903,-82.9107 42.5603,-82.9261 42.5228,-82.9324 42.4831,-82.9311 42.4464,-82.9446 42.4235,-82.981 42.4023,-83.0246 42.3837,-83.0596 42.3688)
+LINESTRING(-83.7183 42.9525,-83.6929 42.9342,-83.6792 42.9219,-83.6615 42.9094,-83.6244 42.8904,-83.6011 42.8727,-83.5888 42.8509,-83.5788 42.8277,-83.5623 42.8058,-83.5442 42.7885,-83.5246 42.7699,-83.5027 42.7531,-83.4776 42.7411,-83.461 42.7443,-83.441 42.7471,-83.421 42.7484,-83.4043 42.7471,-83.3824 42.7384,-83.3616 42.7249,-83.3409 42.7115,-83.3195 42.7032,-83.3016 42.7024,-83.2864 42.7041,-83.2707 42.703,-83.2513 42.6938,-83.2408 42.6577,-83.2401 42.6306,-83.2251 42.612,-83.1715 42.6013,-83.1611 42.5891,-83.159 42.5803,-83.1588 42.5718,-83.1542 42.5604,-83.1472 42.5584,-83.14 42.5575,-83.1325 42.5571,-83.1251 42.5565,-83.1173 42.5423,-83.1171 42.5159,-83.1134 42.4828,-83.0955 42.4484,-83.0901 42.4316,-83.0803 42.4089,-83.0691 42.3861,-83.0596 42.3688)
+LINESTRING(-83.7565 42.5249,-83.7427 42.5245,-83.7289 42.5241,-83.7151 42.5237,-83.7012 42.5233,-83.6909 42.5218,-83.6801 42.5189,-83.6696 42.5162,-83.6599 42.5151,-83.6501 42.5194,-83.6404 42.5215,-83.6302 42.5216,-83.6192 42.5197,-83.5868 42.5116,-83.5541 42.5032,-83.5214 42.4952,-83.4886 42.4881,-83.4529 42.4836,-83.4302 42.4857,-83.4101 42.4909,-83.3825 42.4956,-83.3584 42.4955,-83.3198 42.4933,-83.2824 42.4896,-83.2617 42.4849,-83.251 42.4774,-83.2403 42.4698,-83.2296 42.4623,-83.2189 42.4547,-83.2075 42.4453,-83.197 42.4349,-83.1865 42.4246,-83.1748 42.4154,-83.1466 42.3983,-83.126 42.3893,-83.101 42.3818,-83.0596 42.3688)
+LINESTRING(-82.9946 42.3364,-83.0596 42.3688)
+LINESTRING(-80.1234 42.0311,-80.141 42.0234,-80.1612 42.0171,-80.1816 42.0117,-80.1998 42.0066,-80.2443 41.9897,-80.283 41.9716,-80.3209 41.9542,-80.3628 41.9395,-80.3838 41.9341,-80.4046 41.9301,-80.4257 41.9277,-80.4475 41.9269,-80.4588 41.9272,-80.4712 41.9277,-80.4836 41.9277,-80.4944 41.9267,-80.5191 41.9124)
+LINESTRING(-87.7752 44.1353,-87.7756 44.1105,-87.7738 44.0844,-87.7696 44.062,-87.7627 44.0481,-87.7702 44.0209,-87.7869 43.9874,-87.8055 43.9531,-87.8185 43.9235,-87.8221 43.9079,-87.8259 43.8848,-87.8284 43.862,-87.828 43.8471,-87.8253 43.8399,-87.8216 43.8327,-87.8178 43.8255,-87.8148 43.8183,-87.8126 43.796,-87.8118 43.7582,-87.8121 43.7203,-87.8133 43.698,-87.8293 43.6411,-87.8528 43.5851,-87.8743 43.5293,-87.8844 43.4729,-87.8864 43.4615,-87.8921 43.4485,-87.9021 43.4375,-87.9169 43.4321,-87.9323 43.431,-87.9476 43.4302,-87.963 43.429,-87.9782 43.4273,-87.9768 43.4123,-87.9743 43.3972,-87.9721 43.3821,-87.9713 43.3672,-87.972 43.3354,-87.9727 43.3037,-87.9734 43.272,-87.9741 43.2402,-87.9697 43.2155,-87.9592 43.1898,-87.9488 43.1636,-87.9444 43.1377,-87.9436 43.1137,-87.9411 43.0895,-87.938 43.0649,-87.9355 43.0401,-87.935 43.0363,-87.9343 43.033,-87.9337 43.0297,-87.9334 43.026,-87.9338 43.0148,-87.9347 43.0051,-87.9354 42.9954,-87.9348 42.9844,-87.9338 42.9794,-87.9323 42.9751,-87.9311 42.9708,-87.9
307 42.9659)
+LINESTRING(-89.2847 43.0992,-89.2458 43.1061,-89.1835 43.1092,-89.1194 43.1103,-89.0753 43.1106,-89.0438 43.1115,-89.0108 43.1125,-88.978 43.1116,-88.9473 43.1069,-88.93 43.1016,-88.9123 43.0952,-88.8945 43.0894,-88.8772 43.0857,-88.8229 43.0835,-88.7623 43.086,-88.7005 43.0894,-88.6426 43.0898,-88.6119 43.0851,-88.5876 43.0766,-88.5638 43.0676,-88.5344 43.0618,-88.5159 43.0616,-88.4972 43.0632,-88.4785 43.0649,-88.4602 43.0647,-88.4519 43.0631,-88.4449 43.0605,-88.4383 43.0576,-88.4311 43.0551,-88.4084 43.0507,-88.3817 43.048,-88.3546 43.0466,-88.3309 43.046,-88.3039 43.047,-88.2755 43.0495,-88.2475 43.0515,-88.2217 43.0509,-88.1794 43.0415,-88.1422 43.0291,-88.0998 43.0219,-88.0417 43.0281)
+LINESTRING(-89.4906 43.4584,-89.4837 43.4436,-89.4761 43.429,-89.469 43.4143,-89.4635 43.3992,-89.4605 43.3819,-89.4589 43.3618,-89.4571 43.3424,-89.4535 43.3273,-89.4423 43.3117,-89.4241 43.2938,-89.4044 43.276,-89.3887 43.2609,-89.379 43.248,-89.3707 43.2341,-89.3629 43.2198,-89.3543 43.2063,-89.3447 43.1947,-89.3338 43.1834,-89.3228 43.1719,-89.3129 43.1598,-89.3042 43.1452,-89.2976 43.13,-89.2917 43.1147,-89.2847 43.0992)
+LINESTRING(-88.0378 42.972,-88.0367 42.9797,-88.0368 42.9862,-88.0379 42.9926,-88.0397 43.0003,-88.0398 43.0021,-88.0392 43.0054,-88.0394 43.0071,-88.0405 43.0096,-88.0418 43.0119,-88.0427 43.0142,-88.0427 43.0168,-88.0427 43.0195,-88.0441 43.0233,-88.0417 43.0281)
+LINESTRING(-87.9307 42.9659,-87.9472 42.9657,-87.9612 42.9651,-87.9752 42.9651,-87.9914 42.9662,-88.0016 42.9678,-88.0105 42.9698,-88.0194 42.9718,-88.0297 42.9734,-88.0319 42.9734,-88.0339 42.973,-88.0358 42.9725,-88.0378 42.972)
+LINESTRING(-112.401 43.2217,-112.41 43.183,-112.422 43.1449,-112.43 43.1074,-112.428 43.0646,-112.427 43.0498,-112.429 43.0302,-112.43 43.0132,-112.431 43.0059,-112.432 42.9819,-112.432 42.9579,-112.433 42.9339,-112.434 42.9099)
+LINESTRING(-114.442 42.6609,-114.473 42.6804,-114.509 42.7039,-114.547 42.7243,-114.591 42.7387,-114.661 42.7573,-114.721 42.7798,-114.77 42.8081,-114.812 42.8437,-114.845 42.8839,-114.874 42.919,-114.912 42.9452,-114.973 42.9585,-115.054 42.9592,-115.131 42.9536,-115.209 42.9484,-115.29 42.9504,-115.337 42.958,-115.382 42.9706,-115.424 42.9875,-115.463 43.0078,-115.508 43.0395,-115.538 43.0733,-115.567 43.1107,-115.608 43.1533,-115.628 43.1686)
+LINESTRING(-74.6491 40.6414,-74.6315 40.6408,-74.6125 40.6425,-74.5935 40.6449,-74.5758 40.6464,-74.5462 40.6467,-74.5161 40.6467,-74.4862 40.6479,-74.457 40.6519,-74.4054 40.6713,-74.3601 40.6963,-74.3111 40.7131,-74.2484 40.7079)
+LINESTRING(-74.4192 40.8642,-74.4484 40.8139,-74.4814 40.7821,-74.5097 40.7634,-74.5249 40.7521,-74.5333 40.7398,-74.547 40.7209,-74.5608 40.7028,-74.5698 40.6932,-74.586 40.6853,-74.6041 40.679,-74.6217 40.6728,-74.6362 40.6653,-74.6419 40.6604,-74.6465 40.6546,-74.6492 40.6481,-74.6491 40.6414)
+LINESTRING(-124.094 40.9198,-124.092 40.9291,-124.089 40.9384,-124.087 40.9477,-124.085 40.957,-124.084 40.9643,-124.082 40.9716,-124.081 40.9789,-124.08 40.9863,-124.077 40.9942,-124.075 41.0021,-124.072 41.01,-124.069 41.018,-124.07 41.0256,-124.072 41.0332,-124.073 41.0408,-124.074 41.0485,-124.077 41.0534,-124.08 41.0584,-124.083 41.0634,-124.085 41.0684,-124.089 41.0711,-124.093 41.0737,-124.097 41.0764,-124.101 41.0791,-124.104 41.0812,-124.108 41.0834,-124.111 41.0855,-124.114 41.0877,-124.116 41.0911,-124.117 41.0946,-124.118 41.098,-124.12 41.1015,-124.119 41.1056,-124.119 41.1097,-124.118 41.1138,-124.117 41.1179,-124.113 41.1218,-124.108 41.1257,-124.104 41.1296,-124.1 41.1335,-124.094 41.1373,-124.088 41.141,-124.083 41.1448,-124.077 41.1486,-124.078 41.154,-124.079 41.1595,-124.079 41.1649,-124.08 41.1704,-124.081 41.1767,-124.081 41.1831,-124.082 41.1894,-124.082 41.1958,-124.079 41.2005,-124.076 41.2053,-124.072 41.2101,-124.069 41.2149)
+LINESTRING(-83.0596 42.3688,-83.0729 42.3649,-83.083 42.3596,-83.0863 42.3495,-83.0979 42.3434,-83.1104 42.3388,-83.1219 42.3351,-83.1324 42.3307,-83.1419 42.324,-83.1495 42.3151,-83.155 42.3061,-83.161 42.2976,-83.1706 42.2901)
+LINESTRING(-74.3047 40.5207,-74.2844 40.5221,-74.2641 40.5236,-74.2488 40.5247)
+LINESTRING(-74.3047 40.5207,-74.3256 40.5656,-74.3297 40.5853,-74.3178 40.6039,-74.2905 40.6454,-74.2818 40.6649,-74.2774 40.6789,-74.269 40.6918,-74.2484 40.7079)
+LINESTRING(-74.3452 40.5271,-74.3351 40.5255,-74.325 40.5239,-74.3149 40.5223,-74.3047 40.5207)
+LINESTRING(-74.3047 40.5207,-74.3039 40.513,-74.3049 40.5062,-74.3054 40.504)
+LINESTRING(-89.2847 43.0992,-89.2893 43.0988,-89.303 43.0989,-89.3163 43.0972,-89.329 43.0922,-89.3379 43.0813,-89.338 43.0684,-89.3372 43.0549,-89.3436 43.0423,-89.3682 43.0318,-89.3984 43.0319,-89.4287 43.0345,-89.4508 43.0316)
+LINESTRING(-74.3452 40.5271,-74.3675 40.5306,-74.4 40.5403,-74.4367 40.5509,-74.4716 40.5571,-74.4846 40.5536,-74.4981 40.5457,-74.5138 40.5397,-74.5333 40.5421,-74.5549 40.5612,-74.558 40.5716,-74.5681 40.5786,-74.6108 40.587,-74.6225 40.5965,-74.6345 40.6119,-74.6443 40.6284,-74.6491 40.6414)
+LINESTRING(-80.5191 41.9124,-80.5359 41.9028,-80.568 41.8905,-80.5971 41.8812,-80.6299 41.866,-80.6578 41.8508,-80.6868 41.8382,-80.7193 41.8289,-80.7581 41.8236)
+LINESTRING(-74.3054 40.504,-74.3065 40.4996,-74.3078 40.4926,-74.3041 40.4752,-74.2919 40.4649,-74.2918 40.4648)
+LINESTRING(-77.0787 41.298,-77.0674 41.2774,-77.0605 41.2697,-77.0497 41.2651,-77.0341 41.264,-77.0201 41.2667,-77.0061 41.271,-76.9906 41.2748,-76.9641 41.2795,-76.9397 41.2827,-76.9153 41.2831,-76.8884 41.2794,-76.8281 41.2663,-76.7978 41.2547,-76.7764 41.2361,-76.7659 41.213,-76.7683 41.1881,-76.7782 41.1717,-76.8043 41.1455,-76.8141 41.1291,-76.822 41.109,-76.829 41.0913,-76.8354 41.0735,-76.8409 41.051)
+LINESTRING(-75.2104 40.6668,-75.1983 40.6721,-75.1867 40.6723,-75.1788 40.6686,-75.1718 40.6643,-75.1629 40.6629,-75.1561 40.6653,-75.1497 40.6673,-75.1429 40.6687,-75.1351 40.6694,-75.1202 40.6605,-75.0972 40.6582,-75.073 40.6597,-75.0544 40.662,-75.0404 40.6582,-75.0143 40.6487,-74.9875 40.6387,-74.9712 40.6329,-74.954 40.6339,-74.9376 40.633,-74.9217 40.632,-74.9058 40.6327,-74.8702 40.6401,-74.8509 40.647,-74.822 40.651,-74.7575 40.6498,-74.7304 40.6477,-74.7036 40.6447,-74.6766 40.6423,-74.6491 40.6414)
+LINESTRING(-83.7565 42.5249,-83.7575 42.5218,-83.7585 42.5186,-83.7594 42.5155,-83.7604 42.5123,-83.7613 42.5091,-83.7623 42.5059,-83.762 42.5026,-83.7617 42.4993,-83.7601 42.4863,-83.7579 42.4732,-83.756 42.46,-83.7553 42.4472,-83.7567 42.4352,-83.7596 42.4239,-83.7622 42.4123,-83.7627 42.4001,-83.7582 42.3787,-83.7507 42.3573,-83.7438 42.3358,-83.7413 42.3142,-83.7413 42.3098,-83.7419 42.3058,-83.7441 42.3025,-83.7493 42.2998,-83.7567 42.3016,-83.764 42.3037,-83.7711 42.306,-83.7781 42.3086,-83.7798 42.3084,-83.7815 42.3082,-83.7833 42.308,-83.785 42.3078,-83.7912 42.3031,-83.7967 42.2983,-83.8019 42.2933,-83.8068 42.2878)
+LINESTRING(-76.0142 41.045,-76.0489 41.0373,-76.0843 41.0266,-76.1177 41.0162,-76.1465 41.0092,-76.1569 41.0097,-76.1696 41.0126,-76.183 41.0159,-76.1957 41.0175,-76.21 41.016,-76.2213 41.0123,-76.2313 41.0083,-76.2422 41.0057,-76.2628 41.0078,-76.2897 41.0152,-76.316 41.0248,-76.3343 41.0338,-76.3537 41.0385,-76.3776 41.0357,-76.4023 41.03,-76.4239 41.026,-76.4288 41.0264,-76.451 41.0268,-76.4657 41.0241,-76.4789 41.0199,-76.4966 41.0157,-76.5151 41.0132,-76.5337 41.0118,-76.5524 41.0107,-76.5709 41.0094,-76.5876 41.0072,-76.6045 41.0039,-76.6214 41.0003,-76.638 40.9972,-76.6846 40.9906,-76.7198 40.99,-76.7517 40.9986,-76.7882 41.0194,-76.7993 41.0295,-76.8081 41.0394,-76.8201 41.0472,-76.8409 41.051)
+LINESTRING(-83.6852 42.227,-83.6769 42.2267,-83.6688 42.226,-83.6606 42.2253,-83.6525 42.2245,-83.6372 42.2254,-83.6215 42.2285,-83.6059 42.2318,-83.5908 42.2331,-83.5842 42.2325,-83.5777 42.2312,-83.5714 42.2296,-83.5649 42.2285,-83.5213 42.2248,-83.4721 42.2244,-83.4231 42.2272,-83.38 42.2337,-83.3549 42.2409,-83.3308 42.25,-83.3069 42.2588,-83.2824 42.2654,-83.2651 42.2667,-83.2468 42.2661,-83.229 42.2665,-83.2134 42.2705,-83.2018 42.2749,-83.19 42.2786,-83.1791 42.2832,-83.1706 42.2901)
+LINESTRING(-83.8068 42.2878,-83.8041 42.2784,-83.8013 42.269,-83.7985 42.2596,-83.7958 42.2502,-83.7876 42.246,-83.7739 42.2422,-83.7597 42.2389,-83.75 42.2357,-83.7343 42.2352,-83.7163 42.2343,-83.699 42.2319,-83.6852 42.227)
+LINESTRING(-84.4342 42.277,-84.4068 42.2771,-84.3793 42.2771,-84.3519 42.2771,-84.3245 42.2771,-84.3041 42.2793,-84.2831 42.284,-84.2618 42.2892,-84.2402 42.2924,-84.2306 42.2924,-84.2212 42.2915,-84.212 42.2906,-84.2031 42.2904,-84.1795 42.2929,-84.1556 42.2962,-84.1317 42.2986,-84.1079 42.2983,-84.0996 42.297,-84.0909 42.2954,-84.0823 42.2939,-84.074 42.2931,-84.0624 42.2934,-84.0505 42.2946,-84.0384 42.2961,-84.0267 42.2972,-83.9913 42.2985,-83.9422 42.2997,-83.8945 42.3003,-83.8635 42.2999,-83.8524 42.298,-83.8371 42.2944,-83.8208 42.2905,-83.8068 42.2878)
+LINESTRING(-84.4921 42.6775,-84.4895 42.6754,-84.4869 42.6733,-84.4844 42.6712,-84.4818 42.6691,-84.4788 42.6555,-84.4779 42.6419,-84.4773 42.6282,-84.4753 42.6145,-84.4698 42.5987,-84.4625 42.5834,-84.455 42.5683,-84.4491 42.5527,-84.4452 42.5258,-84.4449 42.4921,-84.4467 42.4585,-84.4489 42.4318,-84.4457 42.4297,-84.4425 42.4276,-84.4393 42.4255,-84.4361 42.4234,-84.4303 42.3962,-84.4306 42.3533,-84.4333 42.3089,-84.4342 42.277)
+LINESTRING(-112.434 42.9099,-112.457 42.9131,-112.475 42.9127,-112.492 42.9119,-112.509 42.9109,-112.564 42.8995,-112.61 42.8882,-112.659 42.867,-112.724 42.8258,-112.729 42.8212,-112.74 42.8153,-112.751 42.8094,-112.756 42.8047,-112.763 42.799,-112.772 42.7939,-112.781 42.789,-112.789 42.7838,-112.807 42.7701,-112.826 42.7554,-112.861 42.7261,-112.899 42.695,-112.944 42.659,-112.992 42.6256,-113.038 42.6023,-113.125 42.585,-113.265 42.5669,-113.405 42.5518,-113.492 42.5377)
+LINESTRING(-113.492 42.5377,-113.555 42.5452,-113.654 42.562,-113.751 42.5795,-113.805 42.5892,-113.816 42.5895,-113.836 42.5896,-113.851 42.5896,-113.866 42.5896,-113.918 42.5878,-113.967 42.5838,-114.016 42.5797,-114.069 42.5775,-114.122 42.581,-114.172 42.5896,-114.222 42.5992,-114.275 42.6055,-114.316 42.6218,-114.349 42.6325,-114.385 42.6425,-114.436 42.6568,-114.442 42.6609)
+LINESTRING(-84.5032 42.7277,-84.544 42.7298,-84.5861 42.7284,-84.6283 42.7259,-84.6692 42.7251,-84.6693 42.7178,-84.6693 42.7105,-84.6693 42.7033,-84.6694 42.696,-84.6711 42.6862,-84.6752 42.6798,-84.6805 42.6741,-84.6858 42.6662,-84.7069 42.6353,-84.7363 42.6107,-84.7733 42.5917,-84.817 42.578,-84.8208 42.5753,-84.8197 42.5439,-84.8237 42.5257,-84.8371 42.5111,-84.8647 42.4904,-84.8732 42.4837,-84.8821 42.4764,-84.8913 42.4694,-84.9006 42.4636,-84.9125 42.4611,-84.9208 42.4644,-84.9288 42.4659,-84.9398 42.4581,-84.9474 42.4459,-84.9473 42.4365,-84.9441 42.4277,-84.9426 42.4177,-84.9456 42.4077,-84.9514 42.3977,-84.9576 42.3878,-84.9615 42.3779,-84.9641 42.3621,-84.966 42.3462,-84.9678 42.3303,-84.9704 42.3144)
+LINESTRING(-75.6944 41.0667,-75.6846 41.0583,-75.6748 41.0499,-75.6649 41.0415,-75.6551 41.033,-75.6385 41.013,-75.631 40.9909,-75.6307 40.9679,-75.6361 40.9452,-75.6394 40.9382,-75.644 40.9313,-75.6483 40.9244,-75.6512 40.9177,-75.6517 40.9095,-75.6506 40.9018,-75.6502 40.8943,-75.6528 40.8869,-75.6608 40.8737,-75.6632 40.8652,-75.6628 40.8564,-75.6619 40.8421,-75.677 40.8216,-75.6768 40.8033,-75.6661 40.7845,-75.65 40.7625,-75.6437 40.7521,-75.6389 40.7417,-75.6345 40.7313,-75.6292 40.7209,-75.6221 40.712,-75.6134 40.7041,-75.6049 40.6957,-75.598 40.6855,-75.5877 40.6607,-75.5773 40.6325,-75.5671 40.6044,-75.5573 40.5797)
+LINESTRING(-84.9704 42.3144,-84.9449 42.3108,-84.9235 42.305,-84.9019 42.2997,-84.876 42.2974,-84.8588 42.2972,-84.8406 42.2963,-84.8226 42.2951,-84.8057 42.2938,-84.7835 42.2881,-84.766 42.2789,-84.7434 42.2707,-84.7061 42.2679,-84.648 42.2697,-84.59 42.2715,-84.532 42.2732,-84.474 42.2749,-84.4639 42.275,-84.454 42.275,-84.4442 42.2755,-84.4342 42.277)
+LINESTRING(-75.5573 40.5797,-75.555 40.5765)
+LINESTRING(-75.5573 40.5797,-75.5517 40.5775,-75.5455 40.5739,-75.5389 40.5702,-75.5316 40.5675,-75.5094 40.5641,-75.4858 40.5625,-75.4617 40.561,-75.4381 40.5578,-75.4273 40.5585,-75.415 40.5626,-75.4025 40.5677,-75.3911 40.5711,-75.3758 40.5842,-75.3556 40.5911,-75.3342 40.596,-75.3156 40.603,-75.2908 40.619,-75.2571 40.6408,-75.2234 40.661,-75.2104 40.6668)
+LINESTRING(-112.201 42.6298,-112.209 42.6546,-112.217 42.6874,-112.225 42.7202,-112.229 42.7453,-112.23 42.7623,-112.229 42.7735,-112.232 42.784,-112.246 42.7988,-112.288 42.8047,-112.339 42.8068,-112.385 42.8157,-112.412 42.842,-112.418 42.8591,-112.423 42.8761,-112.429 42.893,-112.434 42.9099)
+LINESTRING(-74.2918 40.4648,-74.2769 40.4554,-74.2651 40.4403,-74.204 40.4073,-74.1419 40.3671,-74.0952 40.3193,-74.0801 40.2634,-74.0863 40.2407,-74.0959 40.2196,-74.103 40.1971,-74.1017 40.1701)
+LINESTRING(-76.8409 41.051,-76.851 41.052,-76.8612 41.0526,-76.8715 41.053,-76.8817 41.0535,-76.8911 41.0592,-76.9005 41.0649,-76.9099 41.0706,-76.9193 41.0764,-76.9468 41.0804,-76.9908 41.0777,-77.0365 41.0721,-77.0686 41.0674,-77.0809 41.0615,-77.1003 41.0507,-77.1214 41.0423,-77.1388 41.0436,-77.1545 41.0509,-77.181 41.0577,-77.2079 41.0625,-77.2246 41.0638,-77.2438 41.0615,-77.263 41.0593,-77.2822 41.0571,-77.3014 41.0548,-77.3097 41.0541,-77.3181 41.0535,-77.3266 41.0529,-77.335 41.0522,-77.3418 41.0526,-77.3485 41.0547,-77.3548 41.0577,-77.3605 41.0604,-77.3674 41.0615,-77.3763 41.0612,-77.3855 41.0606,-77.3934 41.0608,-77.3985 41.0626,-77.4025 41.0653,-77.4064 41.0683,-77.4111 41.0707,-77.4219 41.0698,-77.4336 41.0631,-77.4448 41.0543,-77.4538 41.0473,-77.4811 41.0385,-77.5133 41.0325,-77.546 41.0262,-77.575 41.0169,-77.5928 41.0063,-77.6095 40.9931,-77.6258 40.9795,-77.6424 40.9673,-77.6611 40.9638,-77.6786 40.9578,-77.6958 40.9509,-77.7136 40.945,-77.7289 40.9483,-77.7435 40.9519,-77.7582 40.9546,-
77.7738 40.9549)
+LINESTRING(-85.6376 42.2366,-85.6218 42.237,-85.606 42.2375,-85.5902 42.238,-85.5743 42.2384,-85.5313 42.2409,-85.5022 42.2422,-85.4737 42.244,-85.4322 42.2483,-85.4119 42.2525,-85.3939 42.2584,-85.3755 42.2631,-85.3546 42.264,-85.3173 42.2623,-85.2795 42.2628,-85.2415 42.2645,-85.2033 42.2666,-85.1748 42.2715,-85.1461 42.2809,-85.117 42.2905,-85.0874 42.2963,-85.0584 42.3001,-85.0201 42.3064,-84.9862 42.3121,-84.9704 42.3144)
+LINESTRING(-85.6785 42.9709,-85.6785 42.9584,-85.6809 42.9471,-85.6838 42.9359,-85.6853 42.9241,-85.6854 42.9068,-85.6852 42.8888,-85.6844 42.8709,-85.683 42.8536,-85.6797 42.836,-85.6751 42.8173,-85.6715 42.7987,-85.6714 42.7812,-85.674 42.7688,-85.6772 42.7559,-85.6792 42.7429,-85.6782 42.7304,-85.6762 42.7256,-85.6731 42.7208,-85.67 42.716,-85.6678 42.7112,-85.6624 42.6735,-85.6614 42.6283,-85.6625 42.5821,-85.663 42.5416,-85.6627 42.5394,-85.6625 42.5371,-85.6575 42.4983,-85.6596 42.4732,-85.6636 42.4514,-85.6645 42.4226,-85.6628 42.4111,-85.6602 42.3996,-85.6576 42.388,-85.6563 42.3766,-85.6584 42.3562,-85.6633 42.3362,-85.6671 42.316,-85.666 42.2954,-85.6607 42.2798,-85.6534 42.2654,-85.6453 42.2513,-85.6376 42.2366)
+LINESTRING(-74.3452 40.5271,-74.4324 40.4431,-74.4661 40.3633,-74.5045 40.2817,-74.6054 40.1925)
+LINESTRING(-74.1017 40.1701,-74.1494 40.1709,-74.2354 40.1637,-74.3298 40.1571,-74.4026 40.1598,-74.4059 40.1589,-74.4092 40.158,-74.4125 40.1571,-74.4158 40.1562,-74.4383 40.1624,-74.4648 40.1729,-74.4967 40.1797,-74.5356 40.1744,-74.5532 40.1774,-74.5714 40.1813,-74.5892 40.1863,-74.6054 40.1925)
+LINESTRING(-78.4271 41.0497,-78.4144 41.0435,-78.4025 41.0406,-78.3899 41.0385,-78.3788 41.0349,-78.3716 41.0271,-78.3467 41.0196,-78.319 41.0191,-78.2917 41.0148,-78.2677 40.9964,-78.2597 40.9933,-78.2468 40.9936,-78.2325 40.995,-78.2208 40.9949,-78.2133 40.993,-78.2061 40.9906,-78.1988 40.9881,-78.1915 40.986,-78.1763 40.9838,-78.1607 40.9833,-78.1445 40.9825,-78.1275 40.9795,-78.1217 40.976,-78.1167 40.9707,-78.1116 40.9654,-78.1055 40.9624,-78.0998 40.9628,-78.0925 40.9649,-78.0853 40.9676,-78.08 40.9697,-78.0652 40.9735,-78.0529 40.9752,-78.0416 40.9788,-78.0302 40.9881,-78.0063 40.9936,-77.9903 40.9978,-77.9776 41.005,-77.9635 41.0192,-77.9584 41.0214,-77.9015 41.0201,-77.8729 41.0109,-77.858 41.0003,-77.844 40.9942,-77.8191 40.9899,-77.8008 40.9827,-77.7866 40.9714,-77.7738 40.9549)
+LINESTRING(-87.9435 42.497,-87.9525 42.5393,-87.9561 42.6065,-87.9551 42.6745,-87.9524 42.7306,-87.9525 42.7562,-87.9538 42.7824,-87.9543 42.8086,-87.952 42.8338,-87.9486 42.8421,-87.9429 42.8504,-87.9373 42.8587,-87.9344 42.8672,-87.9332 42.8921,-87.9335 42.9166,-87.9333 42.9412,-87.9307 42.9659)
+LINESTRING(-88.0378 42.972,-88.053 42.9662,-88.0671 42.9646,-88.0827 42.9647,-88.1025 42.9637,-88.1536 42.9357,-88.2102 42.9116,-88.2668 42.8872,-88.3185 42.8581,-88.3333 42.8472,-88.3491 42.8344,-88.3638 42.8209,-88.3755 42.8081,-88.3827 42.7923,-88.385 42.7792,-88.3945 42.7685,-88.4232 42.7599,-88.444 42.7365,-88.4681 42.7137,-88.4932 42.6913,-88.5168 42.6688,-88.5411 42.6525,-88.5778 42.6361,-88.6167 42.6233,-88.6478 42.6179,-88.6602 42.6186,-88.6738 42.6204,-88.6872 42.6216,-88.6988 42.621,-88.7087 42.6174,-88.7174 42.6122,-88.726 42.6067,-88.7358 42.6025,-88.7747 42.5937,-88.8143 42.5869,-88.853 42.5795,-88.8893 42.5684,-88.9099 42.56,-88.9306 42.5517,-88.9512 42.5434,-88.9718 42.5351)
+LINESTRING(-89.2847 43.0992,-89.2578 43.0262,-89.2081 42.999,-89.1551 42.9933,-89.118 42.9843,-89.1065 42.9719,-89.0981 42.9576,-89.0916 42.9427,-89.0858 42.9283,-89.0765 42.9094,-89.0666 42.8938,-89.0556 42.8788,-89.043 42.8617,-89.0284 42.8363,-89.0172 42.8081,-89.0088 42.7795,-89.0026 42.7529,-88.9963 42.7351,-88.9891 42.724,-88.983 42.7096,-88.98 42.6824,-88.9816 42.647,-88.9844 42.6078,-88.9829 42.569,-88.9718 42.5351)
+LINESTRING(-85.6376 42.2366,-85.6401 42.2147,-85.6429 42.1927,-85.6463 42.1708,-85.6504 42.1493)
+LINESTRING(-88.9718 42.5351,-88.9862 42.4991,-88.9862 42.4988)
+LINESTRING(-74.7333 40.0957,-74.702 40.121,-74.673 40.1465,-74.6423 40.1708,-74.6054 40.1925)
+LINESTRING(-74.8261 40.1154,-74.8122 40.1108,-74.789 40.103,-74.7647 40.0976,-74.7333 40.0957)
+LINESTRING(-106.336 42.8475,-106.337 42.8514,-106.339 42.8568,-106.341 42.8622,-106.342 42.8661,-106.34 42.902,-106.336 42.9381,-106.332 42.9742,-106.332 43.0103,-106.337 43.0679,-106.338 43.116,-106.332 43.1638,-106.313 43.2202,-106.313 43.2234,-106.314 43.2266,-106.314 43.2297,-106.314 43.2329,-106.34 43.2848,-106.364 43.3401,-106.381 43.3965,-106.387 43.4518,-106.39 43.4528,-106.394 43.4537,-106.403 43.4677,-106.414 43.4747,-106.427 43.4794,-106.442 43.4866,-106.451 43.4986,-106.465 43.5217,-106.48 43.5466,-106.494 43.5641,-106.506 43.5754,-106.52 43.586,-106.533 43.5964,-106.546 43.6071,-106.55 43.6107,-106.554 43.6158,-106.559 43.6207,-106.562 43.6236,-106.584 43.6345,-106.606 43.644,-106.626 43.6548,-106.644 43.67,-106.645 43.6796,-106.646 43.6946,-106.644 43.7087,-106.64 43.716,-106.633 43.7406,-106.626 43.7653,-106.62 43.7899,-106.613 43.8145,-106.618 43.8467,-106.629 43.882,-106.641 43.9198,-106.649 43.9593,-106.648 44.0011,-106.642 44.0425,-106.636 44.084,-106.636 44.1259,-106.643 44.1498,-106.657
44.177,-106.672 44.205,-106.682 44.2317,-106.683 44.2559,-106.684 44.2948,-106.685 44.3372,-106.687 44.3721)
+LINESTRING(-86.3219 42.1628,-86.3157 42.1694,-86.3057 42.1762,-86.2915 42.1771,-86.277 42.1773,-86.2624 42.1777,-86.2481 42.1792,-86.2085 42.1859,-86.1695 42.1914,-86.1302 42.1954,-86.0895 42.1975,-86.065 42.1965,-86.0414 42.1935,-86.0183 42.1904,-85.9954 42.1889,-85.9885 42.1901,-85.9817 42.1927,-85.9752 42.1956,-85.9687 42.1975,-85.9475 42.1999,-85.9268 42.2014,-85.9061 42.2033,-85.8848 42.2067,-85.8786 42.2085,-85.8729 42.2107,-85.8673 42.213,-85.8615 42.2152,-85.8376 42.219,-85.8003 42.2225,-85.7633 42.2252,-85.7399 42.2268,-85.7362 42.2289,-85.7324 42.231,-85.7287 42.2332,-85.725 42.2353,-85.7031 42.2353,-85.6812 42.2354,-85.6594 42.2357,-85.6376 42.2366)
+LINESTRING(-85.6785 42.9709,-85.6862 42.9712,-85.6951 42.9696,-85.7035 42.9668,-85.7099 42.9638,-85.7087 42.9594,-85.7078 42.9535,-85.7079 42.9478,-85.7095 42.9438,-85.7277 42.9342,-85.746 42.9246,-85.7639 42.9146,-85.7819 42.9046,-85.7812 42.9001,-85.7806 42.8956,-85.7804 42.891,-85.7802 42.8864,-85.8433 42.856,-85.9141 42.8325,-85.9857 42.8071,-86.0511 42.7713,-86.0499 42.7674,-86.0487 42.7635,-86.0609 42.7444,-86.0796 42.7321,-86.102 42.7252,-86.1252 42.7227,-86.1375 42.7115,-86.1448 42.6949,-86.1463 42.6763,-86.1413 42.659,-86.144 42.6532,-86.1483 42.6453,-86.1525 42.6373,-86.1544 42.6315,-86.1583 42.6242,-86.1593 42.6156,-86.1599 42.6067,-86.1622 42.5988,-86.1631 42.5685,-86.1655 42.53,-86.1695 42.4938,-86.1751 42.4702,-86.1818 42.4573,-86.1897 42.4444,-86.1979 42.4315,-86.2057 42.4189,-86.2062 42.4177,-86.2063 42.4162,-86.2063 42.4148,-86.2064 42.4135,-86.2076 42.4019,-86.2093 42.3906,-86.2117 42.3793,-86.2153 42.368,-86.2214 42.3577,-86.2297 42.3489,-86.2385 42.3405,-86.2458 42.3313,-86.2486 42.3253,
-86.2506 42.3191,-86.2523 42.3129,-86.2546 42.3068,-86.2565 42.2964,-86.2552 42.286,-86.2539 42.2757,-86.2562 42.2655,-86.259 42.2595,-86.2619 42.2535,-86.2653 42.2465,-86.2674 42.2427,-86.2745 42.236,-86.2817 42.2303,-86.2884 42.2242,-86.2942 42.2164,-86.311 42.187,-86.3198 42.1699,-86.3219 42.1628)
+LINESTRING(-80.1591 41.1998,-80.1411 41.1973,-80.1227 41.1977,-80.1044 41.1997,-80.0865 41.2022,-80.0451 41.2017,-80.0037 41.2013,-79.9624 41.2009,-79.921 41.2004,-79.9099 41.1964,-79.8994 41.1907,-79.8877 41.1856,-79.8734 41.1836,-79.8641 41.1862,-79.8535 41.1911,-79.8402 41.1949,-79.8224 41.1941,-79.7999 41.1882,-79.7663 41.1789,-79.7342 41.1705,-79.7166 41.1674,-79.7101 41.1695,-79.7048 41.1728,-79.6997 41.1764,-79.6937 41.1791,-79.6802 41.1826,-79.6666 41.1859,-79.6529 41.1892,-79.6392 41.1932,-79.6343 41.1929,-79.6273 41.1909,-79.6203 41.1884,-79.6152 41.1868,-79.6064 41.1865,-79.5965 41.1882,-79.5868 41.19,-79.5787 41.1901,-79.5714 41.1882,-79.5639 41.1858,-79.5562 41.1836,-79.5485 41.1824,-79.5256 41.1854,-79.5056 41.1929,-79.4743 41.1966,-79.4174 41.1882,-79.4129 41.1876,-79.4067 41.1872,-79.4008 41.1867,-79.3972 41.1861,-79.3925 41.184,-79.3877 41.1819,-79.3829 41.1799,-79.3781 41.1778,-79.3495 41.1785,-79.3249 41.1752,-79.3031 41.1711,-79.2827 41.1696,-79.2677 41.1728,-79.2517 41.179,-79.2374 41.1
851,-79.2276 41.1881,-79.2219 41.1878,-79.2164 41.1867,-79.211 41.1853,-79.2055 41.1843,-79.1936 41.1836,-79.1814 41.1839,-79.1693 41.184,-79.1579 41.1826,-79.1437 41.179,-79.1287 41.175,-79.1138 41.1714,-79.0995 41.1688,-79.0789 41.1672,-79.0594 41.1665,-79.0397 41.1651,-79.0188 41.1612,-79.0133 41.1547,-79.0061 41.1474,-78.998 41.1408,-78.9896 41.1366,-78.98 41.1366,-78.9674 41.1356,-78.9547 41.1338,-78.945 41.1317,-78.925 41.1365,-78.8835 41.1428,-78.8402 41.1483,-78.8154 41.1503,-78.7987 41.149,-78.7819 41.1477,-78.7624 41.1459,-78.7512 41.1446,-78.733 41.1394,-78.7157 41.1328,-78.6982 41.1263,-78.6795 41.1212,-78.641 41.1197,-78.6015 41.1232,-78.5641 41.1218,-78.5323 41.1057,-78.5216 41.0965,-78.5104 41.0881,-78.4985 41.0801,-78.4861 41.0721,-78.4824 41.0709,-78.4767 41.07,-78.4707 41.0693,-78.4665 41.0686,-78.4521 41.0634,-78.4393 41.0567,-78.4271 41.0497)
+LINESTRING(-80.1234 42.0311,-80.1295 42.0197,-80.1398 42.0109,-80.1521 42.003,-80.1641 41.9948,-80.1659 41.9831,-80.1709 41.9627,-80.1755 41.9454,-80.18 41.9282,-80.1871 41.9018,-80.194 41.8754,-80.1997 41.8485,-80.2033 41.821,-80.2091 41.797,-80.2193 41.7734,-80.2297 41.7503,-80.2357 41.7281,-80.2365 41.714,-80.2365 41.6992,-80.2362 41.6846,-80.2359 41.6699,-80.2278 41.6418,-80.2128 41.6275,-80.2046 41.6106,-80.2168 41.575,-80.2168 41.5659,-80.2167 41.5568,-80.2167 41.5477,-80.2166 41.5386,-80.2129 41.5346,-80.2098 41.5308,-80.2074 41.5268,-80.2062 41.5221,-80.2016 41.4976,-80.1958 41.4748,-80.1927 41.4521,-80.1964 41.4278,-80.1971 41.422,-80.196 41.416,-80.1942 41.41,-80.1925 41.4043,-80.1839 41.3556,-80.1778 41.3027,-80.1706 41.2495,-80.1591 41.1998)
+LINESTRING(-80.7581 41.8236,-80.7762 41.8184,-80.7918 41.8111,-80.8067 41.8027,-80.8229 41.7945,-80.8664 41.7777,-80.9189 41.7627,-80.973 41.7528,-81.0215 41.7512,-81.057 41.7356,-81.0922 41.7195,-81.1267 41.7027,-81.16 41.6846,-81.1764 41.6748,-81.1932 41.665,-81.2106 41.6558,-81.2289 41.648,-81.2646 41.641,-81.3046 41.6392,-81.341 41.6378,-81.3656 41.6321,-81.3823 41.6221,-81.3988 41.612,-81.4148 41.6015,-81.4301 41.5904,-81.4318 41.5708,-81.4334 41.5512,-81.4348 41.5315,-81.4356 41.5119,-81.4433 41.5037,-81.4542 41.4971,-81.4649 41.4913,-81.4721 41.4854,-81.4815 41.4705,-81.4916 41.4521,-81.5011 41.433,-81.5086 41.4162)
+LINESTRING(-86.3527 42.1306,-86.3429 42.14,-86.3293 42.1551,-86.3219 42.1628)
+LINESTRING(-83.1706 42.2901,-83.2553 42.1924,-83.2459 42.1265,-83.3644 42.0053,-83.3767 41.9346,-83.4959 41.797,-83.5111 41.7667,-83.5093 41.7321)
+LINESTRING(-75.555 40.5765,-75.5707 40.5743,-75.5885 40.576,-75.6067 40.5783,-75.6239 40.578,-75.6504 40.5755,-75.6771 40.5764,-75.7037 40.5787,-75.7304 40.5809,-75.7486 40.5805,-75.7659 40.5784,-75.7829 40.5762,-75.8001 40.5755,-75.8122 40.5766,-75.8239 40.5787,-75.8354 40.5808,-75.8472 40.582,-75.8698 40.5822,-75.8926 40.5815,-75.9153 40.5805,-75.938 40.5795,-75.947 40.5781,-75.9565 40.575,-75.9656 40.5714,-75.9738 40.568,-76.0247 40.549,-76.0762 40.5318,-76.1282 40.5156,-76.181 40.4997,-76.2082 40.4927,-76.2369 40.487,-76.2658 40.4819,-76.2938 40.4768,-76.3149 40.4719,-76.3355 40.466,-76.3558 40.4596,-76.3764 40.4535,-76.4122 40.4502,-76.4414 40.4454,-76.4692 40.4385,-76.5006 40.4292,-76.5094 40.4267,-76.5181 40.4243)
+LINESTRING(-76.0142 41.045,-76.014 41.0351,-76.0118 41.0253,-76.0083 41.0157,-76.0041 41.0063,-76.008 41.0019,-76.0156 40.9971,-76.0239 40.9928,-76.03 40.9898,-76.0327 40.9757,-76.0277 40.9581,-76.0193 40.9404,-76.0119 40.9261,-76.0144 40.9204,-76.0202 40.913,-76.0257 40.9069,-76.0312 40.9009,-76.0306 40.8966,-76.0284 40.8927,-76.0243 40.8906,-76.0203 40.8885,-76.0162 40.8864,-76.0121 40.8843,-76.0437 40.8593,-76.0731 40.8326,-76.1048 40.808,-76.1434 40.7892,-76.1781 40.7815,-76.2178 40.7761,-76.2554 40.7696,-76.2836 40.7584,-76.2911 40.7523,-76.2982 40.7458,-76.3055 40.7393,-76.3137 40.7337,-76.324 40.7287,-76.3349 40.724,-76.3456 40.7191,-76.3551 40.7134,-76.3592 40.7104,-76.3633 40.7074,-76.3843 40.6798,-76.3886 40.6673,-76.3999 40.6575,-76.4419 40.6378,-76.4439 40.6356,-76.4449 40.632,-76.4453 40.6282,-76.4451 40.6256,-76.4394 40.6193,-76.4318 40.6126,-76.425 40.6061,-76.4219 40.6004,-76.4143 40.5955,-76.4089 40.5876,-76.4073 40.5791,-76.4108 40.5722,-76.4265 40.5618,-76.4302 40.5495,-76.4312 40.5357,-7
6.4382 40.5207,-76.4493 40.5166,-76.4702 40.5114,-76.4945 40.5012,-76.5161 40.4819,-76.5227 40.4666,-76.5219 40.4528,-76.5187 40.4392,-76.5181 40.4243)
+LINESTRING(-83.6835 41.7259,-83.6847 41.7341,-83.69 41.7583,-83.6915 41.7811,-83.6884 41.8038,-83.6797 41.8276,-83.6747 41.8358,-83.6682 41.8452,-83.6626 41.8547,-83.6604 41.8635,-83.6619 41.8836,-83.6638 41.9045,-83.665 41.9252,-83.6639 41.9453,-83.6706 41.9528,-83.6756 41.9606,-83.6788 41.9689,-83.6798 41.9779,-83.6786 42.0046,-83.6766 42.0311,-83.6753 42.0575,-83.6762 42.0842,-83.6806 42.1187,-83.6859 42.1559,-83.6886 42.193,-83.6852 42.227)
+LINESTRING(-75.2771 40.111,-75.2662 40.1159,-75.2553 40.1203,-75.244 40.1242,-75.2321 40.1275,-75.1864 40.1429,-75.1451 40.1598,-75.1022 40.1705,-75.0515 40.1672,-75.0297 40.1601,-75.0115 40.1511,-74.9941 40.1415,-74.975 40.133,-74.9511 40.1296,-74.9171 40.1289,-74.8786 40.1271,-74.8407 40.1203,-74.8261 40.1154)
+LINESTRING(-75.555 40.5765,-75.5431 40.5597,-75.5273 40.5374,-75.5102 40.5158,-75.4918 40.4979,-75.4667 40.4879,-75.4495 40.4725,-75.4365 40.4538,-75.4241 40.4338,-75.4196 40.4235,-75.4175 40.4127,-75.4157 40.4018,-75.4121 40.3914,-75.3902 40.3477,-75.3706 40.3037,-75.3519 40.2594,-75.3329 40.215,-75.3187 40.189,-75.3021 40.1636,-75.287 40.1379,-75.2771 40.111)
+LINESTRING(-80.5185 41.1786,-80.4787 41.1797,-80.4385 41.1833,-80.3983 41.1875,-80.3585 41.1905,-80.3453 41.1898,-80.3326 41.1877,-80.3197 41.1857,-80.3063 41.1853,-80.289 41.1872,-80.2723 41.1901,-80.2558 41.1932,-80.239 41.1958,-80.2191 41.197,-80.1989 41.1972,-80.1787 41.1976,-80.1591 41.1998)
+LINESTRING(-122.275 40.6294,-122.297 40.6243,-122.319 40.6193,-122.34 40.6143,-122.362 40.6093)
+LINESTRING(-122.362 40.6093,-122.363 40.6162,-122.364 40.6231,-122.365 40.63,-122.367 40.6369,-122.363 40.6439,-122.36 40.6508,-122.357 40.6578,-122.354 40.6648,-122.351 40.6714,-122.348 40.678,-122.345 40.6846,-122.342 40.6912,-122.343 40.6964,-122.342 40.7045,-122.341 40.7127,-122.339 40.7208,-122.338 40.729,-122.336 40.738,-122.335 40.7469,-122.334 40.7559,-122.332 40.7648,-122.332 40.7713,-122.331 40.7777,-122.331 40.7841,-122.33 40.7905,-122.328 40.7957,-122.325 40.801,-122.323 40.8062,-122.321 40.8114,-122.318 40.8177,-122.315 40.8241,-122.313 40.8304,-122.31 40.8368,-122.308 40.84,-122.307 40.8432,-122.305 40.8465,-122.303 40.8497,-122.303 40.8551,-122.302 40.8605,-122.302 40.8658,-122.301 40.8712,-122.304 40.8778,-122.308 40.8845,-122.311 40.8911,-122.315 40.8977,-122.32 40.9019,-122.325 40.9061,-122.33 40.9103,-122.335 40.9145,-122.339 40.9149,-122.344 40.9153,-122.348 40.9157,-122.353 40.9161,-122.357 40.9158,-122.361 40.9154,-122.365 40.9151,-122.369 40.9147,-122.378 40.9131,-122.387 40.9115,-122
.396 40.9098,-122.405 40.9082,-122.409 40.9074,-122.416 40.9091,-122.423 40.9108,-122.427 40.911,-122.432 40.9111,-122.436 40.9117,-122.441 40.9124,-122.445 40.914,-122.45 40.9156,-122.454 40.9185,-122.458 40.9213,-122.461 40.9238,-122.464 40.9263,-122.465 40.9296,-122.466 40.9328,-122.467 40.9361,-122.467 40.9393,-122.465 40.9428,-122.462 40.9462,-122.459 40.9497,-122.457 40.9531,-122.452 40.9558,-122.448 40.9585,-122.443 40.9611,-122.439 40.9638,-122.435 40.9664,-122.43 40.969,-122.426 40.9716,-122.422 40.9741,-122.407 40.9817,-122.392 40.9892,-122.378 40.9968,-122.363 41.0043,-122.345 41.0185,-122.328 41.0327,-122.31 41.0469,-122.293 41.061,-122.28 41.0805,-122.268 41.0999,-122.255 41.1193,-122.242 41.1387,-122.235 41.152,-122.227 41.1652,-122.219 41.1784,-122.212 41.1917,-122.211 41.2026,-122.21 41.2136,-122.209 41.2246,-122.208 41.2356,-122.211 41.2457,-122.214 41.2559,-122.217 41.266,-122.221 41.2762,-122.227 41.2812,-122.234 41.2863,-122.241 41.2913,-122.248 41.2964,-122.257 41.2987,-122.266 41.301,-1
22.275 41.3034,-122.284 41.3057,-122.293 41.3072,-122.303 41.3087,-122.312 41.3102,-122.322 41.3117,-122.324 41.3165,-122.326 41.3213,-122.328 41.3247,-122.33 41.328,-122.331 41.3314,-122.333 41.3348,-122.336 41.3376,-122.339 41.3403,-122.342 41.3431,-122.345 41.3459,-122.348 41.3493,-122.352 41.3527,-122.356 41.3562,-122.36 41.3596,-122.367 41.3631,-122.37 41.3664,-122.373 41.3698,-122.376 41.3731,-122.379 41.3764,-122.379 41.3819,-122.379 41.3873,-122.383 41.392,-122.386 41.3967,-122.387 41.4019,-122.387 41.4071,-122.388 41.4119,-122.389 41.4166,-122.399 41.4185,-122.409 41.4223,-122.42 41.4263)
+LINESTRING(-83.5093 41.7321,-83.5082 41.7124,-83.574 41.6847,-83.577 41.6788)
+LINESTRING(-83.577 41.6788,-83.6062 41.6833,-83.6354 41.6866,-83.6648 41.689,-83.6946 41.6904,-83.6904 41.7021,-83.6851 41.7085,-83.6821 41.7169,-83.6835 41.7259)
+LINESTRING(-80.6763 41.1547,-80.6639 41.1576,-80.6509 41.1595,-80.6382 41.1615,-80.6266 41.1644,-80.5949 41.1742,-80.574 41.1779,-80.5525 41.1783,-80.5186 41.1786,-80.5185 41.1786)
+LINESTRING(-80.7581 41.8236,-80.7566 41.8178,-80.7562 41.812,-80.7558 41.8063,-80.7543 41.8008,-80.7477 41.7918,-80.7378 41.7839,-80.7271 41.7763,-80.7182 41.7681,-80.7026 41.7328,-80.7001 41.6904,-80.7046 41.6474,-80.71 41.61,-80.7103 41.5895,-80.7083 41.5688,-80.706 41.5482,-80.7059 41.5277,-80.7104 41.4837,-80.7128 41.4335,-80.706 41.3847,-80.683 41.3449,-80.6862 41.3151,-80.6963 41.287,-80.7077 41.2593,-80.7147 41.231,-80.7101 41.2105,-80.6971 41.1924,-80.6833 41.1745,-80.6763 41.1547)
+LINESTRING(-81.8083 41.3323,-81.811 41.3531,-81.8136 41.379,-81.8131 41.4034,-81.8063 41.4196,-81.786 41.4258,-81.7525 41.4278,-81.7181 41.4271,-81.6951 41.4254,-81.6816 41.422,-81.6687 41.4167,-81.6551 41.4118,-81.6397 41.4094,-81.6084 41.4125,-81.5779 41.4193,-81.5456 41.4229,-81.5086 41.4162)
+LINESTRING(-81.5086 41.4162,-81.5107 41.3993,-81.5114 41.3821,-81.5101 41.3645,-81.506 41.3467,-81.502 41.325,-81.5009 41.3027,-81.4995 41.2804,-81.4943 41.2586)
+LINESTRING(-81.8083 41.3323,-81.7888 41.3257,-81.7692 41.3181,-81.7497 41.3107,-81.7303 41.3047,-81.7221 41.3034,-81.7133 41.303,-81.7043 41.3024,-81.6955 41.3008,-81.6669 41.2919,-81.6404 41.2821,-81.6147 41.2713,-81.5884 41.2593,-81.5863 41.2585,-81.5841 41.2576,-81.582 41.2568,-81.5799 41.256,-81.5586 41.2572,-81.5372 41.2581,-81.5157 41.2586,-81.4943 41.2586)
+LINESTRING(-88.9862 42.4988,-88.9925 42.4736,-88.9905 42.4472,-88.98 42.4084,-88.9762 42.3995,-88.9712 42.3898,-88.9667 42.3802,-88.9643 42.3717,-88.9635 42.3495,-88.963 42.3134,-88.9631 42.2769,-88.964 42.254,-88.9629 42.2531,-88.9618 42.2522,-88.9607 42.2513,-88.9597 42.2503)
+LINESTRING(-83.5818 41.5705,-83.5787 41.5693)
+LINESTRING(-80.6763 41.1547,-80.685 41.1546,-80.6938 41.1542,-80.7026 41.1535,-80.7112 41.1524,-80.738 41.1355,-80.768 41.1256,-80.8008 41.1193,-80.836 41.1133)
+LINESTRING(-81.4943 41.2586,-81.4731 41.2581,-81.4517 41.2567,-81.4303 41.2551,-81.4088 41.2542,-81.3919 41.2549,-81.376 41.2563,-81.3599 41.2575,-81.3428 41.2573,-81.2845 41.2535,-81.1665 41.2456,-81.0472 41.2367,-80.9847 41.2299,-80.9595 41.2124,-80.9121 41.1756,-80.8638 41.1367,-80.836 41.1133)
+LINESTRING(-83.5787 41.5693,-83.5692 41.5666,-83.5589 41.5615)
+LINESTRING(-83.5787 41.5693,-83.5692 41.5655,-83.5589 41.5615)
+LINESTRING(-83.577 41.6788,-83.5763 41.6771,-83.5751 41.6756,-83.5594 41.6606,-83.5414 41.6431,-83.5244 41.625,-83.5121 41.6086,-83.5151 41.5971,-83.5285 41.5821,-83.5443 41.5682,-83.5543 41.5597)
+LINESTRING(-83.5589 41.5615,-83.5543 41.5597)
+LINESTRING(-84.9704 42.3144,-84.9702 42.2741,-84.975 42.2281,-84.982 42.1822,-84.9888 42.1419,-84.9929 42.1292,-84.999 42.1164,-85.0043 42.1035,-85.006 42.0903,-84.9993 42.0746,-84.986 42.0602,-84.9722 42.0448,-84.9642 42.0262,-84.9609 42.0041,-84.958 41.98,-84.9568 41.956,-84.9588 41.934,-84.9637 41.9234,-84.972 41.9134,-84.9798 41.9037,-84.9837 41.8939,-84.9863 41.8734,-84.9898 41.8518,-84.9927 41.8303,-84.9929 41.8104,-84.9891 41.788,-84.9852 41.7696,-84.9852 41.7606)
+LINESTRING(-105.203 42.6576,-105.213 42.6658,-105.222 42.6739,-105.231 42.6821,-105.241 42.6902,-105.258 42.7004,-105.283 42.7092,-105.308 42.7169,-105.329 42.7235,-105.347 42.7329,-105.377 42.7483,-105.41 42.7626,-105.44 42.7684,-105.446 42.771,-105.456 42.773,-105.466 42.7751,-105.472 42.7779,-105.496 42.7774,-105.518 42.7763,-105.539 42.7779,-105.559 42.7858,-105.582 42.7859,-105.601 42.7872,-105.62 42.7897,-105.642 42.7938,-105.659 42.7957,-105.68 42.7967,-105.701 42.7975,-105.719 42.7986,-105.731 42.7992,-105.738 42.7991,-105.746 42.799,-105.757 42.8003,-105.783 42.8048,-105.809 42.8098,-105.835 42.8145,-105.861 42.818,-105.893 42.8195,-105.923 42.8189,-105.953 42.8178,-105.983 42.8176,-105.994 42.8186,-106.005 42.8205,-106.016 42.8225,-106.026 42.8237,-106.07 42.8247,-106.113 42.8238,-106.156 42.8232,-106.2 42.8249,-106.218 42.8276,-106.238 42.8317,-106.257 42.8349,-106.272 42.835,-106.284 42.8389,-106.303 42.8427,-106.322 42.8457,-106.336 42.8475)
+LINESTRING(-89.0156 42.2219,-89.0097 42.2223,-89.0039 42.2226,-88.998 42.2229,-88.9921 42.2232,-88.9825 42.2282,-88.9729 42.2351,-88.9648 42.2427,-88.9597 42.2503)
+LINESTRING(-75.2771 40.111,-75.2984 40.0953,-75.3196 40.0816,-75.3379 40.0668,-75.3505 40.0474,-75.3501 40.0353,-75.3408 40.0254,-75.3264 40.0167,-75.3105 40.0083,-75.298 40.001,-75.287 39.9944,-75.2758 39.988,-75.2626 39.9812,-75.2465 39.9745,-75.2318 39.9689,-75.2186 39.9623,-75.2073 39.9524,-75.1992 39.9397,-75.1931 39.9272,-75.185 39.9166,-75.1708 39.9098,-75.1403 39.9026,-75.1351 39.9018,-75.1323 39.9015)
+LINESTRING(-84.9852 41.7606,-84.9852 41.7513,-84.9907 41.7363)
+LINESTRING(-89.2018 42.2816,-89.1896 42.2758,-89.1762 42.2716,-89.163 42.2672,-89.1517 42.261,-89.1429 42.2522,-89.1354 42.2422,-89.1281 42.2321,-89.1197 42.2227,-89.1024 42.2206,-89.0711 42.2206,-89.0381 42.2215,-89.0156 42.2219)
+LINESTRING(-85.0008 41.7351,-84.9951 41.736,-84.9907 41.7363)
+LINESTRING(-112.834 41.9996,-112.875 42.0423,-112.917 42.0854,-112.96 42.1282,-113.002 42.1711,-113.014 42.1815,-113.029 42.1924,-113.041 42.2038,-113.048 42.2157,-113.058 42.2234,-113.069 42.2312,-113.079 42.2389,-113.089 42.2466,-113.167 42.2934,-113.267 42.3799,-113.354 42.4634,-113.392 42.5013,-113.414 42.5105,-113.441 42.5192,-113.469 42.528,-113.492 42.5377)
+LINESTRING(-75.1026 39.873,-75.0888 39.8718,-75.0753 39.8715,-75.0621 39.873,-75.0496 39.8771,-75.0262 39.8727,-75.0166 39.8759,-75.0002 39.8924,-74.9798 39.9092,-74.9625 39.9221,-74.9552 39.9273,-74.9113 39.9608,-74.8383 40.0149,-74.7681 40.0672,-74.7333 40.0957)
+LINESTRING(-75.1323 39.9015,-75.1304 39.9014,-75.126 39.9005,-75.1221 39.8983,-75.116 39.892,-75.1116 39.8859,-75.1077 39.8797,-75.1026 39.873)
+LINESTRING(-80.836 41.1133,-80.8151 41.0945,-80.7896 41.0704,-80.7629 41.0486,-80.7391 41.0366)
+LINESTRING(-75.1026 39.873,-75.1007 39.8626,-75.0997 39.8568)
+LINESTRING(-75.0997 39.8568,-75.0991 39.8533,-75.0965 39.8443,-75.0948 39.8365)
+LINESTRING(-91.3448 42.4615,-91.3552 42.4577,-91.3711 42.456,-91.3877 42.4555,-91.4003 42.4551,-91.4334 42.4517,-91.4652 42.4478,-91.4972 42.4445,-91.5312 42.443,-91.588 42.4437,-91.645 42.4449,-91.7021 42.4456,-91.7587 42.4445,-91.7921 42.4415,-91.8261 42.4367,-91.8597 42.4322,-91.892 42.4303,-91.9653 42.4303,-92.0387 42.4302,-92.112 42.4301,-92.1853 42.43,-92.1909 42.43,-92.1965 42.4301,-92.2021 42.4301,-92.2077 42.4302)
+LINESTRING(-92.3202 42.429,-92.292 42.4293,-92.2639 42.4296,-92.2358 42.4299,-92.2077 42.4302)
+LINESTRING(-92.56 42.4782,-92.5075 42.4656,-92.4375 42.4478,-92.3688 42.4328,-92.3202 42.429)
+LINESTRING(-83.5543 41.5597,-83.5422 41.5519,-83.5314 41.5452,-83.5151 41.5391,-83.4936 41.5342,-83.4711 41.5295,-83.4521 41.5239,-83.3928 41.5004,-83.333 41.4779,-83.2732 41.4557,-83.2136 41.433,-83.2079 41.4301,-83.202 41.4267,-83.1961 41.4233,-83.1903 41.4209,-83.1132 41.4007,-83.0279 41.3819,-82.9414 41.3651,-82.861 41.351,-82.8434 41.3489,-82.8253 41.348,-82.8072 41.3473,-82.7894 41.3461,-82.7515 41.3417,-82.7136 41.3364,-82.6759 41.3307,-82.6383 41.3251,-82.5872 41.3219,-82.5296 41.324,-82.4717 41.3285,-82.4199 41.3328,-82.4037 41.3339,-82.3875 41.3349,-82.3692 41.3361,-82.3606 41.3369,-82.347 41.3414,-82.3334 41.3453,-82.3198 41.349,-82.3061 41.3531,-82.2903 41.3597,-82.2769 41.3669,-82.263 41.3734,-82.2461 41.3775,-82.2065 41.3834,-82.1674 41.3891,-82.1281 41.3919,-82.0881 41.3894,-82.0761 41.3865,-82.064 41.3824,-82.0521 41.3783,-82.0404 41.3757,-82.0292 41.3755,-82.0185 41.3769,-82.008 41.3787,-81.9976 41.3796,-81.9689 41.3766,-81.9357 41.3696,-81.9025 41.3612,-81.8741 41.354,-81.8577 41.3495,-81.
841 41.3438,-81.8245 41.3379,-81.8083 41.3323)
+LINESTRING(-84.8066 41.6294,-84.7978 41.6285,-84.7685 41.6281,-84.7387 41.6282,-84.7151 41.6279,-84.7004 41.6258,-84.6858 41.6222,-84.6713 41.6187,-84.6571 41.617,-84.6403 41.6173,-84.6234 41.618,-84.6064 41.6185,-84.5895 41.6182,-84.5546 41.6153,-84.52 41.612,-84.4854 41.6092,-84.4504 41.6081,-84.4357 41.6083,-84.4209 41.6085,-84.4041 41.6082,-84.3932 41.6067,-84.3633 41.5956,-84.3462 41.5912,-84.3283 41.591,-84.2958 41.5926,-84.2523 41.5935,-84.2077 41.5935,-84.1628 41.5934,-84.1184 41.5941,-84.0973 41.5953,-84.0757 41.5972,-84.0543 41.5991,-84.0338 41.6001,-83.9799 41.6017,-83.9254 41.6037,-83.871 41.6053,-83.8172 41.6052,-83.7928 41.6029,-83.7709 41.5986,-83.7437 41.5947,-83.7034 41.5936,-83.6866 41.5936,-83.6696 41.5928,-83.6526 41.5919,-83.6358 41.5911,-83.6223 41.5864,-83.596 41.5761,-83.5818 41.5705)
+LINESTRING(-84.9907 41.7363,-84.9882 41.7364,-84.9813 41.7361,-84.9756 41.7348,-84.9532 41.7176,-84.9087 41.6932,-84.8588 41.6635,-84.82 41.6307,-84.8066 41.6294)
+LINESTRING(-112.188 42.0018,-112.192 42.0148,-112.2 42.0291,-112.208 42.0436,-112.214 42.0574,-112.219 42.0772,-112.222 42.0987,-112.223 42.1204,-112.223 42.1407,-112.224 42.1506,-112.224 42.1622,-112.226 42.1735,-112.231 42.1822,-112.23 42.1927,-112.229 42.2033,-112.228 42.2138,-112.228 42.2244,-112.208 42.257,-112.207 42.2851,-112.214 42.3129,-112.217 42.3446,-112.21 42.3665,-112.194 42.3958,-112.178 42.4264,-112.166 42.4519,-112.162 42.4917,-112.171 42.5335,-112.185 42.5748,-112.198 42.6134,-112.199 42.6174,-112.2 42.6215,-112.201 42.6257,-112.201 42.6298)
+LINESTRING(-76.8793 40.2112,-76.8666 40.2099,-76.8507 40.205,-76.8342 40.199,-76.8199 40.1946,-76.814 40.1969,-76.8043 40.2026,-76.7946 40.2089,-76.7884 40.2134,-76.7568 40.2112,-76.7251 40.2081,-76.6938 40.2068,-76.6632 40.2099,-76.6329 40.2111,-76.5995 40.2082,-76.5637 40.2095,-76.5263 40.223,-76.5215 40.2248,-76.4832 40.2274,-76.4518 40.2266,-76.4268 40.2249,-76.4077 40.2248,-76.38 40.228,-76.3518 40.2317,-76.3237 40.235,-76.2961 40.2369,-76.242 40.2414,-76.1958 40.2458,-76.1498 40.2428,-76.0963 40.2253,-76.0735 40.2168,-76.0499 40.21,-76.0263 40.2029,-76.0036 40.1934,-75.9904 40.1777,-75.9694 40.1747,-75.946 40.177,-75.9257 40.1775,-75.9189 40.1748,-75.9062 40.1691,-75.8891 40.1624,-75.869 40.1568,-75.8566 40.1502,-75.8385 40.148,-75.8205 40.1469,-75.8079 40.1433,-75.7589 40.1079,-75.7143 40.0822,-75.6647 40.0662,-75.6002 40.0601,-75.5863 40.0629,-75.5738 40.0697,-75.5615 40.0769,-75.5485 40.0811,-75.53 40.0815,-75.511 40.0799,-75.492 40.0779,-75.4735 40.0776,-75.4552 40.0801,-75.4353 40.0848,-75.4158 4
0.0904,-75.3984 40.0959,-75.3893 40.0976,-75.3811 40.0972,-75.3729 40.0958,-75.3639 40.0945,-75.3558 40.0946,-75.3496 40.0963,-75.3441 40.0991,-75.3381 40.1026,-75.3263 40.106,-75.3089 40.1082,-75.2908 40.1098,-75.2771 40.111)
+LINESTRING(-85.0008 41.7351,-85.0063 41.7375,-85.0118 41.7398,-85.0173 41.7421,-85.0228 41.7445,-85.0764 41.7453,-85.14 41.7515,-85.2057 41.7562,-85.2657 41.7525,-85.2699 41.7494,-85.2741 41.7464,-85.2783 41.7434,-85.2825 41.7404,-85.3084 41.7403,-85.3424 41.7441,-85.3769 41.7491,-85.4041 41.7528,-85.4412 41.7535,-85.4742 41.7499,-85.504 41.7457,-85.5316 41.7447,-85.5403 41.7461,-85.5491 41.7484,-85.5579 41.7507,-85.5666 41.7523,-85.595 41.7537,-85.6248 41.7527,-85.6544 41.75,-85.6824 41.7462,-85.6927 41.7458,-85.703 41.7453,-85.7133 41.745,-85.7177 41.7449)
+LINESTRING(-87.8649 41.9977,-87.8654 42.0311,-87.8628 42.0661,-87.8661 42.0994,-87.8841 42.1278,-87.8844 42.1332,-87.8847 42.1386,-87.8842 42.1435,-87.8824 42.1492,-87.8783 42.1509,-87.8743 42.1527,-87.8738 42.1711,-87.8798 42.1908,-87.8905 42.2097,-87.9042 42.2257,-87.9039 42.2288,-87.9037 42.2319,-87.9035 42.2349,-87.9033 42.238,-87.9042 42.2509,-87.9069 42.2651,-87.9089 42.2737,-87.9109 42.2822,-87.9092 42.2923,-87.9074 42.3012,-87.9063 42.3104,-87.9065 42.3213,-87.9068 42.3242,-87.907 42.327,-87.9075 42.3298,-87.9079 42.3326,-87.9134 42.343,-87.9223 42.3518,-87.9318 42.3604,-87.9393 42.3702,-87.9439 42.387,-87.9508 42.4186,-87.957 42.4503,-87.9595 42.4672,-87.957 42.472,-87.9516 42.4764,-87.9456 42.4808,-87.9411 42.4857,-87.9435 42.497)
+LINESTRING(-87.8649 41.9977,-87.8834 42.0044,-87.9019 42.0094,-87.9204 42.0138,-87.9392 42.019,-87.9445 42.0215,-87.9491 42.0245,-87.9535 42.0276,-87.9581 42.0302,-88.0391 42.0575,-88.1117 42.0682,-88.1887 42.0695,-88.283 42.0686,-88.2928 42.0688,-88.3002 42.0696,-88.3073 42.0714,-88.3163 42.0748,-88.3459 42.0869,-88.3753 42.0992,-88.4045 42.1117,-88.4336 42.1244,-88.4588 42.1335,-88.4868 42.1411,-88.5152 42.148,-88.5416 42.1553,-88.5945 42.1723,-88.6471 42.1895,-88.6998 42.2067,-88.753 42.2234,-88.7911 42.2334,-88.8202 42.2367,-88.8513 42.2362,-88.8953 42.2346,-88.9067 42.237,-88.9182 42.2425,-88.9344 42.248,-88.9597 42.2503)
+LINESTRING(-80.7391 41.0366,-80.7339 41.0344,-80.7288 41.0322,-80.7237 41.03,-80.7186 41.0277,-80.7109 41.0166,-80.7015 41.0044,-80.6911 40.9927,-80.6807 40.9832,-80.6689 40.9766,-80.6452 40.9642,-80.6213 40.9521,-80.6087 40.9463,-80.5978 40.9449,-80.5871 40.9438,-80.5767 40.9422,-80.5665 40.939,-80.5505 40.9308,-80.5357 40.9214,-80.5213 40.9119,-80.5182 40.9103)
+LINESTRING(-76.5181 40.4243,-76.576 40.415,-76.6265 40.3966,-76.6742 40.3739,-76.7237 40.3514,-76.7381 40.345,-76.7541 40.3374,-76.7702 40.3305,-76.7849 40.3259,-76.8049 40.3192,-76.8222 40.3104,-76.8392 40.3021,-76.8587 40.2968,-76.8819 40.3015,-76.9091 40.312,-76.9404 40.3142,-76.9762 40.2937,-76.979 40.2901,-76.9807 40.2861,-76.9824 40.2821,-76.9848 40.2783,-76.9953 40.2766,-77.012 40.2761,-77.0297 40.2755,-77.0433 40.2731,-77.059 40.266,-77.0866 40.2528,-77.1134 40.2395,-77.1273 40.2321,-77.13 40.2283,-77.1339 40.2244)
+LINESTRING(-93.5746 42.4448,-93.5003 42.4425,-93.4284 42.4417,-93.3566 42.443,-92.56 42.4782)
+LINESTRING(-93.5746 42.4448,-93.5767 42.4565,-93.5777 42.4681,-93.5781 42.4798,-93.5784 42.4916,-93.5736 42.5438,-93.5542 42.574,-93.5221 42.6008,-93.4789 42.6429,-93.4582 42.6693,-93.4395 42.6967,-93.4214 42.7244,-93.4027 42.7515,-93.3912 42.7665,-93.3778 42.7848,-93.3666 42.8036,-93.362 42.8201,-93.3627 42.9018,-93.3638 42.9836,-93.3643 43.0654,-93.3632 43.1471,-93.3609 43.1816,-93.3569 43.2162,-93.3526 43.2508,-93.3497 43.2854,-93.3485 43.3227,-93.3484 43.3602,-93.3487 43.3977,-93.3488 43.4351,-93.3487 43.4521,-93.3487 43.4692,-93.349 43.4863,-93.3493 43.5035,-93.3493 43.5035)
+LINESTRING(-80.836 41.1133,-80.9104 41.1061,-80.982 41.1071,-81.0534 41.1112,-81.1274 41.1136,-81.1515 41.1132,-81.1754 41.1125,-81.1995 41.112,-81.2238 41.1123,-81.2501 41.1132,-81.2761 41.1137,-81.302 41.1132,-81.3281 41.111,-81.3797 41.0993,-81.4001 41.0859,-81.428 41.074,-81.5019 41.0667)
+LINESTRING(-81.4943 41.2586,-81.4937 41.2487,-81.4916 41.2383,-81.4899 41.2281,-81.4906 41.2191,-81.4945 41.2114,-81.5008 41.2015,-81.5067 41.1925,-81.5094 41.1874,-81.5072 41.1572,-81.5025 41.1258,-81.4994 41.0951,-81.5019 41.0667)
+LINESTRING(-77.1339 40.2244,-77.1321 40.2244,-77.1303 40.2243,-77.1285 40.2241,-77.1267 40.224,-77.0747 40.2088,-77.0382 40.1978,-77.0014 40.1933,-76.9481 40.1975,-76.9404 40.1975,-76.9322 40.1964,-76.9239 40.1952,-76.9156 40.195,-76.9067 40.1993,-76.8975 40.2031,-76.8882 40.2069,-76.8793 40.2112)
+LINESTRING(-93.9071 42.4451,-93.824 42.4449,-93.7409 42.4451,-93.6577 42.4453,-93.5746 42.4448)
+LINESTRING(-78.432 40.4387,-78.4268 40.4499,-78.4238 40.4585,-78.4178 40.4652,-78.4034 40.4707,-78.3991 40.4765,-78.3942 40.482,-78.3893 40.4875,-78.385 40.4931,-78.3682 40.5192,-78.3513 40.5461,-78.3337 40.5727,-78.3148 40.5978,-78.2865 40.627,-78.2529 40.6552,-78.2182 40.683,-78.1864 40.7111,-78.1861 40.7131,-78.1858 40.7152,-78.1855 40.7172,-78.1853 40.7193)
+LINESTRING(-85.7177 41.7449,-85.7236 41.7447,-85.7474 41.7342,-85.7725 41.7332,-85.7987 41.7365,-85.8258 41.7389,-85.8447 41.7381,-85.8642 41.7363,-85.8838 41.7344,-85.9034 41.7334,-85.9459 41.7328,-85.9887 41.732,-86.0314 41.7316,-86.0738 41.7318,-86.0852 41.7326,-86.0961 41.734,-86.1072 41.7351,-86.1193 41.7351,-86.1446 41.7305,-86.1606 41.7233,-86.1811 41.717,-86.2198 41.7148,-86.2271 41.7156,-86.235 41.7175,-86.2425 41.7203,-86.2485 41.7236,-86.2706 41.7219,-86.2932 41.7248,-86.316 41.7289,-86.3389 41.731)
+LINESTRING(-86.3219 42.1628,-86.3246 42.154,-86.3294 42.1282,-86.3411 42.12,-86.3529 42.1118,-86.3675 42.1011,-86.3753 42.0946,-86.3841 42.078,-86.3918 42.0585,-86.4022 42.041,-86.4189 42.0301,-86.4274 42.0281,-86.4357 42.0265,-86.4439 42.0247,-86.4523 42.022,-86.4639 42.0164,-86.4752 42.0098,-86.4863 42.0029,-86.4974 41.9966,-86.4995 41.9679,-86.499 41.9346,-86.4965 41.9036,-86.4928 41.8822,-86.504 41.8724,-86.521 41.865,-86.5387 41.8578,-86.5519 41.849,-86.5795 41.8301,-86.6081 41.8129,-86.6361 41.795,-86.662 41.774,-86.6768 41.7605)
+LINESTRING(-96.4485 42.4938,-96.4789 42.4947,-96.4882 42.5018,-96.4937 42.5112,-96.4953 42.5215,-96.493 42.5311,-96.5318 42.5726,-96.5794 42.6101,-96.6311 42.6447,-96.6824 42.6778,-96.7009 42.694,-96.736 42.7262,-96.7751 42.7614,-96.8051 42.7864,-96.8113 42.9388,-96.8236 43.1851,-96.8281 43.433,-96.8109 43.5899,-96.8023 43.5956,-96.8024 43.6054,-96.8025 43.6152,-96.8026 43.625,-96.8027 43.6348)
+LINESTRING(-87.8649 41.9977,-87.8428 41.9875,-87.8092 41.9811,-87.774 41.9726,-87.7474 41.9557,-87.7395 41.9516,-87.7315 41.9475,-87.7236 41.9435,-87.7157 41.9394,-87.6966 41.9284,-87.6804 41.9219,-87.6672 41.9129,-87.657 41.8945,-87.6451 41.8847,-87.6424 41.8732,-87.6427 41.8606,-87.6398 41.8475)
+LINESTRING(-87.9461 41.8447,-87.9302 41.8561,-87.9215 41.8668,-87.9179 41.8763,-87.9175 41.8843,-87.9194 41.8981,-87.9221 41.9137,-87.9231 41.9276,-87.9201 41.9361,-87.9128 41.9385,-87.9024 41.9391,-87.8917 41.9401,-87.8834 41.9434,-87.8771 41.9576,-87.8718 41.9701,-87.8677 41.9828,-87.8649 41.9977)
+LINESTRING(-96.3758 42.4416,-96.3835 42.4812,-96.402 42.4936,-96.4332 42.4933,-96.4485 42.4938)
+LINESTRING(-86.3389 41.731,-86.3385 41.7158,-86.3397 41.7006,-86.341 41.6855,-86.3409 41.6707,-86.3298 41.6555,-86.3052 41.6406,-86.2762 41.6289,-86.2519 41.6233)
+LINESTRING(-80.1591 41.1998,-80.1623 41.1735,-80.153 41.1372,-80.1385 41.1004,-80.1263 41.0729,-80.1241 41.0592,-80.1219 41.0455,-80.1198 41.0318,-80.1176 41.0181,-80.1214 41.0053,-80.1275 40.9906,-80.1326 40.9762,-80.1334 40.964,-80.1344 40.9623,-80.1353 40.9607,-80.1363 40.959,-80.1372 40.9574,-80.1347 40.9347,-80.1238 40.9074,-80.1118 40.8799,-80.1062 40.8568,-80.1092 40.8366,-80.1156 40.8127,-80.1213 40.7896,-80.1219 40.7721,-80.1166 40.7582,-80.1094 40.7447,-80.1019 40.7314,-80.0962 40.7182,-80.0937 40.7049,-80.093 40.6906,-80.093 40.6761,-80.0924 40.6624)
+LINESTRING(-80.5182 40.9103,-80.5063 40.9038,-80.4816 40.895,-80.4589 40.8893,-80.4365 40.8823,-80.4124 40.8697,-80.3814 40.8385,-80.3304 40.8159,-80.2787 40.799,-80.2456 40.7849,-80.2186 40.7565,-80.1773 40.7384,-80.1364 40.7193,-80.1103 40.6879,-80.1077 40.6818,-80.1033 40.674,-80.098 40.6669,-80.0924 40.6624)
+LINESTRING(-122.362 40.6093,-122.36 40.5871,-122.363 40.555,-122.364 40.523,-122.363 40.5009,-122.353 40.484,-122.338 40.4656,-122.324 40.4484,-122.316 40.4351,-122.313 40.4292,-122.307 40.4204,-122.302 40.411,-122.3 40.4034,-122.299 40.3729,-122.291 40.3452,-122.283 40.3175,-122.279 40.2872,-122.275 40.2838,-122.272 40.2798,-122.27 40.2756,-122.268 40.2715,-122.257 40.2435,-122.247 40.2241,-122.237 40.206,-122.223 40.1818)
+LINESTRING(-75.5082 39.6788,-75.4784 39.6841,-75.4449 39.6879,-75.4114 39.6924,-75.3776 39.7007,-75.3223 39.7246,-75.27 39.755,-75.2185 39.787,-75.1659 39.8153,-75.1579 39.8186,-75.1495 39.8218,-75.1413 39.8253,-75.1343 39.8295,-75.1262 39.8363,-75.1184 39.8433,-75.1102 39.85,-75.0997 39.8568)
+LINESTRING(-75.5359 39.6877,-75.5297 39.6853,-75.5116 39.6782,-75.5082 39.6788)
+LINESTRING(-89.0156 42.2219,-89.0158 42.2168,-89.0177 42.2118,-89.0211 42.2073,-89.0257 42.2034,-89.0267 42.1506,-89.0246 42.0507,-89.0205 41.9525,-89.016 41.9049)
+LINESTRING(-87.9461 41.8447,-87.9405 41.8442,-87.9348 41.843,-87.9294 41.8413,-87.9247 41.839,-87.9192 41.8287,-87.9131 41.8164,-87.9076 41.804,-87.9042 41.7933,-87.9032 41.7902,-87.9008 41.789,-87.8985 41.7853)
+LINESTRING(-75.6464 39.6877,-75.6347 39.6923,-75.6205 39.697,-75.6071 39.7018,-75.5975 39.7066,-75.5941 39.7051,-75.5906 39.7039,-75.5832 39.7021,-75.563 39.6974,-75.546 39.6917,-75.5359 39.6877)
+LINESTRING(-87.8566 41.756,-87.8482 41.7649,-87.8354 41.7781,-87.8221 41.7905,-87.8123 41.7972,-87.8094 41.7967,-87.8065 41.7962,-87.8036 41.7957,-87.8007 41.7952,-87.7689 41.8041,-87.7192 41.8189,-87.67 41.8348,-87.6398 41.8475)
+LINESTRING(-87.8566 41.756,-87.8681 41.7635,-87.8794 41.7712,-87.8898 41.7786,-87.8985 41.7853)
+LINESTRING(-74.5536 39.4109,-74.5533 39.4125,-74.553 39.4141,-74.5358 39.4488,-74.5267 39.4872,-74.51 39.5211,-74.4702 39.5424,-74.4518 39.5794,-74.4346 39.601,-74.4096 39.6182,-74.3674 39.6416,-74.3575 39.6466,-74.3469 39.6516,-74.3365 39.6568,-74.3274 39.6624,-74.2799 39.7109,-74.2448 39.773,-74.2225 39.8391,-74.2135 39.8993,-74.2115 39.9202,-74.209 39.9411,-74.2092 39.9618,-74.215 39.9822,-74.2141 39.9851,-74.2132 39.9879,-74.2122 39.9907,-74.2113 39.9936,-74.1913 40.0219,-74.1539 40.0818,-74.1178 40.1417,-74.1017 40.1701)
+LINESTRING(-75.0948 39.8365,-75.0846 39.8258,-75.0699 39.8187,-75.0556 39.8012,-75.0469 39.7597,-75.0305 39.7474,-75.0129 39.7333,-74.9946 39.7197,-74.9766 39.7092,-74.964 39.7051,-74.9486 39.7015,-74.934 39.698,-74.9239 39.694,-74.9099 39.6822,-74.8976 39.6686,-74.8856 39.6548,-74.8722 39.6429,-74.8194 39.6083,-74.7482 39.5629,-74.6808 39.5175,-74.6395 39.4829,-74.637 39.4775,-74.6329 39.4675,-74.6296 39.4591,-74.6263 39.4507,-74.6077 39.4431,-74.5893 39.4326,-74.5713 39.4213,-74.5536 39.4109)
+LINESTRING(-89.016 41.9049,-88.9548 41.9025,-88.8936 41.9016,-88.8324 41.9017,-88.7712 41.902,-88.7425 41.9028,-88.7074 41.9037,-88.6729 41.9023,-88.6461 41.8962,-88.6332 41.889,-88.6214 41.8811,-88.6086 41.874,-88.5922 41.869,-88.5743 41.8664,-88.557 41.864,-88.5399 41.8606,-88.5227 41.8549,-88.5116 41.848,-88.504 41.8399,-88.4972 41.8322,-88.4886 41.8265,-88.4414 41.8084,-88.4042 41.7987,-88.3647 41.7957,-88.3105 41.7977,-88.2422 41.8007,-88.1726 41.8028,-88.1033 41.8062,-88.0361 41.8131,-88.0223 41.8236,-88.0096 41.8324,-87.9945 41.8391,-87.9733 41.8437,-87.9666 41.844,-87.9598 41.8438,-87.953 41.8438,-87.9461 41.8447)
+LINESTRING(-74.5536 39.4109,-74.5302 39.404,-74.5227 39.4014,-74.501 39.3912,-74.4812 39.3797,-74.4607 39.3684,-74.437 39.3592)
+LINESTRING(-112.202 41.7096,-112.174 41.7669,-112.17 41.8541,-112.179 41.9421,-112.188 42.0016,-112.188 42.0018)
+LINESTRING(-112.202 41.7096,-112.242 41.7339,-112.264 41.7684,-112.293 41.8008,-112.357 41.8187,-112.37 41.8188,-112.384 41.8179,-112.398 41.8167,-112.412 41.8163,-112.44 41.8383,-112.453 41.8579,-112.472 41.8753,-112.518 41.8905,-112.531 41.893,-112.543 41.8947,-112.556 41.895,-112.569 41.8933,-112.575 41.9015,-112.615 41.917,-112.648 41.9366,-112.678 41.9538,-112.71 41.9621,-112.755 41.9638,-112.785 41.9669,-112.808 41.9769,-112.833 41.9992,-112.834 41.9996)
+LINESTRING(-81.5019 41.0667,-81.4966 41.0091,-81.4878 40.9879,-81.467 40.9701,-81.4255 40.9227,-81.4267 40.9141,-81.4312 40.903,-81.4359 40.891,-81.4377 40.8792,-81.4316 40.8689,-81.4183 40.8521,-81.4046 40.8301,-81.3969 40.804,-81.3957 40.8007,-81.393 40.796,-81.3901 40.7909,-81.3881 40.7867)
+LINESTRING(-75.6464 39.6877,-75.6558 39.6835,-75.664 39.6784,-75.6718 39.6731,-75.6799 39.668,-75.703 39.6579,-75.7312 39.6494,-75.7607 39.643,-75.7875 39.6393)
+LINESTRING(-87.6398 41.8475,-87.6373 41.8435,-87.6348 41.8394,-87.6323 41.8354,-87.6298 41.8314,-87.6326 41.8164,-87.638 41.8018,-87.6415 41.7879,-87.6385 41.7747,-87.6159 41.754,-87.5921 41.7309,-87.569 41.7088,-87.5484 41.6911,-87.5352 41.6696,-87.5243 41.6482)
+LINESTRING(-105.022 42.2308,-105.043 42.2716,-105.055 42.2995,-105.059 42.328,-105.06 42.3708,-105.06 42.385,-105.062 42.3965,-105.064 42.408,-105.063 42.4225,-105.063 42.4318,-105.065 42.4412,-105.067 42.4506,-105.067 42.4599,-105.067 42.4672,-105.065 42.4746,-105.063 42.4819,-105.062 42.4893,-105.071 42.5185,-105.094 42.5479,-105.123 42.575,-105.151 42.5973,-105.166 42.611,-105.18 42.6264,-105.192 42.6423,-105.203 42.6576)
+LINESTRING(-87.1864 41.5694,-87.1579 41.5703,-87.1294 41.5711,-87.1008 41.572,-87.0723 41.5728,-87.0109 41.5743,-86.9621 41.5759,-86.9139 41.5804,-86.8541 41.5908,-86.8087 41.6037,-86.7618 41.623,-86.7148 41.6463,-86.6691 41.6711,-86.5596 41.7236,-86.482 41.7428,-86.4155 41.7411,-86.3389 41.731)
+LINESTRING(-86.6768 41.7605,-86.6829 41.7549,-86.7044 41.7374,-86.7275 41.7212,-86.7535 41.7057,-86.7728 41.6952,-86.7995 41.6813,-86.8298 41.666,-86.8602 41.6515,-86.8933 41.6391,-86.9336 41.6266,-86.9706 41.6157,-86.994 41.608,-87.0106 41.6032,-87.0351 41.5981,-87.0594 41.5934,-87.0755 41.5899,-87.1026 41.5841,-87.1305 41.5802,-87.1586 41.5761,-87.1864 41.5694)
+LINESTRING(-87.1864 41.5694,-87.2157 41.5684,-87.2449 41.5673,-87.2741 41.5663,-87.3034 41.5652)
+LINESTRING(-87.5243 41.6482,-87.5216 41.6428,-87.504 41.6197,-87.4789 41.6089,-87.4569 41.6077,-87.4349 41.6065,-87.4129 41.6051,-87.391 41.6032,-87.3729 41.6006,-87.3508 41.595,-87.3314 41.5886,-87.321 41.584,-87.3166 41.5793,-87.3122 41.5746,-87.3078 41.5699,-87.3034 41.5652)
+LINESTRING(-74.6442 39.3058,-74.6411 39.3184,-74.6408 39.3222,-74.6398 39.3283,-74.6382 39.3344,-74.6364 39.3383,-74.6206 39.3523,-74.5929 39.3753,-74.5662 39.398,-74.5536 39.4109)
+LINESTRING(-74.6515 39.2871,-74.6476 39.2924,-74.6442 39.3058)
+LINESTRING(-83.6685 41.0503,-83.6683 41.0789,-83.6683 41.1075,-83.6669 41.136,-83.6643 41.1468,-83.6596 41.1569,-83.6546 41.1668,-83.6511 41.177,-83.6509 41.1919,-83.6544 41.206,-83.6584 41.2193,-83.6593 41.2323,-83.6556 41.2419,-83.6485 41.2534,-83.6409 41.2661,-83.6357 41.2793,-83.6269 41.317,-83.619 41.356,-83.6139 41.3951,-83.6136 41.4333,-83.615 41.4372,-83.6176 41.4413,-83.6201 41.4455,-83.6213 41.4496,-83.6214 41.4702,-83.6216 41.4909,-83.6218 41.5115,-83.622 41.5322,-83.6136 41.5411,-83.6024 41.5525,-83.5911 41.5632,-83.5818 41.5705)
+LINESTRING(-87.4701 41.5423,-87.4295 41.5431,-87.3874 41.5506,-87.3451 41.5596,-87.3034 41.5652)
+LINESTRING(-87.5254 41.5517,-87.513 41.549,-87.4701 41.5423)
+LINESTRING(-87.7429 41.5683,-87.7318 41.5723,-87.7202 41.5767,-87.7084 41.5804,-87.6965 41.5822,-87.6902 41.5806,-87.6839 41.5791,-87.6777 41.5773,-87.6715 41.5755,-87.6356 41.5741,-87.5754 41.5624,-87.5254 41.5517)
+LINESTRING(-87.7429 41.5683,-87.7323 41.5778,-87.7217 41.5874,-87.7032 41.6034,-87.6864 41.617,-87.6925 41.6227,-87.6964 41.6274,-87.7019 41.631,-87.713 41.6337,-87.7178 41.639,-87.7219 41.646,-87.726 41.6532,-87.7308 41.6594,-87.7443 41.6685,-87.757 41.6734,-87.7726 41.6834,-87.7948 41.7079,-87.8012 41.7149,-87.8119 41.7255,-87.8231 41.7358,-87.8309 41.7416,-87.8366 41.7444,-87.8428 41.7478,-87.8497 41.7519,-87.8566 41.756)
+LINESTRING(-76.6622 39.7213,-76.6673 39.736,-76.6701 39.7729,-76.6758 39.797,-76.6833 39.8198,-76.6913 39.8421,-76.6984 39.8647,-76.6985 39.8709,-76.6968 39.8774,-76.6949 39.8832,-76.6968 39.895,-76.7 39.9042,-76.7026 39.9132,-76.7031 39.92,-76.6926 39.9321,-76.683 39.9407,-76.6808 39.9527,-76.6923 39.9748,-76.7012 39.9777,-76.7088 39.9785,-76.7164 39.9787,-76.7253 39.98,-76.7446 40.0147,-76.7612 40.0437,-76.7805 40.0736,-76.8081 40.1109,-76.8231 40.131,-76.8334 40.1461,-76.8425 40.16,-76.8539 40.1766,-76.8603 40.1852,-76.8666 40.1939,-76.873 40.2025,-76.8793 40.2112)
+LINESTRING(-87.3243 41.4688,-87.3201 41.4803,-87.3179 41.4939,-87.3185 41.5076,-87.3225 41.5192,-87.3199 41.5222,-87.3173 41.5252,-87.3147 41.5281,-87.3122 41.5311,-87.3122 41.5396,-87.3105 41.5486,-87.3075 41.5573,-87.3034 41.5652)
+LINESTRING(-78.432 40.4387,-78.4334 40.4257,-78.4347 40.4126,-78.4361 40.3996,-78.438 40.3865,-78.4433 40.3544,-78.4486 40.3223,-78.4539 40.2902,-78.4592 40.258,-78.4639 40.2348,-78.471 40.2115,-78.4809 40.1889,-78.4941 40.168,-78.5105 40.1452,-78.5254 40.1194,-78.5329 40.0933,-78.5279 40.0712)
+LINESTRING(-81.8083 41.3323,-81.8064 41.2907,-81.7977 41.2424,-81.791 41.1964,-81.795 41.1616,-81.8051 41.1475,-81.8195 41.1341,-81.8346 41.121,-81.8471 41.1077,-81.8534 41.0983,-81.8591 41.0892,-81.8658 41.0804,-81.8749 41.072,-81.8909 41.0622,-81.9207 41.0455,-81.9511 41.0295,-81.9691 41.022,-81.988 41.0219,-82.0099 41.0224,-82.0312 41.0209,-82.0483 41.0146,-82.053 41.0088,-82.0571 41.0003,-82.0616 40.9912,-82.0674 40.9838,-82.0927 40.9628,-82.1192 40.9422,-82.1462 40.9223,-82.1731 40.9031,-82.1793 40.8991,-82.1855 40.895,-82.193 40.8904,-82.1988 40.8872,-82.21 40.8818,-82.2213 40.8763,-82.2318 40.8711,-82.243 40.8653,-82.2508 40.8605,-82.2581 40.8553,-82.2656 40.8501,-82.2735 40.8454,-82.3031 40.8325,-82.3345 40.8219,-82.3656 40.8108,-82.3944 40.797,-82.4011 40.7932,-82.4071 40.7895,-82.4121 40.7852,-82.4157 40.7793)
+LINESTRING(-78.2437 39.9874,-78.2367 39.9881,-78.1882 40.0217,-78.1669 40.0272,-78.1501 40.0227,-78.118 40.0253,-78.0884 40.04,-78.0531 40.0396,-78.0133 40.0372,-77.9704 40.0463,-77.9499 40.0548,-77.9281 40.0625,-77.9057 40.0693,-77.8834 40.0747,-77.8685 40.0858,-77.8536 40.0878,-77.8252 40.0894,-77.7965 40.1075,-77.7667 40.1226,-77.7371 40.138,-77.7094 40.1572,-77.6957 40.1611,-77.6783 40.158,-77.6615 40.1517,-77.6498 40.1464,-77.6432 40.1469,-77.6297 40.1527,-77.6161 40.1585,-77.6022 40.1638,-77.5879 40.1683,-77.5729 40.1713,-77.5579 40.1729,-77.5428 40.1739,-77.5277 40.1751,-77.5094 40.1778,-77.4908 40.1816,-77.4723 40.1858,-77.4543 40.1896,-77.4104 40.1965,-77.3616 40.2021,-77.3126 40.2059,-77.2683 40.2075,-77.247 40.2087,-77.2249 40.2116,-77.2031 40.2156,-77.1827 40.22,-77.166 40.2231,-77.1549 40.2238,-77.1456 40.2236,-77.1339 40.2244)
+LINESTRING(-82.4157 40.7793,-82.4606 40.7765,-82.5057 40.7772,-82.5502 40.7768,-82.5935 40.7707,-82.6146 40.7764,-82.6382 40.7797,-82.6624 40.7822,-82.6852 40.7855)
+LINESTRING(-80.0924 40.6624,-80.0828 40.6622,-80.0684 40.6597,-80.0537 40.6566,-80.0436 40.6543,-80.0412 40.6524,-80.0389 40.6504,-80.0366 40.6484,-80.0342 40.6464,-80.0098 40.6417,-79.9982 40.6416,-79.9912 40.6365,-79.9805 40.617,-79.978 40.6157,-79.9684 40.6154,-79.959 40.614,-79.9507 40.6108,-79.9443 40.6055,-79.9179 40.5963,-79.9019 40.5924,-79.8929 40.5915,-79.8876 40.5913,-79.8824 40.5893,-79.874 40.583,-79.8585 40.5698,-79.8322 40.5473,-79.8304 40.546,-79.8286 40.5447,-79.8267 40.5436,-79.8248 40.5424,-79.8233 40.5389,-79.8218 40.5354,-79.8204 40.5319,-79.8189 40.5284,-79.7954 40.5145,-79.7749 40.4906,-79.7592 40.4638,-79.7502 40.4412,-79.7501 40.4385,-79.7506 40.4358,-79.7426 40.4295,-79.7358 40.4217,-79.73 40.4146,-79.7251 40.4104,-79.6833 40.3866,-79.678 40.3702,-79.6872 40.3508,-79.689 40.3176,-79.6837 40.2955,-79.6784 40.285,-79.6697 40.2772,-79.6542 40.2633,-79.6498 40.2574,-79.6465 40.2511,-79.6428 40.2448,-79.6372 40.2391,-79.6293 40.2343,-79.6213 40.2307,-79.6134 40.2265,-79.6059 40.2201)
+LINESTRING(-78.2437 39.9874,-78.2603 39.9838,-78.276 39.9778,-78.2918 39.9718,-78.3083 39.9681,-78.353 39.9698,-78.4004 39.9816,-78.4433 40.0011,-78.4741 40.0259,-78.4841 40.0395,-78.4943 40.0529,-78.5073 40.0642,-78.5253 40.0712,-78.5279 40.0712)
+LINESTRING(-85.0008 41.7351,-85.0016 41.7185,-85.0024 41.7,-85.0045 41.6818,-85.0091 41.6662,-85.0197 41.6643,-85.0288 41.6598,-85.0365 41.6537,-85.0427 41.6471,-85.0416 41.6356,-85.0422 41.6239,-85.0436 41.6123,-85.0449 41.6008,-85.0469 41.5994,-85.0489 41.5981,-85.0509 41.5968,-85.0529 41.5954,-85.055 41.5544,-85.0534 41.5004,-85.0518 41.4513,-85.0534 41.4248,-85.063 41.4069,-85.0746 41.3865,-85.0847 41.3658,-85.0898 41.3475,-85.0894 41.324,-85.0862 41.2998,-85.0833 41.2758,-85.0838 41.2526,-85.0875 41.2463,-85.0954 41.2348,-85.1037 41.2227,-85.1084 41.2148,-85.1119 41.1909,-85.1151 41.1612,-85.1274 41.1364,-85.1583 41.1268)
+LINESTRING(-87.7429 41.5683,-87.7525 41.5633,-87.7678 41.5567,-87.7839 41.5512,-87.7956 41.549,-87.8234 41.5509,-87.854 41.5528,-87.8846 41.5534,-87.9121 41.551,-87.9188 41.5492,-87.9256 41.5465,-87.9324 41.5438,-87.9393 41.5418,-87.9679 41.534,-87.982 41.5267,-87.9897 41.5205,-87.9994 41.5162,-88.0228 41.514,-88.0602 41.5132,-88.0984 41.5133,-88.1245 41.5139,-88.1264 41.514,-88.1459 41.508,-88.163 41.4989,-88.1794 41.4906,-88.1968 41.487)
+LINESTRING(-88.1968 41.487,-88.197 41.4928,-88.1972 41.4986,-88.1974 41.5044,-88.1976 41.5102,-88.1814 41.5308,-88.1797 41.5478,-88.1823 41.5628,-88.1791 41.5776,-88.1749 41.5823,-88.1694 41.5868,-88.1647 41.5916,-88.1628 41.597,-88.1632 41.6072,-88.1637 41.6174,-88.1641 41.6276,-88.1645 41.6378,-88.1076 41.6864,-88.0277 41.7314,-87.9496 41.7664,-87.8985 41.7853)
+LINESTRING(-78.5279 40.0712,-78.5583 40.0708,-78.5826 40.0599,-78.6016 40.048,-78.619 40.0443,-78.6266 40.0443,-78.6355 40.0427,-78.6444 40.0411,-78.652 40.0411,-78.661 40.0409,-78.6721 40.0381,-78.6829 40.0338,-78.6908 40.0292,-78.6993 40.0266,-78.7112 40.0258,-78.7226 40.0249,-78.7297 40.0217,-78.7408 40.0115,-78.7531 40.0087,-78.7664 40.0102,-78.7805 40.0133,-78.8119 40.0129,-78.8374 40.0027,-78.8629 39.9906,-78.8945 39.9846,-78.9323 39.9861,-78.9701 39.9904,-79.0077 39.9966,-79.043 40.0034)
+LINESTRING(-79.043 40.0034,-79.0449 40.0137,-79.0511 40.0298,-79.0584 40.046,-79.0639 40.057,-79.0483 40.0842,-79.0156 40.1306,-78.9827 40.1781,-78.9667 40.2087,-78.9446 40.2165,-78.9252 40.2308,-78.9072 40.2475,-78.8895 40.2622,-78.8808 40.2663,-78.8708 40.2692,-78.8609 40.272,-78.8524 40.2758,-78.8483 40.2796,-78.845 40.2846,-78.8428 40.2901,-78.8419 40.2949,-78.8196 40.3121,-78.8131 40.3196,-78.811 40.325,-78.8022 40.3357,-78.7924 40.3398,-78.7868 40.341,-78.7709 40.3697,-78.7615 40.3985,-78.7591 40.4278,-78.7694 40.4558,-78.7562 40.4671,-78.7429 40.4733,-78.7272 40.477,-78.707 40.4809,-78.6877 40.473,-78.6679 40.4654,-78.6481 40.458,-78.6285 40.4503,-78.6186 40.4473,-78.6083 40.4454,-78.598 40.4434,-78.5879 40.4402,-78.5765 40.4434,-78.5662 40.4513,-78.5551 40.4605,-78.5412 40.4674,-78.5178 40.4675,-78.4894 40.46,-78.4615 40.4497,-78.4399 40.441,-78.432 40.4387)
+LINESTRING(-79.6059 40.2201,-79.5702 40.2052,-79.5371 40.1878,-79.5041 40.1699,-79.4692 40.1538,-79.4656 40.154,-79.462 40.1542,-79.4584 40.1543,-79.4548 40.1545,-79.453 40.1557,-79.4512 40.1568,-79.4481 40.1574,-79.4446 40.1578,-79.4411 40.1577,-79.438 40.157,-79.4236 40.1418,-79.4147 40.1313,-79.4035 40.1215,-79.382 40.1089,-79.3735 40.1096,-79.3653 40.1119,-79.3579 40.1154,-79.3516 40.1198,-79.3388 40.1222,-79.3254 40.1242,-79.3118 40.1262,-79.2983 40.1287,-79.2443 40.1056,-79.1732 40.0683,-79.1073 40.0339,-79.0691 40.0198,-79.0631 40.0148,-79.058 40.0095,-79.052 40.0053,-79.043 40.0034)
+LINESTRING(-75.0948 39.8365,-75.1029 39.8243,-75.1081 39.8082,-75.1122 39.7915,-75.117 39.7775,-75.1229 39.7674,-75.1294 39.7573,-75.1358 39.7472,-75.1412 39.737,-75.1416 39.6808,-75.11 39.6291,-75.0739 39.5859,-75.0603 39.5547,-75.0698 39.5205,-75.0746 39.4917,-75.0716 39.4633,-75.0575 39.4305,-75.05 39.4255,-75.0363 39.4196,-75.0224 39.4129,-75.0139 39.4058,-75.0118 39.3999,-75.0111 39.3936,-75.0113 39.3813,-75.0081 39.3656,-75.0009 39.3517,-74.9932 39.3369,-74.9883 39.3184,-74.9819 39.3129,-74.9764 39.3058,-74.9721 39.2983,-74.9696 39.2913,-74.9377 39.2466,-74.8746 39.183,-74.8561 39.1352,-74.8388 39.0792)
+LINESTRING(-77.1339 40.2244,-77.1452 40.2159,-77.1531 40.205,-77.1603 40.1944,-77.1696 40.1869,-77.184 40.1863,-77.199 40.1864,-77.2138 40.1863,-77.2274 40.1852,-77.2377 40.1819,-77.2521 40.1755,-77.2663 40.1686,-77.2758 40.1637,-77.3181 40.1437,-77.3799 40.1153,-77.4392 40.0874,-77.4736 40.0685,-77.4864 40.0568,-77.4975 40.0444,-77.5093 40.0322,-77.5241 40.0208,-77.5313 40.0169,-77.5379 40.0132,-77.5517 39.9978,-77.5634 39.9816,-77.5748 39.9655,-77.5876 39.9502,-77.5978 39.9476,-77.6093 39.9454,-77.62 39.9426,-77.6278 39.9383,-77.6603 39.8964,-77.696 39.8343,-77.7231 39.7724,-77.7297 39.7315,-77.7342 39.7262,-77.7398 39.7221)
+LINESTRING(-91.6305 41.6854,-91.6379 41.7056,-91.6409 41.7345,-91.6418 41.7645,-91.6432 41.7878,-91.6469 41.8032,-91.6523 41.8193,-91.6574 41.8354,-91.66 41.8512,-91.66 41.8734,-91.6588 41.8956,-91.6572 41.9179,-91.6565 41.9401,-91.6587 41.9516,-91.6637 41.9627,-91.6687 41.9733,-91.6707 41.9835,-91.6702 41.9904,-91.6693 41.998,-91.6689 42.0055,-91.6694 42.0121,-91.6832 42.0425,-91.7125 42.1002,-91.7437 42.1585,-91.7635 42.1911,-91.7889 42.2138,-91.8238 42.2372,-91.8618 42.2582,-91.897 42.274,-91.9151 42.2798,-91.9337 42.2841,-91.9523 42.2882,-91.9703 42.2936,-92.0224 42.3131,-92.0872 42.342,-92.1529 42.3808,-92.2077 42.4302)
+LINESTRING(-90.5632 41.5933,-90.5313 41.5946,-90.4698 41.5966,-90.4061 41.5959,-90.3674 41.5896,-90.3636 41.5813,-90.363 41.5808)
+LINESTRING(-90.5632 41.5933,-90.5649 41.6622,-90.5669 41.7312,-90.5683 41.8002,-90.5683 41.8691)
+LINESTRING(-91.6305 41.6854,-91.5683 41.6833,-91.5256 41.6798,-91.4825 41.6722,-91.4193 41.6577,-91.3859 41.6526,-91.35 41.6511,-91.3141 41.6518,-91.2805 41.6531,-91.2414 41.6523,-91.2053 41.6482,-91.1697 41.643,-91.1316 41.6386,-91.0761 41.6361,-91.0204 41.6359,-90.9649 41.6356,-90.91 41.633,-90.8843 41.6299,-90.8585 41.6254,-90.8328 41.6205,-90.8074 41.6159,-90.7467 41.6067,-90.686 41.5994,-90.625 41.5947,-90.5632 41.5933)
+LINESTRING(-80.0924 40.6624,-80.0933 40.6579,-80.0927 40.6534,-80.0915 40.6488,-80.0905 40.6443,-80.0905 40.6283,-80.0937 40.6145,-80.0975 40.6017,-80.0994 40.5888,-80.1033 40.5875,-80.1071 40.5861,-80.111 40.5848,-80.1149 40.5835,-80.1169 40.5802,-80.118 40.5768,-80.1185 40.5733,-80.1186 40.5698,-80.1205 40.5533,-80.1245 40.5374,-80.1305 40.5219,-80.1381 40.5063,-80.1359 40.5019,-80.1326 40.5003,-80.1292 40.4996,-80.1269 40.4979,-80.127 40.4959,-80.1286 40.4942,-80.13 40.4926,-80.1297 40.4906,-80.1169 40.4704,-80.1131 40.4551,-80.1115 40.4406,-80.1054 40.4231,-80.1041 40.4176,-80.1047 40.4117,-80.1055 40.4057,-80.1052 40.3999,-80.1033 40.395,-80.1011 40.3903,-80.0997 40.3855,-80.1002 40.3801,-80.1032 40.3769,-80.1073 40.3743,-80.112 40.3722,-80.1168 40.3707,-80.1184 40.3658,-80.1182 40.3593,-80.1178 40.3526,-80.1189 40.3475,-80.1305 40.3354,-80.1432 40.3274,-80.1556 40.3155,-80.1658 40.2921,-80.1631 40.2865,-80.1605 40.2809,-80.158 40.2753,-80.1559 40.2696,-80.1564 40.2681,-80.157 40.2666,-80.1575 40.2651,
-80.1581 40.2636,-80.164 40.2595,-80.1704 40.2563,-80.1771 40.2537,-80.1841 40.2508,-80.2083 40.2347,-80.228 40.2137,-80.2413 40.1956,-80.2462 40.1878)
+LINESTRING(-84.0046 40.8108,-83.9991 40.814,-83.9935 40.8173,-83.988 40.8205,-83.9824 40.8238,-83.9784 40.8254,-83.9739 40.8266,-83.9694 40.8278,-83.965 40.8299,-83.9607 40.8336,-83.9574 40.8378,-83.9542 40.8419,-83.9501 40.8455,-83.9363 40.854,-83.9225 40.8626,-83.9087 40.8711,-83.8949 40.8796,-83.8813 40.8864,-83.8637 40.8935,-83.8454 40.9003,-83.8303 40.9062,-83.7909 40.9268,-83.739 40.9591,-83.6927 40.9938,-83.6705 41.0216,-83.6685 41.0503)
+LINESTRING(-80.2462 40.1878,-80.2447 40.1881,-80.2432 40.1883,-80.2296 40.1818,-80.2179 40.1734,-80.2065 40.1653,-80.1939 40.1599)
+LINESTRING(-79.6059 40.2201,-79.6305 40.214,-79.6472 40.2132,-79.6603 40.2133,-79.6737 40.2099,-79.6768 40.208,-79.6796 40.2055,-79.6819 40.2028,-79.6842 40.2002,-79.6928 40.1942,-79.7107 40.1825,-79.7291 40.1708,-79.7391 40.1647,-79.7526 40.1607,-79.7679 40.159,-79.7835 40.1582,-79.7978 40.1564,-79.814 40.1519,-79.8357 40.1446,-79.8574 40.1364,-79.8734 40.1296,-79.8809 40.1241,-79.8897 40.116,-79.8986 40.1086,-79.9062 40.105,-79.9094 40.1054,-79.9126 40.1063,-79.9157 40.1075,-79.9184 40.1088,-79.934 40.1085,-79.9443 40.114,-79.9519 40.122,-79.9594 40.1289,-79.9688 40.1328,-79.9775 40.1332,-79.9865 40.1325,-79.9968 40.1331,-80.0247 40.1427,-80.0603 40.1564,-80.0974 40.1637,-80.1299 40.154,-80.1501 40.1537,-80.1601 40.1569,-80.1664 40.1616,-80.1755 40.1657,-80.1795 40.1655,-80.1847 40.1637,-80.1893 40.1618,-80.1939 40.1599)
+LINESTRING(-90.3343 41.5354,-90.2985 41.5357,-90.2733 41.5402,-90.2518 41.5508,-90.2267 41.5693,-90.2185 41.5757,-90.2102 41.582,-90.2028 41.5886,-90.1963 41.5961,-90.1935 41.6036,-90.1924 41.6128,-90.1908 41.6216,-90.1867 41.6275,-90.1687 41.6409,-90.1508 41.656,-90.1326 41.6704,-90.1135 41.6819,-90.0599 41.7007,-90.0031 41.7136,-89.9463 41.7263,-89.8926 41.7445,-89.8413 41.7654,-89.8106 41.7679,-89.7859 41.7611,-89.7523 41.7539,-89.7005 41.7528,-89.6416 41.7584,-89.5851 41.7707,-89.5407 41.7896,-89.4723 41.82,-89.4126 41.826,-89.3514 41.8245,-89.2783 41.8321,-89.2487 41.8409,-89.2214 41.8525,-89.1946 41.8646,-89.1666 41.875,-89.1492 41.8795,-89.1309 41.8833,-89.1123 41.8869,-89.0944 41.8907,-89.0743 41.8958,-89.0612 41.8994,-89.045 41.9022,-89.016 41.9049)
+LINESTRING(-90.363 41.5808,-90.3551 41.5755,-90.3444 41.5709,-90.3341 41.5663,-90.3341 41.5585,-90.3342 41.5508,-90.3342 41.5431,-90.3343 41.5354)
+LINESTRING(-75.502 39.1638,-75.5085 39.1843,-75.5256 39.2015,-75.5459 39.2174,-75.5621 39.2337,-75.565 39.2424,-75.5703 39.2603,-75.5745 39.2748,-75.5787 39.2893,-75.5865 39.3077,-75.5967 39.3187,-75.6113 39.3264,-75.6316 39.3348)
+LINESTRING(-107.183 41.7887,-107.192 41.7851,-107.2 41.7814,-107.209 41.7777,-107.218 41.774,-107.227 41.775,-107.236 41.7763,-107.245 41.7777,-107.254 41.7792,-107.271 41.7801,-107.287 41.779,-107.303 41.7773,-107.321 41.7768,-107.337 41.779,-107.354 41.7835,-107.37 41.7884,-107.386 41.7921,-107.39 41.7922,-107.394 41.7922,-107.397 41.792,-107.401 41.7918,-107.444 41.7803,-107.493 41.7669,-107.542 41.7553,-107.586 41.7493,-107.616 41.7477,-107.645 41.7455,-107.674 41.7424,-107.704 41.7379,-107.737 41.7296,-107.771 41.7191,-107.806 41.7096,-107.84 41.7041,-107.86 41.7038,-107.88 41.7047,-107.9 41.7047,-107.921 41.7019,-107.94 41.6953,-107.958 41.6866,-107.975 41.6784,-107.995 41.6733,-108.03 41.6685,-108.065 41.6637,-108.101 41.659,-108.136 41.6542,-108.189 41.6467,-108.243 41.6396,-108.296 41.6342,-108.35 41.632,-108.423 41.634,-108.496 41.6391,-108.569 41.6446,-108.642 41.6481,-108.658 41.6481,-108.674 41.6479,-108.69 41.648,-108.706 41.6491,-108.751 41.6727,-108.799 41.687,-108.85 41.6937,-108.906 41.694
2,-108.913 41.6907,-108.92 41.6856,-108.927 41.6798,-108.931 41.674,-108.966 41.6673,-108.987 41.6592,-109.007 41.6496,-109.036 41.6387,-109.045 41.6368,-109.055 41.6358,-109.064 41.6347,-109.073 41.633,-109.104 41.6234,-109.134 41.6133,-109.165 41.6032,-109.196 41.5937,-109.199 41.5958,-109.201 41.598,-109.203 41.6002,-109.205 41.6023,-109.222 41.6081,-109.238 41.6023,-109.249 41.5901,-109.256 41.5768,-109.279 41.5682,-109.295 41.5618,-109.311 41.556,-109.334 41.5495,-109.351 41.5468,-109.37 41.5452,-109.389 41.5433,-109.403 41.5397,-109.423 41.5468,-109.445 41.56,-109.475 41.5721,-109.514 41.5761,-109.536 41.5707,-109.572 41.5596,-109.607 41.5486,-109.625 41.5436,-109.686 41.5436,-109.746 41.5436,-109.807 41.5436,-109.868 41.5435,-109.879 41.544,-109.889 41.5452,-109.9 41.5464,-109.911 41.547)
+LINESTRING(-78.0977 39.7238,-78.1136 39.7254,-78.1345 39.7237)
+LINESTRING(-78.2437 39.9874,-78.2443 39.9861,-78.2397 39.9725,-78.2304 39.9645,-78.2226 39.9568,-78.2223 39.944,-78.2379 39.9166,-78.2633 39.8707,-78.278 39.8247,-78.2615 39.7969,-78.2509 39.795,-78.2399 39.7947,-78.2288 39.7944,-78.2183 39.7922,-78.2135 39.7865,-78.2111 39.7789,-78.2097 39.7709,-78.2079 39.7637,-78.2014 39.7593,-78.1956 39.7544,-78.1905 39.7491,-78.1862 39.7434,-78.1866 39.7354,-78.1865 39.7256,-78.1863 39.7236)
+LINESTRING(-75.7875 39.6393,-75.7876 39.6393,-75.8008 39.6397,-75.8154 39.642,-75.8303 39.6446,-75.8441 39.6457,-75.8569 39.6445,-75.8719 39.6418,-75.8878 39.6445,-75.8978 39.642,-75.9075 39.6417,-75.9172 39.6432,-75.9271 39.6463,-75.9739 39.6281,-76.0226 39.6117,-76.0717 39.5961,-76.1196 39.5797,-76.15 39.5638,-76.1742 39.5434,-76.196 39.5212,-76.2189 39.5001,-76.2263 39.4961,-76.2355 39.4932,-76.2451 39.4906,-76.2537 39.4877,-76.2692 39.4791,-76.2839 39.4691,-76.2987 39.4594,-76.3145 39.452,-76.3346 39.4469,-76.3543 39.4434,-76.3737 39.4391,-76.3928 39.4315,-76.4198 39.4131,-76.4439 39.3918,-76.4681 39.3715,-76.5017 39.3535)
+LINESTRING(-76.5017 39.3535,-76.5126 39.3651,-76.5287 39.3781,-76.5466 39.3895,-76.5631 39.3961,-76.5727 39.4072,-76.5788 39.4126,-76.5848 39.4158,-76.5931 39.4158,-76.6014 39.4157,-76.6096 39.4152,-76.6176 39.4138,-76.6245 39.4152,-76.6312 39.4171,-76.6379 39.4193,-76.6443 39.4216,-76.645 39.4312,-76.6435 39.4407,-76.6534 39.4531,-76.6601 39.4568,-76.6642 39.4645,-76.6662 39.4889,-76.6695 39.5247,-76.6749 39.5601,-76.6788 39.5955,-76.6777 39.6309,-76.6718 39.6426,-76.6617 39.6498,-76.6519 39.6606,-76.6466 39.6832,-76.6503 39.6959,-76.6589 39.7119,-76.6622 39.7213)
+LINESTRING(-78.1345 39.7237,-78.1405 39.7232,-78.1658 39.7165,-78.1828 39.7079)
+LINESTRING(-78.1863 39.7236,-78.1853 39.7158,-78.1828 39.7079)
+LINESTRING(-88.1968 41.487,-88.203 41.4875,-88.2094 41.4875,-88.2158 41.4871,-88.2219 41.4863,-88.2288 41.4809,-88.2356 41.4754,-88.2425 41.4699,-88.2493 41.4644,-88.2607 41.4629,-88.276 41.4622,-88.2914 41.462,-88.3033 41.4622,-88.3377 41.4422,-88.3832 41.4148,-88.4259 41.3905,-88.4516 41.3799,-88.5327 41.3788,-88.6138 41.3774,-88.6949 41.3764,-88.776 41.3763,-88.8002 41.3759,-88.8168 41.3745,-88.8321 41.3721,-88.8526 41.3685,-88.8932 41.366,-88.9505 41.3661,-89.0103 41.3667,-89.0582 41.3662)
+LINESTRING(-89.016 41.9049,-89.0079 41.8755,-89.0055 41.8224,-89.0057 41.7655,-89.0055 41.7246,-89.0183 41.7113,-89.0354 41.6935,-89.0505 41.675,-89.057 41.6599,-89.0575 41.6333,-89.058 41.6068,-89.0584 41.5802,-89.0583 41.5537,-89.057 41.5444,-89.0544 41.5348,-89.0517 41.5255,-89.0505 41.5169,-89.0505 41.5052,-89.0504 41.4935,-89.0503 41.4818,-89.0502 41.4701,-89.0511 41.463,-89.0533 41.4563,-89.0554 41.4497,-89.0565 41.4429,-89.057 41.4238,-89.0574 41.4046,-89.0578 41.3854,-89.0582 41.3662)
+LINESTRING(-77.7398 39.7221,-77.7398 39.7221,-77.7401 39.7172,-77.7412 39.7128,-77.7425 39.7086,-77.7434 39.704,-77.7429 39.6981,-77.7408 39.6922,-77.7386 39.6862,-77.7373 39.6805,-77.7417 39.6673,-77.7532 39.6563,-77.7672 39.6465,-77.779 39.6369,-77.7836 39.6304,-77.7873 39.6233,-77.7908 39.616,-77.795 39.6092)
+LINESTRING(-77.795 39.6092,-77.8028 39.6253,-77.814 39.6372,-77.8288 39.6463,-77.8477 39.6523,-77.8854 39.6563,-77.9497 39.6523,-77.9874 39.6562,-78.0176 39.6697,-78.0574 39.7093,-78.0876 39.7228,-78.0977 39.7238)
+LINESTRING(-77.795 39.6092,-77.7975 39.6072,-77.8001 39.6053,-77.8026 39.6034,-77.8051 39.6014,-77.8226 39.5974,-77.8368 39.5936)
+LINESTRING(-114.955 41.1003,-115.002 41.0899,-115.051 41.0787,-115.102 41.07,-115.154 41.0668,-115.191 41.0726,-115.226 41.084,-115.262 41.0939,-115.298 41.0953,-115.349 41.0853,-115.391 41.0712,-115.431 41.0529,-115.475 41.0304,-115.491 41.0208,-115.505 41.0118,-115.521 41.0042,-115.54 40.9994,-115.565 40.998,-115.609 41.0016,-115.634 41.0002,-115.679 40.9864,-115.712 40.9633,-115.741 40.935,-115.776 40.9056,-115.809 40.8846,-115.842 40.8685,-115.874 40.8529,-115.91 40.8335,-115.922 40.8231,-115.932 40.8121,-115.943 40.8028,-115.959 40.7972,-116.066 40.7814,-116.079 40.7758,-116.145 40.7553,-116.249 40.6934,-116.315 40.6728,-116.346 40.6692,-116.374 40.6685,-116.402 40.6715,-116.431 40.6787,-116.449 40.6846,-116.465 40.6897,-116.482 40.6925,-116.501 40.6916,-116.542 40.6801,-116.61 40.6473,-116.652 40.6357,-116.664 40.6344,-116.687 40.6334,-116.699 40.632,-116.729 40.621,-116.772 40.5859,-116.801 40.5749,-116.806 40.5743,-116.81 40.574,-116.813 40.5726,-116.845 40.5709,-116.873 40.5757,-116.9 40.5858,-116.
927 40.6002,-116.979 40.6315,-117.003 40.646,-117.031 40.6621,-117.083 40.6944,-117.125 40.7263,-117.165 40.7595,-117.212 40.7962,-117.262 40.8283,-117.312 40.8508,-117.367 40.8678,-117.43 40.883,-117.49 40.9081,-117.539 40.9414,-117.589 40.9679,-117.65 40.9722,-117.679 40.966,-117.704 40.9569,-117.725 40.944,-117.743 40.9262)
+LINESTRING(-90.335 41.4423,-90.3356 41.4655,-90.3352 41.4888,-90.3345 41.5122,-90.3343 41.5354)
+LINESTRING(-89.0582 41.3662,-89.0637 41.366,-89.0688 41.3669,-89.0733 41.3688,-89.0772 41.3717,-89.0824 41.3724,-89.0878 41.3728,-89.0932 41.3727,-89.0986 41.3727,-89.1091 41.3682,-89.1247 41.366,-89.141 41.3653,-89.1537 41.3652,-89.1916 41.3655,-89.222 41.3685,-89.251 41.3754,-89.2846 41.3877,-89.2915 41.3908,-89.2988 41.3944,-89.3063 41.3977,-89.3133 41.4,-89.3397 41.4023,-89.3692 41.4007,-89.3986 41.3974,-89.4247 41.3947,-89.4402 41.3948,-89.4563 41.3965,-89.4729 41.3979,-89.4896 41.3974,-89.5021 41.3952,-89.5145 41.3921,-89.5268 41.3891,-89.5392 41.387,-89.5448 41.3874,-89.5497 41.3895,-89.5544 41.3919,-89.5594 41.3938,-89.5731 41.3954,-89.5883 41.3955,-89.6036 41.395,-89.6176 41.3946,-89.6443 41.3929,-89.6705 41.3893,-89.6969 41.3857,-89.7241 41.384,-89.7482 41.3838,-89.7769 41.3837,-89.805 41.3845,-89.8275 41.387,-89.8543 41.3937,-89.8866 41.4029,-89.9188 41.4114,-89.9452 41.4161,-89.957 41.4149,-89.9663 41.4107,-89.979 41.4065,-90.0009 41.405,-90.0047 41.4073,-90.0086 41.4096,-90.0124 41.4118,-90.016
3 41.4141,-90.0437 41.4132,-90.0747 41.4121,-90.1055 41.412,-90.1326 41.414,-90.1495 41.4197,-90.1617 41.4281,-90.1806 41.4358,-90.218 41.4399,-90.2473 41.4405,-90.2765 41.4411,-90.3058 41.4417,-90.335 41.4423)
+LINESTRING(-80.5194 40.0915,-80.5116 40.0957,-80.4943 40.1028,-80.4753 40.1059,-80.456 40.1056,-80.4366 40.1043,-80.4174 40.1041,-80.4128 40.1049,-80.4086 40.1063,-80.4008 40.11,-80.3783 40.1194,-80.3545 40.1277,-80.3302 40.1354,-80.3064 40.1429,-80.295 40.1503,-80.2823 40.1625,-80.2674 40.176,-80.2462 40.1878)
+LINESTRING(-112.202 41.7096,-112.192 41.7023,-112.178 41.696,-112.164 41.6905,-112.152 41.6855,-112.14 41.6784,-112.13 41.6712,-112.12 41.6638,-112.109 41.656,-112.086 41.6411,-112.067 41.6262,-112.054 41.6092,-112.049 41.5957,-112.048 41.5938,-112.047 41.5911,-112.047 41.5899,-112.047 41.5879,-112.043 41.5681,-112.037 41.5402,-112.032 41.5124,-112.027 41.4846,-112.024 41.4385,-112.021 41.3924,-112.018 41.3462,-112.015 41.3001,-112.013 41.2924,-112.012 41.2848,-112.01 41.2771,-112.009 41.2694,-112.006 41.244,-112.006 41.2214,-112.009 41.1987,-112.013 41.1791)
+LINESTRING(-76.5017 39.3535,-76.529 39.3361,-76.5422 39.3206,-76.5478 39.3027,-76.5521 39.2777)
+LINESTRING(-93.5762 41.6436,-93.545 41.6462,-93.5155 41.654,-93.4868 41.6636,-93.4576 41.6718,-93.4185 41.681,-93.3783 41.6914,-93.3387 41.7012,-93.3012 41.7088,-93.2761 41.7143,-93.2474 41.7212,-93.2187 41.7269,-93.1934 41.7285,-93.1718 41.7243,-93.1535 41.7167,-93.14 41.7082,-93.1329 41.702,-93.0751 41.6935,-93.02 41.6886,-92.9647 41.6863,-92.9061 41.6858,-92.8825 41.6863,-92.8597 41.6873,-92.8366 41.6886,-92.8121 41.6895,-92.6992 41.6899,-92.5859 41.6877,-92.4726 41.6855,-92.3597 41.6862,-92.3079 41.6891,-92.2556 41.6934,-92.2033 41.6973,-92.1517 41.6988,-92.1201 41.6969,-92.0864 41.6929,-92.0527 41.688,-92.021 41.6837,-91.9431 41.6808,-91.8381 41.6827,-91.7269 41.6855,-91.6305 41.6854)
+LINESTRING(-93.5762 41.6436,-93.5717 41.7133,-93.5704 41.7835,-93.5713 41.8538,-93.5732 41.9236,-93.5753 41.9441,-93.5789 41.9651,-93.582 41.9858,-93.5828 42.0059,-93.5791 42.0748,-93.5754 42.1438,-93.5721 42.2127,-93.5695 42.2817,-93.5686 42.3226,-93.5689 42.3631,-93.5708 42.4037,-93.5746 42.4448)
+LINESTRING(-76.5521 39.2777,-76.5621 39.2702)
+LINESTRING(-109.911 41.547,-109.936 41.5357,-109.961 41.5244,-109.986 41.5131,-110.011 41.5018,-110.016 41.4973,-110.026 41.4883,-110.036 41.4787,-110.045 41.4723,-110.073 41.4551,-110.114 41.4311,-110.154 41.4078,-110.183 41.3928,-110.193 41.3905,-110.2 41.3894,-110.229 41.3823,-110.249 41.3782,-110.27 41.375,-110.294 41.3713,-110.306 41.3684,-110.317 41.3642,-110.328 41.3599,-110.339 41.3569,-110.365 41.3533,-110.383 41.3513,-110.4 41.3456,-110.428 41.3307,-110.456 41.3297,-110.489 41.3224,-110.521 41.3126,-110.547 41.3044,-110.589 41.2984,-110.644 41.2974,-110.696 41.3022,-110.728 41.3134)
+LINESTRING(-110.728 41.3134,-110.737 41.3124,-110.749 41.3103,-110.76 41.3071,-110.768 41.3029,-110.786 41.2925,-110.8 41.2808,-110.822 41.2727,-110.861 41.2732,-110.889 41.2682,-110.912 41.2681,-110.932 41.269,-110.949 41.2667,-110.974 41.2619,-110.994 41.2556,-111.009 41.2495,-111.023 41.2454,-111.037 41.2441,-111.045 41.2438)
+LINESTRING(-93.5909 41.5982,-93.5835 41.6086,-93.5793 41.62,-93.5773 41.6318,-93.5762 41.6436)
+LINESTRING(-80.754 40.062,-80.7336 40.0632,-80.723 40.0635)
+LINESTRING(-80.7391 41.0366,-80.736 41.0224,-80.7309 41.009,-80.7252 40.9959,-80.7209 40.9824,-80.7175 40.9548,-80.7178 40.9262,-80.721 40.8977,-80.7262 40.8704,-80.7288 40.867,-80.7312 40.8632,-80.7329 40.8456,-80.7346 40.8281,-80.7366 40.8066,-80.7371 40.7961,-80.7196 40.7549,-80.6997 40.7277,-80.6675 40.7096,-80.6128 40.6955,-80.6092 40.6927,-80.6012 40.6854,-80.5928 40.6755,-80.588 40.6649,-80.5972 40.6485,-80.6245 40.6419,-80.658 40.6383,-80.6857 40.6307,-80.7064 40.613,-80.7178 40.5912,-80.7202 40.5691,-80.7137 40.5501,-80.7067 40.5459,-80.6995 40.542,-80.6927 40.5378,-80.687 40.5325,-80.6656 40.4946,-80.653 40.4519,-80.645 40.4128,-80.6374 40.3855,-80.6346 40.3838,-80.6318 40.3821,-80.6289 40.3803,-80.6261 40.3786,-80.6293 40.3739,-80.631 40.3713,-80.632 40.3691,-80.6349 40.3573,-80.638 40.3361,-80.6408 40.3243,-80.6547 40.3001,-80.6944 40.2644,-80.7083 40.2402,-80.71 40.2324,-80.7116 40.2186,-80.7133 40.2109,-80.723 40.1937,-80.7511 40.1667,-80.7608 40.1495,-80.7621 40.1417,-80.7618 40.1347,-80.761
40.1276,-80.7609 40.1196,-80.762 40.1045,-80.7618 40.0912,-80.7593 40.0782,-80.754 40.062)
+LINESTRING(-76.5912 39.234,-76.5925 39.2342,-76.5972 39.2348,-76.602 39.2354,-76.6067 39.236,-76.6107 39.234,-76.6148 39.232,-76.6188 39.2299,-76.6228 39.2279)
+LINESTRING(-80.723 40.0635,-80.7209 40.0636,-80.7132 40.0629,-80.7018 40.0582,-80.6863 40.0518,-80.6704 40.0461,-80.6578 40.0433,-80.6417 40.0462,-80.6111 40.0533,-80.5801 40.0611,-80.5631 40.0664,-80.5471 40.0755,-80.5296 40.0859,-80.5194 40.0915)
+LINESTRING(-76.5521 39.2777,-76.5935 39.2842,-76.6349 39.2906,-76.6763 39.297,-76.7177 39.3034,-76.7664 39.3055,-76.8082 39.2997,-76.8483 39.2927,-76.8919 39.2912,-76.9304 39.2975,-76.9689 39.3087,-77.0068 39.3216,-77.0439 39.3326,-77.081 39.3405,-77.119 39.3468,-77.1572 39.3529,-77.1948 39.3603,-77.2269 39.3685,-77.2586 39.3774,-77.2905 39.3856,-77.3233 39.3918,-77.3516 39.3944,-77.3798 39.3954,-77.408 39.3964,-77.4364 39.3992)
+LINESTRING(-77.795 39.6092,-77.7897 39.6055,-77.7838 39.6021,-77.7777 39.5991,-77.7717 39.5961,-77.7448 39.5965,-77.7183 39.5981,-77.6918 39.5995,-77.6648 39.599,-77.6429 39.5856,-77.6218 39.5699,-77.6045 39.552,-77.5937 39.5324,-77.5926 39.5274,-77.5919 39.5222,-77.5909 39.517,-77.5889 39.512,-77.5865 39.5095,-77.5687 39.4944,-77.548 39.4805,-77.5283 39.4665,-77.5138 39.4513,-77.5066 39.4402,-77.4981 39.428,-77.4881 39.4167,-77.4762 39.4083,-77.468 39.4052,-77.4569 39.4024,-77.4455 39.4002,-77.4364 39.3992)
+LINESTRING(-93.7842 41.5811,-93.735 41.5803,-93.6874 41.5817,-93.6405 41.5864,-93.5934 41.5955,-93.5921 41.5968,-93.5909 41.5982)
+LINESTRING(-114.955 41.1003,-114.932 41.0995,-114.893 41.1038,-114.851 41.1093,-114.822 41.1121,-114.771 41.1084,-114.73 41.0981,-114.691 41.0849,-114.647 41.0724,-114.634 41.0708,-114.605 41.0701,-114.59 41.0684,-114.58 41.0759,-114.571 41.0773,-114.562 41.0762,-114.551 41.0757,-114.534 41.0652,-114.519 41.053,-114.504 41.0404,-114.488 41.0288,-114.447 41.0024,-114.407 40.9751,-114.368 40.9472,-114.33 40.9192,-114.312 40.9102,-114.287 40.9016,-114.26 40.8928,-114.237 40.8833,-114.216 40.8621,-114.173 40.8213,-114.153 40.8008,-114.129 40.7755,-114.108 40.7566,-114.081 40.745,-114.041 40.741,-114.04 40.7412)
+LINESTRING(-96.3758 42.4416,-96.3767 42.4375,-96.3777 42.4333,-96.3787 42.4285,-96.361 42.3833,-96.3356 42.3447,-96.3074 42.3071,-96.2812 42.2678,-96.269 42.2418,-96.2587 42.2138,-96.2476 42.1863,-96.233 42.1615,-96.208 42.1311,-96.1819 42.1003,-96.1583 42.0685,-96.1409 42.0353,-96.1313 42.0202,-96.1171 42.0032,-96.104 41.9862,-96.0978 41.9712,-96.0978 41.9279,-96.0984 41.8977,-96.0905 41.8698,-96.0649 41.8333,-96.0593 41.8264,-96.0535 41.8197,-96.0468 41.8134,-96.0387 41.8079,-96.0304 41.7756,-96.0325 41.7425,-96.0356 41.7105,-96.0305 41.6814,-96.005 41.6497,-95.9754 41.6277,-95.9543 41.5996,-95.9544 41.5497,-95.9551 41.545,-95.9563 41.5386)
+LINESTRING(-76.1576 38.9808,-76.1996 38.9641,-76.2008 38.9643)
+LINESTRING(-94.9612 41.4913,-94.899 41.4907,-94.7703 41.4898,-94.7527 41.4905,-94.7332 41.4917,-94.7139 41.4924,-94.6967 41.4914,-94.6856 41.4886,-94.6752 41.4843,-94.665 41.4802,-94.6548 41.4778,-94.636 41.4788,-94.6168 41.4836,-94.5974 41.4888,-94.5778 41.4911,-94.4976 41.4901,-94.4174 41.489,-94.3373 41.4876,-94.2571 41.4862,-94.2396 41.489,-94.2235 41.4965,-94.2094 41.5064,-94.1979 41.5165,-94.1715 41.5178,-94.1449 41.5179,-94.1183 41.5173,-94.0918 41.5165,-94.0831 41.518,-94.0711 41.5215,-94.0611 41.5249,-94.051 41.5282,-93.9935 41.5409,-93.9414 41.5465,-93.8938 41.5502,-93.8498 41.5574,-93.8338 41.5633,-93.8175 41.5712,-93.8009 41.5781,-93.7842 41.5811)
+LINESTRING(-76.2008 38.9643,-76.2332 38.9684,-76.2488 38.9724)
+LINESTRING(-78.1828 39.7079,-78.2058 39.6993,-78.2307 39.6966,-78.2535 39.6951,-78.2705 39.6901,-78.2827 39.6922,-78.2886 39.6945,-78.2998 39.6994,-78.3118 39.6974,-78.3209 39.6956,-78.3305 39.6974,-78.3459 39.6978,-78.356 39.698,-78.3661 39.6983,-78.3768 39.6977,-78.3798 39.6916,-78.384 39.686,-78.3893 39.6811,-78.3959 39.677,-78.4537 39.6642,-78.5015 39.6776,-78.5438 39.699,-78.5852 39.7095,-78.5957 39.7087,-78.6055 39.7043,-78.6126 39.7007,-78.6264 39.6945,-78.6433 39.6868,-78.6603 39.6799,-78.675 39.6761,-78.6869 39.6759,-78.6989 39.6759,-78.7144 39.6727,-78.7287 39.6676,-78.7431 39.6626,-78.7596 39.6599,-78.763 39.6526,-78.7708 39.6491,-78.7797 39.6466,-78.7888 39.644,-78.7974 39.64,-78.8265 39.6449,-78.8543 39.6454,-78.8823 39.6444,-78.9122 39.6451,-78.9326 39.6493,-78.9578 39.6575,-78.9829 39.667,-79.0031 39.6753,-79.02 39.6732,-79.0372 39.6713,-79.0546 39.6699,-79.0717 39.669,-79.0882 39.6707,-79.107 39.675,-79.1261 39.6799,-79.1437 39.6831,-79.1658 39.6848,-79.1875 39.6856,-79.2091 39.6854,-79.231
39.6842,-79.2573 39.6849,-79.2757 39.6882,-79.2963 39.6879,-79.3295 39.6781,-79.34 39.674,-79.3502 39.6695,-79.3595 39.6641,-79.3672 39.6573,-79.3804 39.6546,-79.3941 39.6513,-79.4079 39.6484,-79.4213 39.6469,-79.4351 39.6472,-79.4488 39.6481,-79.4626 39.6489,-79.4769 39.6488,-79.4779 39.6488)
+LINESTRING(-76.3452 38.9788,-76.3703 38.9847,-76.3958 38.9979,-76.4016 39.0064)
+LINESTRING(-76.2488 38.9724,-76.2663 38.977,-76.3069 38.9733,-76.3389 38.9773,-76.3452 38.9788)
+LINESTRING(-95.5802 41.492,-95.5372 41.4922,-95.4941 41.4924,-95.451 41.4926,-95.408 41.4928,-95.3955 41.4922,-95.3832 41.4906,-95.371 41.4889,-95.3588 41.4876,-95.3407 41.4878,-95.3222 41.4894,-95.3037 41.4913,-95.2853 41.4923,-95.1566 41.4927,-95.0278 41.4919,-94.9612 41.4913)
+LINESTRING(-81.5444 39.9966,-81.524 40.0019,-81.5079 40.0057,-81.4919 40.0102,-81.4721 40.0173,-81.4676 40.0191,-81.463 40.0204,-81.45 40.0218,-81.4365 40.0219,-81.4231 40.0221,-81.4101 40.0236,-81.381 40.0302,-81.3534 40.0364,-81.3255 40.0419,-81.295 40.0461,-81.2683 40.0472,-81.242 40.0463,-81.2157 40.0456,-81.1893 40.0474,-81.1788 40.0501,-81.1666 40.0542,-81.155 40.0579,-81.1464 40.0591,-81.1333 40.0563,-81.1206 40.0519,-81.1081 40.0474,-81.095 40.0445,-81.0669 40.0462,-81.0251 40.0529,-80.9845 40.0615,-80.9599 40.0688,-80.9593 40.072,-80.9553 40.0733,-80.9398 40.0705,-80.9283 40.0671,-80.9172 40.0632,-80.9049 40.059,-80.8958 40.0585,-80.8824 40.0598,-80.8685 40.0615,-80.8579 40.0625,-80.8348 40.0599,-80.8088 40.055,-80.7834 40.0536,-80.7618 40.0617,-80.7579 40.0619,-80.754 40.062)
+LINESTRING(-81.3881 40.7867,-81.3869 40.7826,-81.3868 40.7792,-81.3874 40.7757,-81.3883 40.7717,-81.3912 40.77,-81.3948 40.7674,-81.3981 40.7647,-81.4 40.7623,-81.4122 40.7318,-81.4243 40.7003,-81.438 40.6693,-81.4552 40.6403,-81.4692 40.6242,-81.4855 40.6088,-81.5011 40.5932,-81.513 40.5768,-81.5073 40.5591,-81.4934 40.526,-81.4782 40.4906,-81.4686 40.4663,-81.4761 40.4517,-81.4888 40.4375,-81.5034 40.424,-81.5165 40.4118,-81.5236 40.3968,-81.5306 40.3719,-81.5364 40.3464,-81.54 40.3294,-81.5431 40.3047,-81.54 40.2928,-81.5338 40.2826,-81.5276 40.2631,-81.5276 40.248,-81.5316 40.2338,-81.537 40.2198,-81.541 40.2052,-81.5425 40.1826,-81.5422 40.1608,-81.544 40.1391,-81.5522 40.1165,-81.5529 40.1153,-81.5535 40.1141,-81.5542 40.1129,-81.5549 40.1117,-81.5491 40.0885,-81.5435 40.0701,-81.5442 40.0492,-81.5573 40.0189,-81.5551 40.0131,-81.5525 40.0072,-81.549 40.0016,-81.5444 39.9966)
+LINESTRING(-111.045 41.2438,-111.052 41.2436,-111.066 41.2413,-111.078 41.2349,-111.09 41.222,-111.098 41.2107,-111.11 41.1995,-111.13 41.1867,-111.134 41.1788,-111.137 41.1709,-111.14 41.163,-111.143 41.155,-111.163 41.1407,-111.182 41.1247,-111.2 41.1092,-111.22 41.0961,-111.274 41.0647,-111.331 41.0301,-111.389 40.9967,-111.443 40.9693)
+LINESTRING(-111.443 40.9693,-111.467 40.9947,-111.492 41.0195,-111.519 41.0432,-111.547 41.0655,-111.565 41.0635,-111.585 41.0592,-111.602 41.0548,-111.611 41.053,-111.618 41.0538,-111.625 41.0547,-111.632 41.0549,-111.639 41.0535,-111.645 41.0515,-111.651 41.0492,-111.656 41.047,-111.663 41.0454,-111.705 41.069,-111.735 41.095,-111.764 41.1202,-111.801 41.1414,-111.823 41.14,-111.844 41.137,-111.864 41.1337,-111.885 41.1315,-111.902 41.1319,-111.918 41.1338,-111.934 41.1361,-111.951 41.1375,-111.968 41.1472,-111.986 41.1569,-112.002 41.1678,-112.013 41.1791)
+LINESTRING(-80.1939 40.1599,-80.1962 40.1568,-80.1992 40.1538,-80.2026 40.1511,-80.2062 40.1442,-80.207 40.1398,-80.2079 40.1354,-80.2085 40.131,-80.2053 40.1108,-80.1964 40.0895,-80.1865 40.0682,-80.1801 40.0477,-80.1792 40.0279,-80.1812 40.0156,-80.1799 39.9989,-80.1693 39.9658,-80.1691 39.9627,-80.1666 39.9293,-80.1592 39.9141,-80.1478 39.9028,-80.1337 39.8809,-80.1248 39.8616,-80.1161 39.843,-80.1067 39.8246,-80.0956 39.8059,-80.0914 39.7955,-80.0899 39.7847,-80.0884 39.7738,-80.0839 39.7631,-80.0784 39.7555,-80.0729 39.7484,-80.068 39.7411,-80.0643 39.7327,-80.0632 39.7273,-80.0621 39.7219)
+LINESTRING(-117.743 40.9262,-117.754 40.9243,-117.766 40.9224,-117.778 40.9204,-117.79 40.9185,-117.8 40.917,-117.811 40.9155,-117.818 40.9145,-117.825 40.9136,-117.839 40.9063,-117.856 40.8992,-117.869 40.8938,-117.923 40.862,-117.937 40.8324,-117.938 40.7995,-117.941 40.7605,-117.944 40.744,-117.945 40.7304,-117.946 40.7169,-117.951 40.7004,-117.959 40.6793,-117.97 40.6618,-117.986 40.6487,-118.011 40.6407,-118.038 40.6344,-118.063 40.626,-118.089 40.6177,-118.115 40.6113,-118.15 40.6028,-118.179 40.5889,-118.201 40.568,-118.214 40.5382,-118.223 40.5178,-118.236 40.4971,-118.249 40.476,-118.256 40.4547,-118.261 40.426,-118.266 40.3967,-118.273 40.3675,-118.28 40.3392,-118.29 40.3226,-118.309 40.2991,-118.329 40.275,-118.343 40.2569,-118.358 40.2432,-118.368 40.2333,-118.377 40.2263,-118.391 40.2174,-118.405 40.2097,-118.421 40.2023,-118.436 40.1943,-118.455 40.182,-118.473 40.1686,-118.491 40.155,-118.509 40.1419,-118.542 40.1245,-118.58 40.1076,-118.616 40.0904,-118.644 40.0723,-118.666 40.0416,-118.678
40.0054,-118.688 39.9728,-118.703 39.9529,-118.713 39.949,-118.723 39.9456,-118.734 39.9424,-118.744 39.9394)
+LINESTRING(-95.9342 41.4886,-95.9013 41.4912,-95.8813 41.4912,-95.8613 41.4905,-95.8414 41.4902,-95.8276 41.4908,-95.8138 41.492,-95.8001 41.4934,-95.7864 41.4944,-95.74 41.4953,-95.6932 41.4946,-95.6463 41.4933,-95.5999 41.4921,-95.5802 41.492)
+LINESTRING(-95.9563 41.5386,-95.9583 41.5301,-95.9602 41.5215,-95.9618 41.5138,-95.9626 41.508,-95.9521 41.4961,-95.9342 41.4886)
+LINESTRING(-77.8368 39.5936,-77.855 39.5887,-77.8864 39.5798,-77.9011 39.5754,-77.9355 39.5434,-77.9655 39.4995,-77.9919 39.4531,-78.0159 39.4136,-78.0258 39.4012,-78.0366 39.3893,-78.0473 39.3773,-78.0566 39.3648,-78.0643 39.3508,-78.0708 39.3361,-78.0766 39.3214,-78.0825 39.3067,-78.0856 39.2989)
+LINESTRING(-76.4016 39.0064,-76.4104 39.0196,-76.4349 39.0273,-76.4621 39.0258,-76.4884 39.0182,-76.51 39.0072,-76.5218 38.9991,-76.5352 38.99,-76.5495 38.9821,-76.5643 38.9778,-76.5733 38.9772,-76.5825 38.9774,-76.5918 38.9775,-76.601 38.9767)
+LINESTRING(-76.601 38.9767,-76.6043 38.9857,-76.6108 38.9954,-76.6193 39.004,-76.629 39.01,-76.6284 39.0151,-76.6277 39.0201,-76.6271 39.0252,-76.6264 39.0303,-76.6323 39.0371,-76.6383 39.0439,-76.644 39.0508,-76.6498 39.0577,-76.6474 39.0615,-76.6417 39.0692,-76.6357 39.0776,-76.6323 39.0834,-76.6304 39.1009,-76.6349 39.1182,-76.643 39.135,-76.6522 39.1511,-76.6523 39.1678,-76.6426 39.1889,-76.6303 39.2104,-76.6228 39.2279)
+LINESTRING(-120.038 39.7739,-120.039 39.7596,-120.039 39.7448,-120.037 39.73,-120.034 39.7159,-120.026 39.7048,-120.009 39.6844,-120.002 39.6757)
+LINESTRING(-82.4157 40.7793,-82.4251 40.767,-82.4336 40.7543,-82.4425 40.7418,-82.4533 40.7303,-82.4744 40.7153,-82.4974 40.7025,-82.52 40.6891,-82.54 40.6727,-82.5573 40.6509,-82.5714 40.6278,-82.5851 40.6047,-82.6011 40.5829,-82.6135 40.5743,-82.631 40.567,-82.6491 40.56,-82.6634 40.5524,-82.6773 40.5397,-82.6904 40.5246,-82.7029 40.509,-82.7152 40.4948,-82.7335 40.4806,-82.761 40.4637,-82.7899 40.4476,-82.8123 40.4356,-82.8159 40.432,-82.8195 40.4168,-82.8234 40.3959,-82.8281 40.3761,-82.8337 40.3643,-82.8544 40.3507,-82.8841 40.3335,-82.9111 40.316,-82.9238 40.3015,-82.9274 40.2728,-82.9298 40.2442,-82.9314 40.2156,-82.9328 40.1867,-82.9387 40.1776,-82.9513 40.1687,-82.9644 40.159,-82.9717 40.1476,-82.9734 40.138,-82.9751 40.1283,-82.9769 40.1187,-82.9786 40.109)
+LINESTRING(-77.4364 39.3992,-77.4233 39.3823,-77.393 39.3543,-77.3602 39.325,-77.3395 39.3044,-77.3344 39.2943,-77.3314 39.2833,-77.3285 39.2724,-77.3236 39.2626,-77.3136 39.2522,-77.3012 39.2425,-77.2884 39.233,-77.2774 39.2231,-77.2715 39.2159,-77.2665 39.2081,-77.2615 39.2002,-77.2561 39.1927,-77.2269 39.1575,-77.2002 39.1229,-77.177 39.087,-77.1584 39.0476,-77.1526 39.0379,-77.1484 39.0326,-77.0975 39.0016,-77.0609 38.9801)
+LINESTRING(-79.4779 39.6488,-79.5171 39.6481,-79.5784 39.6491,-79.638 39.6522,-79.6732 39.6578,-79.713 39.6465,-79.7692 39.6483,-79.8276 39.6526,-79.874 39.6491,-79.8937 39.6273,-79.9248 39.6103,-79.9552 39.5925,-79.9732 39.5685)
+LINESTRING(-80.0621 39.7219,-80.0621 39.7219,-80.0604 39.7177,-80.0576 39.7137,-80.0542 39.71,-80.0509 39.7063,-80.0326 39.6823,-80.0174 39.658,-80.0027 39.6335,-79.9863 39.6089,-79.9822 39.5994,-79.9806 39.5891,-79.9786 39.5786,-79.9732 39.5685)
+LINESTRING(-112.013 41.1791,-112.014 41.173,-112.013 41.1613,-112.015 41.1508,-112.015 41.1403,-112.013 41.1286,-112.005 41.107,-111.991 41.0896,-111.973 41.0737,-111.952 41.0564,-111.925 41.0319,-111.903 41.0089,-111.886 40.9839,-111.876 40.9536,-111.872 40.9222,-111.874 40.8941,-111.88 40.8664,-111.892 40.836,-111.9 40.8231,-111.908 40.8119,-111.913 40.8006,-111.914 40.7873,-111.912 40.7818,-111.908 40.7723,-111.906 40.7668)
+LINESTRING(-90.3327 40.9849,-90.3346 41.0523,-90.3364 41.1227,-90.3349 41.1927,-90.3268 41.259,-90.3264 41.2683,-90.3276 41.2787,-90.3294 41.2893,-90.3303 41.2989,-90.3303 41.329,-90.3297 41.3589,-90.3283 41.3887,-90.3262 41.4188,-90.3261 41.4228,-90.3264 41.4268,-90.327 41.4307,-90.3276 41.4347,-90.3295 41.4366,-90.3313 41.4385,-90.3332 41.4404,-90.335 41.4423)
+LINESTRING(-76.601 38.9767,-76.618 38.9736,-76.6329 38.9674,-76.6473 38.9605,-76.6628 38.9549,-76.6671 38.9541,-76.6716 38.9537,-76.6761 38.9535,-76.6806 38.9533,-76.6954 38.9533,-76.7102 38.9537,-76.725 38.954,-76.7397 38.9536,-76.7549 38.9519,-76.7699 38.9494,-76.785 38.9472,-76.8002 38.9462,-76.8178 38.9471,-76.8344 38.9494,-76.8507 38.9523,-76.8675 38.9547,-76.8734 38.9533,-76.8793 38.9517,-76.8849 38.9497,-76.8901 38.9471,-76.8974 38.9359,-76.9041 38.9269,-76.914 38.9205,-76.9311 38.917)
+LINESTRING(-76.6228 39.2279,-76.6277 39.2287,-76.6326 39.2294,-76.6375 39.2301,-76.6424 39.2308,-76.652 39.2181,-76.6684 39.2054,-76.6866 39.1934,-76.7017 39.1827,-76.7512 39.1388,-76.7905 39.0956,-76.8238 39.0492,-76.8553 38.9959,-76.8622 38.9895,-76.8724 38.9849,-76.8834 38.9807,-76.8928 38.9753,-76.9045 38.9623,-76.9137 38.9473,-76.9221 38.9317,-76.9311 38.917)
+LINESTRING(-120.002 39.6757,-119.992 39.6645,-119.982 39.6549,-119.976 39.6528,-119.969 39.6512,-119.963 39.6497,-119.956 39.6477,-119.95 39.6448,-119.944 39.6413,-119.938 39.6379,-119.932 39.6352,-119.894 39.628,-119.86 39.6181,-119.832 39.603,-119.812 39.58)
+LINESTRING(-76.9311 38.917,-76.9374 38.9173,-76.9424 38.9176)
+LINESTRING(-76.9424 38.9176,-76.9436 38.9177,-76.9498 38.9181,-76.956 38.9184)
+LINESTRING(-77.0609 38.9801,-77.0503 38.9739,-77.0031 38.9462,-76.956 38.9184)
+LINESTRING(-76.956 38.9184,-76.9683 38.9161,-76.9806 38.9138,-76.9928 38.9115,-77.0051 38.9091)
+LINESTRING(-114.04 40.7412,-114.033 40.7424,-114.023 40.7494,-114.012 40.7505,-113.996 40.7463,-113.988 40.7454,-113.98 40.7451,-113.695 40.7382,-113.411 40.7313,-113.336 40.7287,-113.233 40.7264,-113.13 40.7295,-113.056 40.743,-113.018 40.7606,-112.981 40.7806,-112.944 40.8018,-112.909 40.823,-112.898 40.8235,-112.875 40.8107,-112.838 40.7906,-112.804 40.772,-112.786 40.7635,-112.745 40.7402,-112.704 40.7151,-112.643 40.6981,-112.57 40.6852,-112.5 40.6827,-112.47 40.6773,-112.433 40.6737,-112.395 40.6723,-112.359 40.6732,-112.346 40.6742,-112.33 40.676,-112.315 40.6785,-112.303 40.6819,-112.285 40.6888,-112.27 40.6928,-112.255 40.6972,-112.24 40.7057,-112.215 40.7189,-112.169 40.7395,-112.121 40.7599,-112.092 40.7724,-112.069 40.7743,-112.042 40.7777,-112.014 40.7789,-111.985 40.7744,-111.971 40.7718,-111.948 40.7681,-111.925 40.7648,-111.906 40.7668)
+LINESTRING(-111.906 40.7668,-111.896 40.7564,-111.881 40.748,-111.867 40.7392,-111.859 40.7281,-111.859 40.7181)
+LINESTRING(-120.002 39.4965,-119.982 39.5062,-119.961 39.516,-119.936 39.5275,-119.927 39.5378,-119.919 39.5488,-119.911 39.5584,-119.898 39.564,-119.877 39.568,-119.855 39.572,-119.834 39.576,-119.812 39.58)
+LINESTRING(-77.0569 38.8945,-77.0512 38.8957,-77.0399 38.8979,-77.0279 38.9015,-77.0161 38.9055,-77.0051 38.9091)
+LINESTRING(-95.5802 41.492,-95.6174 41.4231,-95.678 41.3586,-95.7511 41.3062,-95.826 41.2735)
+LINESTRING(-95.9342 41.4886,-95.928 41.4859,-95.9038 41.4758,-95.8933 41.4639,-95.8947 41.4478,-95.8961 41.4317,-95.8975 41.4157,-95.8988 41.3996,-95.898 41.3894,-95.8943 41.3796,-95.8883 41.3704,-95.8805 41.362,-95.8573 41.344,-95.8369 41.3296,-95.8229 41.3137,-95.8187 41.2911,-95.8194 41.2867,-95.8209 41.2823,-95.8231 41.2779,-95.826 41.2735)
+LINESTRING(-111.443 40.9693,-111.44 40.9663,-111.437 40.9634,-111.435 40.9604,-111.432 40.9575,-111.429 40.9565,-111.426 40.9556,-111.423 40.9503,-111.419 40.9449,-111.416 40.9397,-111.411 40.9347,-111.412 40.9323,-111.413 40.9299,-111.414 40.9276,-111.415 40.9252,-111.402 40.9094,-111.397 40.891,-111.395 40.8716,-111.393 40.8529,-111.391 40.8515,-111.388 40.85,-111.386 40.8485,-111.383 40.847,-111.386 40.8355,-111.39 40.826,-111.396 40.8173,-111.406 40.8081,-111.43 40.8048,-111.442 40.7975,-111.451 40.7874,-111.465 40.7752,-111.468 40.768,-111.469 40.7606,-111.471 40.7532,-111.471 40.7458,-111.478 40.7423,-111.484 40.7388,-111.491 40.7353,-111.498 40.7318)
+LINESTRING(-77.0051 38.9091,-77.008 38.9032,-77.0111 38.8962,-77.0133 38.8891,-77.0136 38.8829,-77.018 38.8829,-77.0224 38.8829,-77.0269 38.8829,-77.0313 38.8829,-77.0346 38.8806,-77.0379 38.8783,-77.0414 38.8757,-77.0435 38.8735,-77.0465 38.8705)
+LINESTRING(-111.498 40.7318,-111.503 40.7297,-111.507 40.7276,-111.512 40.7254,-111.517 40.7233,-111.533 40.7256,-111.551 40.7311,-111.566 40.7396,-111.575 40.7507,-111.58 40.7517,-111.585 40.7528,-111.59 40.7538,-111.595 40.7549,-111.605 40.75,-111.615 40.7452,-111.625 40.7403,-111.635 40.7355,-111.642 40.736,-111.651 40.7364,-111.661 40.7364,-111.668 40.7356,-111.679 40.7394,-111.691 40.7441,-111.702 40.7495,-111.712 40.7552,-111.728 40.7466,-111.756 40.7317,-111.783 40.7176,-111.796 40.7113,-111.82 40.7162,-111.849 40.7181,-111.859 40.7181)
+LINESTRING(-104.837 41.2175,-104.84 41.2545,-104.849 41.2915,-104.86 41.3284,-104.869 41.3654,-104.871 41.3849,-104.872 41.4063,-104.874 41.4274,-104.878 41.4456,-104.885 41.4616,-104.895 41.4809,-104.902 41.5008,-104.901 41.5183,-104.884 41.5589,-104.862 41.6084,-104.842 41.6583,-104.829 41.6996,-104.828 41.7127,-104.828 41.7273,-104.829 41.7419,-104.829 41.7555,-104.824 41.7585,-104.821 41.7602,-104.818 41.7614,-104.814 41.7628,-104.807 41.7689,-104.8 41.775,-104.795 41.782,-104.796 41.7906,-104.822 41.8268,-104.858 41.8611,-104.899 41.8923,-104.942 41.919,-104.945 41.9302,-104.948 41.9414,-104.949 41.9526,-104.952 41.9638,-104.957 41.9937,-104.961 42.0294,-104.964 42.0605,-104.966 42.0768,-104.97 42.0825,-104.976 42.088,-104.982 42.0935,-104.986 42.0991,-104.99 42.1087,-104.993 42.1177,-104.996 42.1268,-105.001 42.1363,-104.997 42.1614,-105 42.1843,-105.009 42.2069,-105.022 42.2308)
+LINESTRING(-119.242 39.6027,-119.217 39.6119,-119.181 39.637,-119.13 39.674,-119.08 39.7109,-119.052 39.7355,-119.022 39.7746,-119.005 39.8004,-118.982 39.8218,-118.934 39.8471,-118.914 39.8556,-118.894 39.8641,-118.875 39.8729,-118.856 39.882,-118.835 39.8942,-118.802 39.9136,-118.768 39.9315,-118.744 39.9394)
+LINESTRING(-119.812 39.58,-119.791 39.584,-119.774 39.5862,-119.758 39.5863,-119.743 39.5845,-119.726 39.5812,-119.71 39.5771,-119.695 39.5732,-119.681 39.5711,-119.664 39.5722,-119.635 39.5822,-119.59 39.6109,-119.561 39.6209,-119.548 39.6226,-119.537 39.6231,-119.526 39.6233,-119.513 39.6237,-119.456 39.6338,-119.444 39.6352,-119.425 39.6366,-119.406 39.6374,-119.392 39.6375,-119.377 39.6364,-119.364 39.6348,-119.352 39.6329,-119.338 39.6308,-119.311 39.6256,-119.289 39.6188,-119.268 39.6109,-119.242 39.6027)
+LINESTRING(-95.826 41.2735,-95.8446 41.2567,-95.8709 41.2441,-95.874 41.2436)
+LINESTRING(-95.9049 41.2391,-95.9015 41.2386,-95.874 41.2436)
+LINESTRING(-82.9786 40.109,-82.9894 40.0867,-82.9906 40.0646,-82.9875 40.042,-82.9852 40.0179,-82.9858 40.0018,-82.9869 39.9848,-82.9867 39.9678,-82.9836 39.9517)
+LINESTRING(-82.927 39.9274,-82.8957 39.9345,-82.8591 39.9363,-82.8223 39.9352,-82.7903 39.9337,-82.7784 39.9354,-82.7675 39.9398,-82.7568 39.9442,-82.7454 39.946,-82.6927 39.9447,-82.6398 39.9431,-82.5869 39.942,-82.5342 39.9417,-82.5096 39.9426,-82.4848 39.9441,-82.4599 39.9453,-82.4353 39.9453,-82.3944 39.9429,-82.3539 39.9396,-82.3133 39.9367,-82.2721 39.9356,-82.2676 39.9359,-82.2631 39.9361,-82.2007 39.9403,-82.1381 39.9429,-82.0754 39.9452,-82.013 39.9485,-81.9767 39.9543,-81.9404 39.9641,-81.9045 39.9742,-81.8693 39.9805,-81.8566 39.9789,-81.8415 39.9739,-81.8265 39.968,-81.8137 39.9639,-81.8037 39.964,-81.7908 39.9664,-81.7777 39.9695,-81.7674 39.9718,-81.7468 39.9736,-81.7256 39.9736,-81.7045 39.9736,-81.6839 39.9754,-81.6732 39.979,-81.6629 39.9854,-81.6539 39.9931,-81.647 40.0005,-81.6287 40.0009,-81.5981 39.9997,-81.5713 39.9981,-81.5444 39.9966)
+LINESTRING(-82.927 39.9274,-82.9412 39.9335,-82.9553 39.9396,-82.9694 39.9456,-82.9836 39.9517)
+LINESTRING(-104.852 41.1153,-104.852 41.1214,-104.849 41.1268,-104.844 41.1322,-104.841 41.1377,-104.837 41.1559,-104.836 41.1765,-104.836 41.1973,-104.837 41.2157,-104.837 41.2175)
+LINESTRING(-82.9836 39.9517,-82.9872 39.939,-82.9947 39.9147,-82.9983 39.902,-83.0004 39.8975,-83.0038 39.894,-83.0079 39.8909,-83.0135 39.8865)
+LINESTRING(-107.183 41.7887,-107.169 41.7885,-107.155 41.7883,-107.142 41.7881,-107.128 41.7879,-107.117 41.7829,-107.109 41.7835,-107.102 41.7841,-107.068 41.7728,-107.01 41.76,-106.949 41.7494,-106.907 41.7445,-106.873 41.7441,-106.837 41.7446,-106.801 41.7446,-106.769 41.7428,-106.755 41.7401,-106.741 41.736,-106.728 41.7318,-106.714 41.7291,-106.704 41.7288,-106.694 41.7293,-106.671 41.7305,-106.648 41.7327,-106.625 41.7347,-106.602 41.735,-106.594 41.7344,-106.572 41.7382,-106.552 41.7437,-106.533 41.7494,-106.514 41.7542,-106.484 41.7338,-106.448 41.7201,-106.412 41.7077,-106.382 41.6913,-106.377 41.679,-106.373 41.6718,-106.346 41.6552,-106.309 41.6406,-106.271 41.6276,-106.244 41.6204,-106.238 41.6145,-106.232 41.6085,-106.227 41.6025,-106.221 41.5965,-106.21 41.5977,-106.192 41.589,-106.174 41.5787,-106.155 41.5691,-106.136 41.5622,-106.126 41.5608,-106.116 41.5605,-106.107 41.5588,-106.096 41.553,-106.087 41.5457,-106.078 41.5385,-106.069 41.5307,-106.061 41.5234,-106.05 41.5086,-106.047 41.4993,-
106.038 41.4906,-106.01 41.4777,-106.009 41.4722,-106.008 41.4667,-105.985 41.4516,-105.949 41.4399,-105.911 41.4321,-105.881 41.4288,-105.806 41.3786,-105.771 41.3591,-105.728 41.3534,-105.627 41.3445,-105.618 41.3375,-105.618 41.3294,-105.616 41.319,-105.613 41.3089,-105.607 41.3019,-105.587 41.2974,-105.567 41.292,-105.547 41.2876,-105.525 41.2863,-105.511 41.2772,-105.491 41.2705,-105.469 41.2641,-105.45 41.2562,-105.447 41.2295,-105.436 41.2022,-105.419 41.1765,-105.399 41.1544,-105.388 41.1491,-105.366 41.1413,-105.343 41.133,-105.327 41.1261,-105.293 41.1241,-105.257 41.1139,-105.22 41.1016,-105.186 41.0931,-105.163 41.0923,-105.141 41.0947,-105.119 41.098,-105.098 41.1002,-105.082 41.1002,-105.067 41.0998,-105.052 41.1004,-105.036 41.1034,-105.025 41.1011,-105.015 41.0988,-105.008 41.1,-105 41.1023,-104.992 41.1055,-104.962 41.1117,-104.922 41.1145,-104.881 41.1163,-104.852 41.1153)
+LINESTRING(-104.052 41.1386,-104.047 41.1411,-104.026 41.152,-104.004 41.1606,-103.981 41.1665,-103.956 41.1692,-103.911 41.1698,-103.837 41.1682,-103.792 41.1688,-103.753 41.1735,-103.72 41.1832,-103.689 41.1954,-103.658 41.2077)
+LINESTRING(-78.0856 39.2989,-78.0889 39.2906,-78.0959 39.2745,-78.1048 39.259,-78.1171 39.2451,-78.1236 39.2406,-78.1313 39.2363,-78.138 39.2314,-78.1418 39.2254,-78.1399 39.2151,-78.1337 39.2035,-78.1284 39.1921,-78.1295 39.1827,-78.1444 39.1648,-78.1606 39.1473,-78.1764 39.1297,-78.1902 39.1117,-78.1945 39.1031,-78.1972 39.0943,-78.1995 39.0856,-78.2027 39.0769,-78.2045 39.0746,-78.2074 39.0718,-78.2101 39.0694,-78.2129 39.0671,-78.2267 39.0553,-78.2406 39.0435,-78.2544 39.0318,-78.2682 39.02,-78.2748 39.0171,-78.2831 39.0149,-78.2917 39.0132,-78.2991 39.0122)
+LINESTRING(-104.852 41.1153,-104.831 41.1165,-104.825 41.1156,-104.819 41.1148,-104.812 41.1147,-104.762 41.1169,-104.723 41.1243,-104.691 41.1383,-104.659 41.1529,-104.62 41.1617,-104.503 41.1521,-104.428 41.1552,-104.388 41.1523,-104.355 41.1421,-104.323 41.1281,-104.288 41.1134,-104.264 41.1092,-104.231 41.1071,-104.197 41.1066,-104.172 41.1071,-104.137 41.1098,-104.106 41.1158,-104.077 41.1259,-104.052 41.1386)
+LINESTRING(-78.2991 39.0122,-78.2902 39.0043,-78.2796 38.9962,-78.2684 38.9887,-78.2576 38.9828,-78.236 38.9739,-78.2134 38.9664,-78.1907 38.9588,-78.1688 38.9501,-78.1531 38.9422,-78.1379 38.9338,-78.1227 38.9254,-78.1069 38.9176,-78.0594 38.9164,-78.0109 38.9124,-77.9636 38.904,-77.9198 38.8896,-77.8992 38.8794,-77.8813 38.8698,-77.8621 38.8616,-77.8378 38.8559,-77.8083 38.8638,-77.7742 38.8577,-77.7404 38.8453,-77.7119 38.8342,-77.6969 38.83,-77.6829 38.8274,-77.6688 38.8257,-77.6537 38.8243,-77.6426 38.8216,-77.6325 38.8168)
+LINESTRING(-77.6325 38.8168,-77.6229 38.8114,-77.6133 38.8069,-77.6097 38.8062,-77.6061 38.8054,-77.6025 38.8047,-77.5988 38.804,-77.5943 38.8032,-77.5898 38.8024,-77.5853 38.8016,-77.5808 38.8008,-77.5754 38.8,-77.57 38.7991,-77.5646 38.7983,-77.5593 38.7974,-77.5125 38.8021,-77.4756 38.8179,-77.4484 38.8356,-77.4309 38.8457,-77.4028 38.8517,-77.3729 38.8565,-77.3428 38.861,-77.3139 38.8659,-77.2914 38.8701,-77.2687 38.8741,-77.2461 38.8781,-77.2235 38.8824,-77.2136 38.8859,-77.2042 38.8911,-77.1944 38.8957,-77.1834 38.898,-77.1725 38.8964,-77.1633 38.8922,-77.1541 38.8875,-77.1431 38.8845,-77.1132 38.8835,-77.0903 38.8868,-77.0709 38.8917,-77.0569 38.8945)
+LINESTRING(-89.4855 40.6202,-89.5381 40.6355,-89.5715 40.6502,-89.5915 40.6623,-89.6042 40.6696,-89.6065 40.676,-89.6125 40.6907,-89.6212 40.7071,-89.6315 40.7184,-89.6447 40.7238,-89.6646 40.7297,-89.6854 40.7356,-89.7011 40.7407,-89.726 40.7527,-89.7481 40.7651,-89.7704 40.7772,-89.7956 40.7882,-89.8287 40.8031,-89.8602 40.8206,-89.8924 40.8369,-89.9277 40.8486,-89.9409 40.8502,-89.9543 40.8503,-89.9678 40.8499,-89.9812 40.8502,-90.0021 40.8533,-90.0276 40.859,-90.0534 40.8654,-90.0749 40.8707,-90.0875 40.8748,-90.0993 40.8801,-90.1111 40.8855,-90.1237 40.8898,-90.1722 40.8983,-90.2214 40.9038,-90.2699 40.9121,-90.3162 40.9292,-90.3297 40.941,-90.3339 40.9548,-90.3333 40.9698,-90.3327 40.9849)
+LINESTRING(-104.907 40.9995,-104.905 41.0071,-104.903 41.0148,-104.901 41.0226,-104.899 41.0302,-104.896 41.0324,-104.891 41.0478,-104.876 41.0675,-104.861 41.0903,-104.852 41.1153)
+LINESTRING(-80.2693 39.2822,-80.2611 39.294,-80.2483 39.3037,-80.2353 39.314,-80.226 39.3272,-80.2201 39.3526,-80.2172 39.3791,-80.2118 39.4052,-80.1984 39.4292,-80.1927 39.434,-80.1861 39.4374,-80.1789 39.4402,-80.1714 39.4434,-80.1394 39.461,-80.109 39.4802,-80.0795 39.5001,-80.0501 39.52,-80.0386 39.523,-80.0253 39.5218,-80.0113 39.5213,-79.9977 39.5264,-79.988 39.5364,-79.9829 39.5471,-79.9792 39.558,-79.9732 39.5685)
+LINESTRING(-80.2693 39.2822,-80.2914 39.2811,-80.319 39.2804,-80.3453 39.2817,-80.3638 39.2865)
+LINESTRING(-100.771 41.1021,-100.784 41.102,-100.797 41.1019,-100.81 41.1018,-100.822 41.1017,-100.884 41.1067,-100.939 41.1119,-100.993 41.1158,-101.056 41.1169,-101.074 41.1172,-101.091 41.1173,-101.106 41.1155,-101.122 41.11,-101.141 41.0992,-101.157 41.0884,-101.173 41.0784,-101.194 41.07,-101.232 41.0621,-101.267 41.0608,-101.303 41.0625,-101.343 41.0636,-101.387 41.0633,-101.425 41.0637,-101.464 41.0642,-101.507 41.0646,-101.564 41.0679,-101.614 41.0715,-101.663 41.0743,-101.717 41.0754)
+LINESTRING(-103.658 41.2077,-103.641 41.2134,-103.623 41.2182,-103.604 41.2215,-103.583 41.2232,-103.551 41.2214,-103.524 41.2157,-103.497 41.2091,-103.465 41.2044,-103.423 41.2022,-103.348 41.2012,-103.306 41.199,-103.271 41.1934,-103.243 41.1837,-103.215 41.1718,-103.134 41.14,-103.092 41.1224,-103.049 41.1101,-102.996 41.1063,-102.902 41.1062,-102.83 41.1075,-102.818 41.1037,-102.629 41.1084,-102.622 41.109,-102.608 41.1114,-102.601 41.112,-102.553 41.1083,-102.513 41.0973,-102.473 41.0827,-102.427 41.0684,-102.348 41.0499,-102.277 41.0358,-102.207 41.0196,-102.155 41.0023)
+LINESTRING(-102.101 41.0021,-102.084 41.0083,-102.038 41.0195,-101.991 41.0276,-101.936 41.0358,-101.911 41.0388,-101.888 41.0404,-101.866 41.0429,-101.841 41.0485,-101.814 41.0575,-101.79 41.066,-101.766 41.0724,-101.737 41.0753,-101.727 41.0754,-101.717 41.0754)
+LINESTRING(-102.127 40.993,-102.101 41.0021)
+LINESTRING(-102.155 41.0023,-102.127 40.993)
+LINESTRING(-84.2117 39.8586,-84.2157 39.8817,-84.2178 39.9054,-84.22 39.9292,-84.2242 39.9528,-84.233 39.9693,-84.2465 39.9839,-84.2592 39.9985,-84.2653 40.0152,-84.2656 40.031,-84.2659 40.0468,-84.266 40.0676,-84.2657 40.0778,-84.2438 40.1091,-84.2218 40.1295,-84.2072 40.1499,-84.2076 40.1815,-84.2018 40.2007,-84.2023 40.2224,-84.205 40.2444,-84.2059 40.2647,-84.1934 40.2914,-84.1688 40.3118,-84.1446 40.3304,-84.1334 40.3519,-84.136 40.3768,-84.1426 40.3959,-84.1498 40.4145,-84.1541 40.4379,-84.1591 40.4672,-84.1641 40.4965,-84.1691 40.5258,-84.1741 40.5551,-84.1697 40.5741,-84.158 40.5978,-84.1439 40.6211,-84.1325 40.6391,-84.1287 40.6533,-84.1278 40.6703,-84.1234 40.6867,-84.1096 40.6988,-84.0998 40.6989,-84.0902 40.6993,-84.0819 40.7015,-84.0758 40.707,-84.0775 40.7474,-84.0744 40.7659,-84.0543 40.781,-84.0046 40.8108)
+LINESTRING(-81.4454 39.3964,-81.4415 39.4061,-81.4381 39.4105,-81.4335 39.4144,-81.4288 39.4182,-81.4251 39.4226,-81.4327 39.4382,-81.4366 39.4469,-81.4369 39.4548,-81.434 39.468,-81.436 39.4758,-81.4427 39.4851,-81.4497 39.4952,-81.4525 39.5058,-81.4527 39.523,-81.4548 39.539,-81.4578 39.5548,-81.4605 39.5716,-81.4583 39.612,-81.4541 39.6457,-81.4682 39.6724,-81.521 39.6922,-81.5337 39.7154,-81.5505 39.7381,-81.5661 39.7604,-81.5754 39.7824,-81.5735 39.7855,-81.5717 39.7887,-81.5647 39.7922,-81.5571 39.7974,-81.5504 39.8031,-81.5463 39.8085,-81.5374 39.8383,-81.5258 39.8876,-81.5165 39.9358,-81.5143 39.9619,-81.519 39.9683,-81.5285 39.9795,-81.5385 39.9905,-81.5444 39.9966)
+LINESTRING(-89.4855 40.6202,-89.4597 40.6225,-89.4124 40.6228,-89.3615 40.622,-89.3251 40.621,-89.3135 40.6212,-89.2993 40.6219,-89.2859 40.6224,-89.2766 40.6218,-89.2641 40.6187,-89.2517 40.615,-89.2392 40.6115,-89.2264 40.609,-89.2167 40.6081,-89.2069 40.6077,-89.1972 40.6071,-89.1875 40.6058,-89.1837 40.6051,-89.18 40.6044,-89.1763 40.6037,-89.1725 40.603,-89.1526 40.5894,-89.1298 40.5683,-89.0934 40.5487,-89.0331 40.54,-89.0316 40.539,-89.0301 40.5379,-89.0286 40.5369,-89.0271 40.5359,-89.0298 40.5149,-89.0318 40.4888,-89.0301 40.4629,-89.0217 40.4429)
+LINESTRING(-82.9836 39.9517,-83.0331 39.9744,-83.1153 39.982,-83.1958 39.9816,-83.2406 39.9804,-83.2633 39.9791,-83.2802 39.9742,-83.2961 39.9676,-83.316 39.9613,-83.3428 39.9558,-83.3736 39.9505,-83.4038 39.9455,-83.434 39.9405,-83.4853 39.9365,-83.551 39.9356,-83.6161 39.9342,-83.6659 39.9286,-83.6833 39.9226,-83.6973 39.9146,-83.7098 39.9051,-83.7229 39.895,-83.7332 39.8933,-83.7445 39.8927,-83.7558 39.8925,-83.7666 39.8918,-83.7822 39.8898,-83.7978 39.8875,-83.8135 39.8858,-83.8294 39.8853,-83.853 39.887,-83.8752 39.8898,-83.8981 39.8917,-83.9236 39.8911,-83.9566 39.8836,-83.9769 39.8731,-84.0025 39.8645,-84.0513 39.8628,-84.0659 39.8229,-84.0914 39.8044,-84.118 39.7939,-84.1362 39.7781)
+LINESTRING(-84.2117 39.8586,-84.1928 39.8385,-84.1739 39.8184,-84.1551 39.7982,-84.1362 39.7781)
+LINESTRING(-84.2117 39.8586,-84.2293 39.8613,-84.244 39.8628,-84.2579 39.8636,-84.2705 39.8625,-84.2782 39.8586,-84.2859 39.855,-84.3072 39.8531,-84.3298 39.8525,-84.3524 39.8529,-84.3739 39.8538,-84.4061 39.8508,-84.4297 39.8453,-84.4508 39.8397,-84.4759 39.8363,-84.5306 39.8351,-84.586 39.8358,-84.6414 39.8372,-84.6964 39.8381,-84.7135 39.8369,-84.7306 39.8342,-84.7477 39.8314,-84.7651 39.8301,-84.7806 39.8314,-84.7962 39.8344,-84.8114 39.8372,-84.8139 39.8374)
+LINESTRING(-121.26 38.7535,-121.233 38.7761,-121.191 38.8116,-121.15 38.8458,-121.131 38.865,-121.133 38.8731,-121.127 38.8809,-121.112 38.8849,-121.098 38.8897,-121.084 38.8952,-121.071 38.9011,-121.065 38.9104,-121.058 38.9226,-121.052 38.9349,-121.05 38.9444,-121.021 38.9713,-120.995 39.0042,-120.977 39.0321,-120.97 39.0438,-120.967 39.0525,-120.966 39.0656,-120.968 39.0829,-120.975 39.1043,-120.972 39.1202,-120.951 39.1323,-120.924 39.1424,-120.898 39.1524,-120.882 39.1604,-120.866 39.1685,-120.85 39.1758,-120.832 39.1837,-120.812 39.1925,-120.795 39.2016,-120.78 39.2127,-120.769 39.2276,-120.751 39.2455,-120.734 39.2627,-120.716 39.2782,-120.696 39.2911,-120.682 39.296,-120.664 39.2994,-120.645 39.3023,-120.629 39.3057,-120.615 39.3102,-120.601 39.316,-120.587 39.3224,-120.574 39.3284,-120.563 39.3272,-120.557 39.3218,-120.547 39.315,-120.537 39.3089,-120.529 39.3057,-120.507 39.3088,-120.484 39.3106,-120.462 39.3129,-120.441 39.3177,-120.431 39.3229,-120.42 39.3278,-120.411 39.3291,-120.398 39.3297,-1
20.385 39.3298,-120.376 39.3295,-120.36 39.3349,-120.348 39.3406,-120.335 39.346,-120.32 39.3502,-120.306 39.3506,-120.294 39.3473,-120.281 39.3426,-120.268 39.3386,-120.252 39.3368,-120.238 39.3372,-120.224 39.3393,-120.208 39.3423,-120.2 39.3451,-120.19 39.3546,-120.184 39.3596,-120.175 39.3644,-120.167 39.368,-120.158 39.3715,-120.149 39.3761,-120.138 39.3838,-120.128 39.3911,-120.117 39.3973,-120.103 39.4016,-120.096 39.4022,-120.083 39.4012,-120.076 39.4018,-120.068 39.4051,-120.062 39.4175,-120.059 39.4247,-120.052 39.4417,-120.048 39.4576,-120.041 39.4718,-120.026 39.4838,-120.003 39.4961,-120.002 39.4965)
+LINESTRING(-81.4994 39.2676,-81.4816 39.3012,-81.4679 39.3362,-81.4555 39.3715,-81.4454 39.3964)
+LINESTRING(-97.0441 40.822,-97.0038 40.8226,-96.9536 40.8277,-96.9031 40.8343,-96.8622 40.8392,-96.854 40.8406,-96.8455 40.8427,-96.8369 40.8444,-96.8285 40.8447,-96.8123 40.8412,-96.7965 40.8354,-96.7804 40.8303,-96.7637 40.8289,-96.7518 40.8346,-96.7419 40.8412,-96.7308 40.8439,-96.6994 40.8799,-96.6671 40.8941,-96.6266 40.8963,-96.5708 40.8959,-96.5631 40.8926,-96.5554 40.8892,-96.5039 40.8995,-96.454 40.9263,-96.4078 40.9583,-96.3674 40.9843,-96.3535 40.9907,-96.3387 40.9966,-96.3237 41.0021,-96.3089 41.0076,-96.3039 41.0152,-96.3002 41.0232,-96.2926 41.028,-96.2923 41.0334,-96.293 41.0423,-96.2943 41.0512,-96.296 41.0567,-96.2617 41.0888,-96.2156 41.116,-96.1656 41.1421,-96.1196 41.1709,-96.1083 41.192,-96.105 41.2201,-96.0987 41.2453,-96.0787 41.2578,-96.0356 41.2591,-95.9957 41.256,-95.9609 41.2501,-95.9329 41.2432,-95.9049 41.2391)
+LINESTRING(-81.5684 39.2813,-81.5687 39.2785,-81.5691 39.2752,-81.5694 39.2719,-81.5676 39.2708,-81.5659 39.2698,-81.5641 39.2687,-81.5624 39.2677,-81.5594 39.2682,-81.5454 39.2638,-81.5302 39.265,-81.5146 39.2676,-81.4994 39.2676)
+LINESTRING(-97.5945 40.8214,-97.4831 40.8206,-97.3715 40.8209,-97.26 40.8215,-97.1486 40.8217,-97.1231 40.8222,-97.0957 40.8232,-97.0686 40.8235,-97.0441 40.822)
+LINESTRING(-87.5327 40.116,-87.4657 40.1213,-87.3934 40.1249,-87.3209 40.1266,-87.2487 40.1261)
+LINESTRING(-98.3858 40.8062,-98.3811 40.807,-98.2678 40.8105,-98.0346 40.8157,-97.778 40.8199,-97.5945 40.8214)
+LINESTRING(-86.0541 39.8926,-86.0464 39.9034,-86.0387 39.9141,-86.031 39.9249,-86.0232 39.9356,-86.0198 39.9411,-86.0165 39.947,-86.0129 39.9528,-86.0087 39.9578,-85.9935 39.9647,-85.9622 39.9765,-85.928 39.9878,-85.904 39.9931,-85.8784 39.9937,-85.8393 39.9947,-85.8014 39.9963,-85.7797 39.9988,-85.772 40.006,-85.7671 40.0144,-85.7616 40.0226,-85.7518 40.0295,-85.7156 40.0418,-85.678 40.0496,-85.6394 40.0551,-85.6006 40.0602,-85.5872 40.0715,-85.5783 40.0878,-85.5735 40.1055,-85.5722 40.1208,-85.5728 40.1313,-85.5736 40.1422,-85.574 40.1531,-85.5735 40.1634,-85.569 40.1733,-85.5661 40.1788,-85.565 40.235,-85.5646 40.3044,-85.5594 40.375,-85.5452 40.4308,-85.551 40.4576,-85.5525 40.5032,-85.5524 40.5512,-85.5535 40.5855,-85.5333 40.6123,-85.5131 40.6394,-85.4924 40.6663,-85.4708 40.6924,-85.456 40.7069,-85.4361 40.7245,-85.4147 40.7435,-85.3958 40.7625,-85.388 40.7753,-85.3836 40.789,-85.3786 40.8024,-85.3694 40.814,-85.3619 40.8191,-85.3537 40.8242,-85.3469 40.8302,-85.3436 40.8378,-85.3429 40.8497,-85.3433
40.862,-85.344 40.8744,-85.3446 40.8863,-85.3228 40.9151,-85.2985 40.9507,-85.2744 40.9844,-85.2531 41.008,-85.2529 41.0201,-85.2528 41.0323,-85.2521 41.0444,-85.251 41.0565,-85.2422 41.0642,-85.2307 41.0695,-85.2267 41.0744,-85.2241 41.0807,-85.2231 41.0873,-85.2236 41.093,-85.2072 41.1015,-85.1909 41.1099,-85.1746 41.1184,-85.1583 41.1268)
+LINESTRING(-86.1564 39.9356,-86.1286 39.9276,-86.1025 39.918,-86.0778 39.9064,-86.0541 39.8926)
+LINESTRING(-88.2843 40.1464,-88.2704 40.1599,-88.2565 40.1735,-88.2426 40.1871,-88.2286 40.2007,-88.2004 40.2404,-88.1895 40.2781,-88.1856 40.3097,-88.1781 40.3312,-88.1503 40.3682,-88.1334 40.4003,-88.1221 40.4328,-88.1108 40.4711,-88.1038 40.4865,-88.095 40.5007,-88.0869 40.5155,-88.0824 40.5329,-88.0665 40.5565,-88.0639 40.5797,-88.0611 40.6009,-88.0449 40.6182,-88.0411 40.636,-88.0357 40.6688,-88.0308 40.7029,-88.0288 40.7246,-88.022 40.7301,-88.0154 40.7339,-88.0105 40.7396,-88.0089 40.7507,-88.0092 40.7586,-88.0094 40.7664,-88.0097 40.7742,-88.01 40.782,-88.0066 40.7852,-88.0032 40.7883,-88.0034 40.7989,-88.0037 40.8094,-88.0039 40.82,-88.0042 40.8305,-88.0011 40.8334,-87.9979 40.8363,-87.9893 40.8605,-87.9806 40.8752,-87.9692 40.8904,-87.9525 40.9161,-87.9488 40.9188,-87.9446 40.9194,-87.9404 40.9199,-87.9363 40.921,-87.9329 40.9227,-87.9235 40.9534,-87.906 41.0024,-87.8876 41.0497,-87.8752 41.0758,-87.8667 41.0787,-87.8573 41.0806,-87.8476 41.0825,-87.8384 41.0857,-87.8357 41.0978,-87.8353 41.1191,-
87.836 41.1411,-87.8368 41.1551,-87.8426 41.1609,-87.8502 41.1657,-87.858 41.1711,-87.8643 41.1782,-87.8674 41.2159,-87.8495 41.2617,-87.8268 41.3101,-87.8155 41.3555,-87.783 41.3813,-87.7668 41.4012,-87.7605 41.4236,-87.7573 41.4573,-87.7556 41.4647,-87.7526 41.472,-87.7492 41.4794,-87.7468 41.4866,-87.7437 41.5067,-87.7427 41.5274,-87.7427 41.5481,-87.7429 41.5683)
+LINESTRING(-89.0217 40.4429,-89.0181 40.4383,-89.0145 40.4338,-89.0037 40.4318,-88.9907 40.4323,-88.9769 40.4328,-88.9632 40.4309,-88.9582 40.4284,-88.9525 40.4245,-88.9468 40.4203,-88.9421 40.4172,-88.899 40.396,-88.8539 40.3765,-88.8086 40.3575,-88.7644 40.3374,-88.7409 40.3226,-88.7193 40.3048,-88.6979 40.2866,-88.6751 40.2706,-88.6656 40.266,-88.6588 40.2644,-88.6524 40.2639,-88.6445 40.2622,-88.6364 40.2587,-88.6287 40.2541,-88.6212 40.2492,-88.6134 40.2452,-88.562 40.2304,-88.5066 40.2207,-88.4504 40.2117,-88.3966 40.1986,-88.3589 40.1877,-88.3343 40.1804,-88.3127 40.1692,-88.2843 40.1464)
+LINESTRING(-88.2843 40.1464,-88.2636 40.1361,-88.2439 40.1342,-88.2236 40.1356,-88.2009 40.1351,-88.1939 40.133,-88.1866 40.1293,-88.1793 40.1255,-88.1723 40.123,-88.1597 40.1226,-88.1346 40.1224,-88.1144 40.1223,-88.0941 40.1222,-88.0012 40.1228,-87.9085 40.1247,-87.8157 40.1271,-87.7229 40.1297,-87.7038 40.1176,-87.6825 40.1088,-87.6593 40.1042,-87.6351 40.1049,-87.6164 40.1132,-87.5903 40.1155,-87.5621 40.1152,-87.5374 40.1156,-87.5327 40.116)
+LINESTRING(-82.0659 39.3263,-82.0563 39.3319,-82.0453 39.3366,-82.0338 39.3406,-82.0224 39.3438,-82.0206 39.3433,-82.0188 39.3429,-82.0149 39.3427,-82.011 39.3426,-82.0069 39.3424,-82.0034 39.3419,-81.9962 39.3391,-81.9909 39.3349,-81.9864 39.3302,-81.9815 39.326,-81.973 39.3223,-81.9609 39.3189,-81.9479 39.3153,-81.9364 39.3108,-81.9339 39.3095,-81.9316 39.3081,-81.9267 39.3008,-81.9239 39.2927,-81.9213 39.2846,-81.917 39.2772,-81.9034 39.2637,-81.8876 39.2511,-81.8721 39.2388,-81.8592 39.2261,-81.8498 39.2243,-81.8399 39.2222,-81.83 39.2206,-81.8207 39.2205,-81.7966 39.2325,-81.7709 39.2403,-81.7455 39.2479,-81.7223 39.2593,-81.7092 39.2695,-81.6944 39.281,-81.6779 39.2901,-81.6601 39.2929,-81.6371 39.291,-81.6141 39.289,-81.5911 39.287,-81.5681 39.285,-81.5684 39.2817,-81.5684 39.2813)
+LINESTRING(-93.9253 40.5752,-93.9089 40.5978,-93.8713 40.624,-93.8417 40.657,-93.8338 40.7212,-93.8313 40.7497,-93.8223 40.7793,-93.811 40.8086,-93.802 40.8361,-93.8009 40.8499,-93.8024 40.8644,-93.8045 40.8789,-93.8053 40.8927,-93.8056 40.9258,-93.8075 40.9601,-93.8078 40.9942,-93.8033 41.027,-93.7987 41.0373,-93.7919 41.0462,-93.7856 41.0555,-93.7822 41.0665,-93.7817 41.0819,-93.7827 41.1005,-93.7854 41.1191,-93.7898 41.1345,-93.7869 41.1962,-93.7855 41.3323,-93.7848 41.4813,-93.7842 41.5811)
+LINESTRING(-111.859 40.7181,-111.858 40.6863,-111.866 40.6491,-111.873 40.612,-111.872 40.5701,-111.864 40.5531,-111.853 40.5375,-111.846 40.523,-111.852 40.5091,-111.876 40.4938,-111.903 40.4812,-111.924 40.4674,-111.93 40.4483,-111.927 40.4449,-111.923 40.4418,-111.89 40.4309,-111.859 40.4221,-111.828 40.4148,-111.794 40.4085,-111.762 40.4024,-111.739 40.3942,-111.724 40.3808,-111.714 40.3594,-111.71 40.3331,-111.706 40.3047,-111.699 40.2774,-111.684 40.2547,-111.663 40.2367,-111.642 40.2213,-111.626 40.2048,-111.616 40.1831,-111.618 40.1622,-111.631 40.1456,-111.649 40.1301,-111.67 40.1129)
+LINESTRING(-121.506 38.568,-121.504 38.5826,-121.501 38.5891,-121.503 38.5993,-121.515 38.6245,-121.521 38.6344,-121.527 38.6443,-121.533 38.6567,-121.537 38.6645,-121.568 38.6712,-121.628 38.6725,-121.691 38.6716,-121.734 38.6715,-121.744 38.6773,-121.749 38.6824,-121.752 38.689,-121.757 38.6992,-121.765 38.7002,-121.772 38.7012,-121.779 38.7022,-121.786 38.7032,-121.834 38.7474,-121.883 38.791,-121.93 38.8354,-121.974 38.8823,-122.008 38.9279,-122.057 39.0004,-122.104 39.0739,-122.133 39.1225,-122.135 39.1296,-122.134 39.1363,-122.133 39.1426,-122.134 39.1488,-122.147 39.1708,-122.161 39.1921,-122.174 39.214,-122.178 39.2381,-122.169 39.2454,-122.162 39.252,-122.156 39.2578,-122.154 39.2629,-122.16 39.2721,-122.173 39.28,-122.186 39.2879,-122.196 39.2971,-122.199 39.3647,-122.205 39.4394,-122.212 39.4999,-122.216 39.5248,-122.215 39.5475,-122.212 39.5701,-122.209 39.5926,-122.206 39.6152,-122.205 39.6451,-122.205 39.6757,-122.207 39.7063,-122.207 39.7363,-122.206 39.7751,-122.205 39.814,-122.203 39.853,-1
22.202 39.892,-122.201 39.9119,-122.2 39.9318,-122.2 39.9518,-122.2 39.9718,-122.205 40.014,-122.212 40.0561,-122.219 40.0984,-122.222 40.141,-122.221 40.15,-122.22 40.1618,-122.22 40.1734,-122.223 40.1818)
+LINESTRING(-87.3243 41.4688,-87.3256 41.4491,-87.321 41.4252,-87.3193 41.4021,-87.3295 41.3844,-87.3229 41.3691,-87.3154 41.3536,-87.3083 41.3381,-87.303 41.3228,-87.2991 41.293,-87.299 41.2625,-87.2989 41.2316,-87.2943 41.2008,-87.2893 41.1893,-87.2804 41.1723,-87.2681 41.1501,-87.269 41.114,-87.2711 41.0781,-87.2733 41.0421,-87.2745 41.0058,-87.2675 41.0013,-87.2475 40.9732,-87.2301 40.9467,-87.2134 40.92,-87.1979 40.8928,-87.1889 40.8748,-87.1804 40.8565,-87.1717 40.8383,-87.1619 40.8205,-87.1494 40.8027,-87.1348 40.7855,-87.1197 40.7685,-87.1055 40.7513,-87.0918 40.7322,-87.0695 40.7019,-87.0464 40.6739,-87.0302 40.6614,-86.9928 40.6133,-86.9609 40.579,-86.9237 40.5453,-86.87 40.4991,-86.8597 40.4937,-86.8538 40.4798,-86.8507 40.465,-86.8487 40.4499,-86.8461 40.4353,-86.8331 40.4241,-86.8193 40.4138,-86.8059 40.4032,-86.794 40.3914,-86.7822 40.374,-86.7704 40.353,-86.7576 40.3333,-86.7431 40.3199,-86.6933 40.2932,-86.6687 40.2786,-86.6483 40.2633,-86.6157 40.2319,-86.5848 40.1986,-86.5547 40.1649,-86.52
41 40.1319,-86.5235 40.1256,-86.5125 40.1054,-86.5043 40.0866,-86.4973 40.0677,-86.4898 40.0471,-86.4763 40.0375,-86.4613 40.0323,-86.4474 40.0288,-86.4376 40.0245,-86.4116 40.004,-86.3839 39.9828,-86.3574 39.9611,-86.3351 39.9391,-86.3201 39.9189,-86.3074 39.8977,-86.2942 39.8763,-86.2754 39.8547)
+LINESTRING(-121.26 38.7535,-121.283 38.7272,-121.327 38.6859,-121.377 38.6458,-121.418 38.6229,-121.423 38.6164,-121.432 38.6052,-121.443 38.5934,-121.451 38.5852,-121.46 38.581,-121.466 38.5742,-121.47 38.5659,-121.473 38.5572)
+LINESTRING(-84.8139 39.8374,-84.8258 39.8381,-84.8292 39.843,-84.834 39.8473,-84.8395 39.8513,-84.8446 39.8553,-84.877 39.8736,-84.9075 39.8737,-84.9396 39.8655,-84.977 39.8586,-85.007 39.858,-85.0371 39.8574,-85.0672 39.8567,-85.0973 39.8561,-85.1481 39.8555,-85.1983 39.8557,-85.2483 39.8565,-85.2987 39.8576,-85.3294 39.8574,-85.3602 39.856,-85.391 39.8543,-85.4216 39.8533,-85.443 39.8535,-85.4656 39.8542,-85.4882 39.8543,-85.5091 39.8526,-85.5214 39.8496,-85.5342 39.8443,-85.5456 39.8375,-85.5537 39.8298,-85.5774 39.8289,-85.6009 39.8282,-85.6244 39.8275,-85.6478 39.8269,-85.7053 39.8259,-85.7886 39.825,-85.8692 39.8231,-85.9186 39.8194,-85.956 39.81,-85.9766 39.8036,-86.0008 39.8008,-86.0463 39.8006)
+LINESTRING(-86.0541 39.8926,-86.053 39.8698,-86.0507 39.8468,-86.0481 39.8237,-86.0463 39.8006)
+LINESTRING(-87.2487 40.1261,-87.1648 40.1215,-87.0544 40.1086,-86.9439 40.0906,-86.86 40.0711,-86.8346 40.0606,-86.8151 40.048,-86.7972 40.0341,-86.7763 40.0196,-86.7582 40.0111,-86.7397 40.0053,-86.7211 39.9999,-86.7027 39.9927,-86.6579 39.9694,-86.5922 39.9351,-86.5268 39.9032,-86.4833 39.8871,-86.4719 39.8861,-86.4599 39.886,-86.4477 39.8859,-86.4359 39.8853,-86.4149 39.8715,-86.392 39.8577,-86.3682 39.845,-86.3443 39.8344,-86.3235 39.8337,-86.3009 39.8411,-86.2828 39.8502,-86.2754 39.8547)
+LINESTRING(-89.4122 40.1798,-89.3897 40.1799,-89.3673 40.1803,-89.3449 40.1809,-89.3225 40.1816,-89.3093 40.1911,-89.2974 40.2017,-89.286 40.2126,-89.2742 40.2232,-89.2616 40.2322,-89.2485 40.2393,-89.2353 40.2458,-89.2223 40.253,-89.2135 40.2608,-89.2098 40.2682,-89.2075 40.2754,-89.2029 40.2825,-89.1938 40.2908,-89.1852 40.297,-89.1763 40.3025,-89.166 40.3087,-89.155 40.3173,-89.1442 40.3282,-89.1338 40.3396,-89.1242 40.3494,-89.1211 40.3522,-89.1177 40.3549,-89.1137 40.3571,-89.1091 40.3584,-89.0965 40.3711,-89.0694 40.3971,-89.0402 40.4249,-89.0217 40.4429)
+LINESTRING(-89.4855 40.6202,-89.4776 40.6018,-89.4784 40.5764,-89.4794 40.55,-89.4716 40.5291,-89.475 40.5051,-89.475 40.4752,-89.4698 40.4456,-89.4572 40.4225,-89.4572 40.4207,-89.4569 40.3787,-89.4583 40.3352,-89.4574 40.2921,-89.4506 40.2511,-89.4478 40.2418,-89.445 40.2325,-89.4416 40.2227,-89.438 40.2143,-89.4321 40.2065,-89.4246 40.1998,-89.4174 40.1917,-89.4122 40.1798)
+LINESTRING(-86.0463 39.8006,-86.0674 39.8019,-86.0981 39.804,-86.1278 39.8056,-86.1456 39.8054)
+LINESTRING(-86.2754 39.8547,-86.2547 39.8395,-86.2176 39.8243,-86.177 39.812,-86.1456 39.8054)
+LINESTRING(-100.771 41.1021,-100.725 41.1007,-100.684 41.0982,-100.643 41.0967,-100.601 41.0963,-100.561 41.0865,-100.472 41.0424,-100.433 41.0325,-100.407 41.0305,-100.377 41.0255,-100.347 41.019,-100.321 41.0129,-100.262 40.9925,-100.205 40.965,-100.149 40.9354,-100.094 40.9084,-100.052 40.8919,-100.01 40.8768,-99.9684 40.8617,-99.9272 40.8454,-99.9085 40.8377,-99.8897 40.8301,-99.871 40.8224,-99.8526 40.8143,-99.8398 40.8075,-99.8275 40.8002,-99.8151 40.7929,-99.8021 40.7865,-99.7802 40.7786,-99.7574 40.7723,-99.7343 40.7664,-99.7118 40.7596,-99.6934 40.7543,-99.6744 40.7499,-99.6558 40.7453,-99.6382 40.7391,-99.6089 40.7356,-99.5826 40.7281,-99.5566 40.7203,-99.5279 40.7157,-99.4973 40.7151,-99.4667 40.7161,-99.4361 40.7173,-99.4055 40.7175,-99.3764 40.7155,-99.3477 40.7117,-99.3191 40.7072,-99.2904 40.703,-99.1848 40.6923,-99.0754 40.688,-98.9661 40.6909,-98.8606 40.7018,-98.8357 40.7029,-98.8111 40.7007,-98.7864 40.6981,-98.7616 40.6979,-98.7243 40.7007,-98.6873 40.7039,-98.6508 40.7089,-98.6148 40.71
7,-98.5576 40.74,-98.4977 40.7702,-98.438 40.7964,-98.3858 40.8062)
+LINESTRING(-95.874 41.2436,-95.8349 41.2259,-95.8164 41.2118,-95.8049 41.1945,-95.8018 41.1738,-95.8055 41.161,-95.8196 41.1396,-95.8233 41.1268,-95.8251 41.0985,-95.8271 41.0861,-95.8338 41.0646,-95.8358 41.0522,-95.8333 41.0315,-95.8247 41.014,-95.8128 40.9968,-95.8008 40.9772,-95.7901 40.9531,-95.784 40.9311,-95.7817 40.9086,-95.7823 40.8832,-95.7869 40.8576,-95.8024 40.8132,-95.8069 40.7876,-95.801 40.7447,-95.7804 40.7089,-95.7498 40.6751,-95.7142 40.6384,-95.6993 40.624,-95.6819 40.604,-95.6635 40.5854,-95.6629 40.5851)
+LINESTRING(-103.141 40.6184,-103.137 40.624,-103.058 40.6854,-102.962 40.7326,-102.849 40.7738,-102.767 40.8009,-102.693 40.8236,-102.617 40.8443,-102.531 40.8651,-102.503 40.8739,-102.481 40.8843,-102.457 40.8931,-102.429 40.8972,-102.4 40.8978,-102.371 40.8985,-102.342 40.8991,-102.312 40.8997,-102.257 40.9079,-102.212 40.9278,-102.173 40.9564,-102.134 40.9907,-102.127 40.993)
+LINESTRING(-111.774 39.978,-111.77 39.981,-111.767 39.9843,-111.763 39.9879,-111.761 39.9916,-111.761 40.0004,-111.76 40.0116,-111.759 40.0225,-111.757 40.0306,-111.743 40.0466,-111.715 40.0729,-111.687 40.0987,-111.67 40.1129)
+LINESTRING(-104.991 40.4074,-104.994 40.4322,-104.994 40.4577,-104.994 40.4832,-104.994 40.5082,-104.995 40.5268,-104.998 40.5453,-105 40.5638,-105.001 40.5826,-105.002 40.6236,-105.002 40.6653,-105 40.7069,-104.995 40.7477,-104.992 40.7586,-104.987 40.7697,-104.982 40.7809,-104.978 40.792,-104.973 40.8163,-104.968 40.8407,-104.962 40.8648,-104.952 40.8884,-104.948 40.8937,-104.944 40.899,-104.939 40.9042,-104.935 40.9096,-104.927 40.9311,-104.921 40.954,-104.915 40.9772,-104.907 40.9995,-104.907 40.9995)
+LINESTRING(-122.556 38.0876,-122.56 38.0929,-122.566 38.0998,-122.571 38.1066,-122.569 38.1179,-122.568 38.1293,-122.568 38.1408,-122.569 38.1521,-122.588 38.1758,-122.599 38.1999,-122.609 38.2231,-122.627 38.244,-122.651 38.2599,-122.675 38.2749,-122.697 38.291,-122.716 38.3102,-122.714 38.4249,-122.733 38.4747,-122.774 38.5128,-122.842 38.5921,-122.857 38.5964,-122.872 38.6008,-122.889 38.6184,-122.906 38.6359,-122.923 38.6535,-122.94 38.6711,-122.956 38.6831,-122.978 38.703,-123.004 38.7267,-123.034 38.7501,-123.032 38.7786,-123.009 38.8038,-122.98 38.8277,-122.958 38.8525,-122.968 38.8623,-122.979 38.8767,-122.988 38.8897,-122.993 38.8955,-122.994 38.9045,-122.995 38.9133,-122.997 38.9219,-122.999 38.9307,-123.015 38.9479,-123.049 38.952,-123.087 38.953,-123.115 38.9609,-123.126 38.9676,-123.146 38.9785,-123.165 38.99,-123.175 38.9982,-123.188 39.0213,-123.207 39.0459,-123.227 39.0705,-123.243 39.0937,-123.25 39.1267,-123.251 39.1694,-123.251 39.209,-123.256 39.233,-123.265 39.249,-123.274 39.2651,-123.
284 39.2811,-123.293 39.2971,-123.304 39.3074,-123.31 39.3211,-123.314 39.3356,-123.322 39.3484,-123.317 39.3556,-123.313 39.3627,-123.314 39.3746,-123.327 39.3851,-123.342 39.3956,-123.353 39.4073,-123.357 39.4302,-123.35 39.4497,-123.346 39.4693,-123.359 39.492,-123.379 39.5082,-123.388 39.5231,-123.4 39.5352,-123.427 39.5425,-123.445 39.5934,-123.482 39.6919,-123.535 39.7874,-123.603 39.8295,-123.635 39.8219,-123.663 39.8227,-123.684 39.8309,-123.694 39.8455,-123.699 39.8505,-123.705 39.8554,-123.71 39.8603,-123.715 39.8652,-123.728 39.8792,-123.756 39.9105,-123.785 39.947,-123.799 39.9763,-123.795 40.0103,-123.785 40.0523,-123.784 40.0968,-123.807 40.1381,-123.776 40.1599,-123.776 40.181,-123.788 40.2004,-123.796 40.2174,-123.807 40.2159,-123.819 40.2144,-123.83 40.2241,-123.833 40.2314,-123.833 40.2393,-123.83 40.2508,-123.84 40.2545,-123.849 40.2583,-123.855 40.2658,-123.865 40.2688,-123.876 40.2719,-123.882 40.2788,-123.888 40.2853,-123.892 40.2923,-123.891 40.3008,-123.926 40.325,-123.937 40.3452,-12
3.944 40.3676,-123.965 40.398,-123.979 40.3985,-123.994 40.3991,-123.999 40.4064,-124.004 40.4137,-124.008 40.421,-124.013 40.4283,-124.024 40.4277,-124.035 40.4272,-124.046 40.4266,-124.057 40.4261,-124.067 40.4299,-124.076 40.4336,-124.086 40.4374,-124.095 40.4412,-124.097 40.4486,-124.099 40.4559,-124.101 40.4633,-124.104 40.4707,-124.118 40.4739,-124.133 40.48,-124.145 40.4879,-124.156 40.4962,-124.155 40.5434,-124.144 40.5679,-124.13 40.5856,-124.12 40.6124,-124.132 40.6176,-124.144 40.6251,-124.154 40.6341,-124.161 40.644,-124.156 40.6622,-124.153 40.6814,-124.154 40.7007,-124.158 40.7189,-124.152 40.728,-124.146 40.7419,-124.138 40.7568,-124.123 40.769,-124.102 40.7715,-124.08 40.7788,-124.06 40.7891,-124.045 40.8005,-124.044 40.8311,-124.053 40.8643,-124.07 40.8954,-124.094 40.9198)
+LINESTRING(-121.506 38.568,-121.51 38.5703,-121.515 38.5727,-121.519 38.5755,-121.522 38.5781,-121.532 38.5741,-121.542 38.5735,-121.552 38.5743,-121.562 38.5748,-121.595 38.5697,-121.651 38.5587,-121.709 38.5462,-121.747 38.5366,-121.783 38.5078,-121.856 38.4462,-121.941 38.3807,-122.013 38.3406,-122.022 38.33,-122.03 38.3174,-122.034 38.3042,-122.032 38.2917,-122.042 38.2816,-122.051 38.2711,-122.059 38.2604,-122.068 38.2497,-122.107 38.2311,-122.156 38.2036,-122.198 38.1724,-122.218 38.1426,-122.22 38.138)
+LINESTRING(-122.22 38.138,-122.229 38.1209,-122.231 38.0988,-122.228 38.0763,-122.227 38.0677)
+LINESTRING(-122.227 38.0677,-122.225 38.0601)
+LINESTRING(-86.0463 39.8006,-86.0457 39.7885,-86.0435 39.7755,-86.0394 39.7629,-86.0334 39.7516,-86.032 39.7469,-86.0305 39.7423,-86.029 39.7376,-86.0276 39.733,-86.0136 39.722,-86.0027 39.7098,-85.993 39.6969,-85.9825 39.6843,-85.9743 39.6774,-85.9639 39.6707,-85.953 39.6642,-85.9432 39.6583,-85.8634 39.6085,-85.7291 39.5234,-85.5957 39.4328,-85.5182 39.3669,-85.4792 39.3648,-85.4404 39.3517,-85.4026 39.3352,-85.3666 39.323,-85.3378 39.3188,-85.3052 39.3166,-85.2723 39.3152,-85.2424 39.3136,-85.2262 39.3109,-85.2102 39.306,-85.1946 39.3001,-85.1797 39.2944,-85.1382 39.2876,-85.0815 39.2864,-85.0242 39.2883,-84.9806 39.2908,-84.975 39.2884,-84.9696 39.2855,-84.9644 39.2824,-84.9356 39.2766,-84.9102 39.2749,-84.8847 39.2749,-84.8609 39.2775,-84.8572 39.2833,-84.8295 39.2723,-84.8235 39.269)
+LINESTRING(-89.5928 39.8013,-89.5938 39.8254,-89.5946 39.8621,-89.5947 39.8961,-89.5936 39.9123,-89.5849 39.9216,-89.5759 39.9304,-89.5681 39.9397,-89.563 39.9504,-89.5513 39.9602,-89.5327 39.9773,-89.515 39.9945,-89.5061 40.0044,-89.5047 40.0092,-89.5038 40.0147,-89.5021 40.02,-89.4982 40.0239,-89.4793 40.0358,-89.4528 40.0635,-89.4282 40.0931,-89.4147 40.1105,-89.4163 40.1264,-89.4178 40.1429,-89.4182 40.1595,-89.4164 40.1753,-89.4153 40.1765,-89.4143 40.1776,-89.4132 40.1787,-89.4122 40.1798)
+LINESTRING(-84.8235 39.269,-84.7907 39.2511,-84.7485 39.2275,-84.7108 39.2095)
+LINESTRING(-83.0135 39.8865,-83.0528 39.8426,-83.0838 39.8275,-83.1157 39.8237,-83.1579 39.8137,-83.1726 39.8071,-83.1863 39.7996,-83.1999 39.7917,-83.2139 39.7844,-83.2281 39.7784,-83.2428 39.7731,-83.2575 39.7678,-83.2717 39.7618,-83.3483 39.7252,-83.4249 39.6885,-83.5013 39.6518,-83.5777 39.615,-83.6098 39.5978,-83.6425 39.5788,-83.6755 39.5608,-83.7085 39.5467,-83.7352 39.5381,-83.7615 39.5304,-83.7879 39.523,-83.8147 39.5152,-83.8412 39.5077,-83.8687 39.5002,-83.8959 39.4922,-83.9214 39.4832,-83.9349 39.4762,-83.9471 39.4677,-83.9598 39.4595,-83.975 39.4532,-84.0045 39.444,-84.0336 39.4342,-84.0627 39.4245,-84.0922 39.4159,-84.107 39.415,-84.1149 39.4151,-84.1225 39.4146,-84.1525 39.406,-84.189 39.3901,-84.2233 39.3708,-84.2461 39.3522,-84.2549 39.3397,-84.2639 39.3246,-84.2725 39.3105,-84.2799 39.3009,-84.2935 39.2904,-84.3085 39.2806,-84.323 39.2707,-84.3354 39.2598,-84.3407 39.2478,-84.3428 39.231,-84.3439 39.2135,-84.3457 39.1998,-84.3576 39.189,-84.3821 39.1728,-84.4077 39.1575,-84.4228 39.1497,-8
4.4374 39.1468,-84.4448 39.1461,-84.4524 39.1456,-84.4599 39.1437,-84.4704 39.1393)
+LINESTRING(-84.1362 39.7781,-84.1401 39.751,-84.156 39.7225,-84.178 39.6958,-84.2001 39.6738,-84.2058 39.6606,-84.2143 39.6478,-84.2229 39.6349,-84.2289 39.6215,-84.2425 39.5942,-84.2633 39.5731,-84.287 39.5537,-84.3096 39.5315,-84.3228 39.5095,-84.3269 39.4896,-84.3278 39.47,-84.3314 39.4487,-84.337 39.4409,-84.3467 39.4331,-84.3567 39.4255,-84.3634 39.4178,-84.3678 39.4019,-84.3685 39.3844,-84.3689 39.3667,-84.3724 39.3501,-84.3826 39.3375,-84.3972 39.3303,-84.4118 39.3253,-84.4215 39.3195,-84.4344 39.299,-84.4424 39.2779,-84.448 39.2562,-84.4537 39.2337,-84.4616 39.219,-84.4768 39.1956,-84.4927 39.1737,-84.5029 39.1631,-84.5136 39.1598,-84.5243 39.1564,-84.5351 39.1531,-84.5458 39.1497)
+LINESTRING(-84.7108 39.2095,-84.702 39.2101,-84.6932 39.2111,-84.6846 39.2124,-84.6759 39.2137,-84.6691 39.2061,-84.6624 39.1986,-84.6516 39.196,-84.6443 39.1903,-84.6175 39.1889,-84.6018 39.1867,-84.5897 39.1794,-84.5735 39.1629,-84.5645 39.1628,-84.5579 39.1609,-84.5458 39.1497)
+LINESTRING(-89.6454 39.7396,-89.63 39.7462,-89.6183 39.7519,-89.6076 39.7581,-89.5946 39.7659,-89.5927 39.7747,-89.5922 39.7835,-89.5924 39.7924,-89.5928 39.8013)
+LINESTRING(-122.483 37.8245,-122.486 37.8341,-122.488 37.8407,-122.489 37.8437,-122.491 37.8469,-122.497 37.8536,-122.503 37.8597,-122.51 37.8679,-122.519 37.8809,-122.524 37.8849,-122.528 37.8895,-122.53 37.8947,-122.532 37.9004,-122.533 37.9145,-122.527 37.9402,-122.528 37.9543,-122.533 37.963,-122.546 37.9767,-122.551 37.9855,-122.558 38.0049,-122.557 38.0203,-122.542 38.0477,-122.541 38.063,-122.549 38.0791,-122.556 38.0876)
+LINESTRING(-84.4704 39.1393,-84.4873 39.1248,-84.5093 39.0996,-84.5176 39.089)
+LINESTRING(-84.5458 39.1497,-84.5393 39.0876)
+LINESTRING(-122.472 37.8019,-122.473 37.8023,-122.479 37.8108,-122.483 37.8245)
+LINESTRING(-79.0473 38.1166,-79.0216 38.1538,-78.9911 38.1897,-78.9625 38.223,-78.9427 38.2521,-78.9346 38.283,-78.934 38.3153,-78.9328 38.3468,-78.923 38.3753,-78.9012 38.3993,-78.8723 38.4212,-78.8418 38.4424,-78.8154 38.464,-78.7793 38.5102,-78.7506 38.5605,-78.7176 38.6128,-78.6683 38.6649,-78.6671 38.6813,-78.6661 38.6979,-78.6643 38.7144,-78.6607 38.7305,-78.6536 38.7441,-78.6429 38.7566,-78.6307 38.7684,-78.6194 38.7801,-78.6152 38.7861,-78.6123 38.7926,-78.6098 38.7991,-78.6067 38.8054,-78.5995 38.8133,-78.5885 38.8224,-78.5767 38.8315,-78.5672 38.8394,-78.5242 38.8826,-78.4794 38.9285,-78.4316 38.9723,-78.3797 39.0093,-78.3655 39.0119,-78.3418 39.0125,-78.3169 39.0122,-78.2991 39.0122)
+LINESTRING(-122.225 38.0601,-122.224 38.0536,-122.239 38.0177,-122.253 37.9949,-122.268 37.9805,-122.283 37.9695,-122.299 37.9553,-122.306 37.9423,-122.303 37.93,-122.292 37.9177,-122.283 37.9018,-122.277 37.8784,-122.276 37.8542,-122.283 37.8358,-122.294 37.8314)
+LINESTRING(-84.5176 39.089,-84.5283 39.0751,-84.5366 39.0625)
+LINESTRING(-84.5393 39.0876,-84.5366 39.0625)
+LINESTRING(-87.4137 39.4313,-87.358 39.4309,-87.3305 39.4309,-87.3029 39.4312,-87.2881 39.4426,-87.2709 39.4453,-87.253 39.4457,-87.2349 39.4452,-87.2173 39.4453,-87.2092 39.4468,-87.2016 39.4498,-87.1943 39.453,-87.187 39.4554,-87.1734 39.4565,-87.1567 39.4557,-87.1395 39.4544,-87.1244 39.454,-87.0963 39.4597,-87.0702 39.4612,-87.0465 39.4622,-87.0256 39.4667,-87.0122 39.4729,-86.9997 39.4802,-86.9876 39.4878,-86.9751 39.495,-86.9469 39.5083,-86.9169 39.5205,-86.8863 39.5318,-86.8562 39.5425,-86.7673 39.5425,-86.6485 39.5666,-86.5292 39.6019,-86.4391 39.6359,-86.4252 39.6428,-86.3981 39.658,-86.3841 39.6649,-86.3708 39.6697,-86.3566 39.6737,-86.3425 39.6779,-86.3297 39.6834,-86.2897 39.7063,-86.2686 39.7169,-86.2465 39.725,-86.2297 39.7476,-86.2136 39.7519,-86.189 39.7532,-86.1633 39.7525,-86.1441 39.751)
+LINESTRING(-87.4137 39.4313,-87.4268 39.433,-87.4425 39.4493,-87.4634 39.4487,-87.4958 39.4445,-87.5275 39.4381,-87.5307 39.4369)
+LINESTRING(-122.389 37.7857,-122.389 37.7857,-122.375 37.7971,-122.36 37.8073,-122.334 37.8203,-122.333 37.8205)
+LINESTRING(-78.5764 38.0235,-78.5768 38.0236,-78.5976 38.0272,-78.6131 38.0299,-78.6476 38.032,-78.6721 38.0284,-78.6985 38.0284,-78.7386 38.0416,-78.7415 38.043,-78.771 38.0486,-78.7895 38.0494,-78.8071 38.0472,-78.8339 38.044,-78.8917 38.0471,-78.9476 38.0638,-79 38.0887,-79.0473 38.1166)
+LINESTRING(-122.408 37.7686,-122.389 37.7857)
+LINESTRING(-122.408 37.7686,-122.412 37.7817,-122.416 37.7861,-122.421 37.7892,-122.429 37.7913,-122.437 37.7927,-122.45 37.7946,-122.463 37.7974,-122.472 37.8019)
+LINESTRING(-91.3066 40.0064,-91.3079 39.9896,-91.3154 39.9566,-91.3217 39.9196,-91.3193 39.891,-91.3223 39.8859,-91.3278 39.8808,-91.3331 39.8755,-91.3355 39.8699,-91.3257 39.8534,-91.3126 39.8396,-91.301 39.8231,-91.2954 39.7984,-91.2985 39.7956,-91.3015 39.7927,-91.3046 39.7898,-91.3077 39.7869,-91.3087 39.7818,-91.3097 39.7748,-91.3098 39.7678,-91.3083 39.7629,-91.3069 39.762,-91.3055 39.7611,-91.3042 39.7602,-91.3028 39.7593,-91.278 39.7448,-91.2518 39.7327,-91.2237 39.7237,-91.1935 39.7182,-91.1902 39.7194,-91.187 39.7206,-91.1833 39.7218,-91.1805 39.7225,-91.0656 39.7291,-91.0266 39.718,-91.0062 39.6999,-90.9477 39.685,-90.9063 39.6805,-90.8644 39.676,-90.8224 39.6733,-90.7807 39.6737,-90.7767 39.6745,-90.7727 39.6759,-90.7687 39.6773,-90.7646 39.678,-90.7154 39.6797,-90.6661 39.6815,-90.6167 39.6831,-90.5675 39.6839,-90.4928 39.6822,-90.4167 39.6788,-90.3406 39.677,-90.2662 39.6802,-90.2531 39.6816,-90.2401 39.6831,-90.2242 39.6851,-90.2149 39.6868,-90.1959 39.699,-90.1808 39.7151,-90.1625 39.7294,-9
0.134 39.7358,-90.0568 39.7371,-89.9798 39.739,-89.9027 39.7408,-89.8254 39.7419,-89.8204 39.7435,-89.8105 39.7471,-89.7998 39.7509,-89.792 39.7532,-89.7661 39.755,-89.7383 39.7526,-89.7109 39.7477,-89.6861 39.7422,-89.677 39.7409,-89.6661 39.7403,-89.6551 39.74,-89.6454 39.7396)
+LINESTRING(-95.6629 40.5851,-95.6456 40.5751,-95.6363 40.5576,-95.6251 40.5407,-95.6127 40.5243,-95.5997 40.5082,-95.598 40.4799,-95.5874 40.4516,-95.5717 40.4241,-95.555 40.3986,-95.5436 40.3828,-95.5315 40.368,-95.5193 40.3533,-95.5078 40.338,-95.5005 40.3244,-95.4949 40.3102,-95.4886 40.2963,-95.479 40.2833,-95.4523 40.2593,-95.4232 40.2366,-95.3632 40.193,-95.3477 40.1857,-95.3169 40.1722,-95.267 40.1507,-95.2471 40.1355,-95.2306 40.1137,-95.2171 40.0924,-95.2059 40.0786,-95.1889 40.0671,-95.1693 40.0559,-95.1492 40.0451,-95.1304 40.0348,-95.0972 40.0144,-95.0618 39.9935,-95.0237 39.9772,-94.9827 39.9707,-94.9519 39.9503,-94.8953 39.9103)
+LINESTRING(-77.0465 38.8705,-77.0566 38.86,-77.072 38.8528,-77.0891 38.8473,-77.1073 38.839,-77.113 38.8341,-77.118 38.8279,-77.123 38.8218,-77.1287 38.8167,-77.1397 38.8109,-77.152 38.8053,-77.1637 38.799,-77.1727 38.7908,-77.1801 38.7772,-77.1852 38.7626,-77.1904 38.7481,-77.1981 38.7346,-77.2039 38.7288,-77.2111 38.7235,-77.2186 38.7185,-77.2253 38.7133,-77.2322 38.7049,-77.2374 38.6953,-77.2424 38.6858,-77.2488 38.6775,-77.2573 38.6709,-77.2668 38.6653,-77.2764 38.6595,-77.2849 38.6523,-77.3028 38.629,-77.317 38.6038,-77.3295 38.578,-77.3421 38.5527,-77.3557 38.5333,-77.3731 38.5152,-77.3913 38.4973,-77.4074 38.4787,-77.4171 38.4601,-77.4233 38.4405,-77.4296 38.4215,-77.4398 38.4047,-77.4606 38.3825,-77.4873 38.3524,-77.5105 38.3202,-77.5204 38.2918,-77.5181 38.2763,-77.5125 38.2609,-77.5056 38.2457,-77.4998 38.2307,-77.4965 38.1972,-77.503 38.165,-77.5112 38.1327,-77.5133 38.099,-77.5089 38.064,-77.5024 38.0278,-77.4931 37.9919,-77.4803 37.958,-77.4672 37.9283,-77.4571 37.9007,-77.4508 37.8726,-77.4491
37.8409,-77.4526 37.7881,-77.4571 37.7307,-77.4581 37.6737,-77.4511 37.622,-77.4558 37.6136,-77.4616 37.6059,-77.4673 37.5985,-77.4717 37.591)
+LINESTRING(-77.4717 37.591,-77.4792 37.5919,-77.4858 37.5936,-77.492 37.5957,-77.4989 37.5974,-77.5083 37.5985,-77.5186 37.5992,-77.5288 37.6001,-77.5383 37.6016,-77.5604 37.6116,-77.5773 37.6265,-77.5923 37.6425,-77.6089 37.6558,-77.6591 37.6764,-77.7163 37.6909,-77.7734 37.7055,-77.8236 37.7265,-77.8633 37.7532,-77.9162 37.7922,-77.9672 37.8316,-78.0013 37.8598,-78.0251 37.8839,-78.0478 37.9084,-78.0731 37.9309,-78.1046 37.949,-78.1305 37.9578,-78.1805 37.9741,-78.2302 37.9899,-78.2549 37.9973,-78.2643 37.9979,-78.2732 37.9976,-78.2819 37.997,-78.2912 37.9963,-78.3201 37.9977,-78.3447 38.0038,-78.368 38.0133,-78.3929 38.0245,-78.4021 38.0278,-78.4128 38.0302,-78.4235 38.0307,-78.4326 38.028,-78.4501 38.0182,-78.4701 38.0089,-78.4917 38.0023,-78.5136 38.0006,-78.5224 38.0023,-78.5303 38.0059,-78.5376 38.0103,-78.5444 38.0149,-78.5569 38.0194,-78.5764 38.0235)
+LINESTRING(-84.5366 39.0625,-84.5841 39.042,-84.6163 39.0253,-84.6326 39.0013,-84.6326 38.9592,-84.63 38.939,-84.6277 38.9188,-84.625 38.8987,-84.6211 38.8784)
+LINESTRING(-121.926 37.6995,-121.934 37.6995,-121.944 37.698,-121.954 37.6959,-121.965 37.6941,-121.975 37.6946,-121.985 37.6972,-121.995 37.7001,-122.005 37.7015,-122.025 37.6986,-122.039 37.6932,-122.053 37.6896,-122.072 37.6924,-122.084 37.7049,-122.095 37.7176,-122.106 37.7305,-122.118 37.7432,-122.122 37.7495,-122.124 37.7566,-122.126 37.7635,-122.129 37.7697,-122.147 37.7848,-122.169 37.7984,-122.191 37.8129,-122.206 37.8305,-122.212 37.8312,-122.218 37.831,-122.224 37.8304,-122.23 37.8295,-122.238 37.8277,-122.249 37.8282,-122.259 37.8284,-122.265 37.8255,-122.273 37.8271,-122.28 37.8286,-122.288 37.8301,-122.294 37.8314)
+LINESTRING(-81.6049 38.3774,-81.5808 38.4059,-81.5334 38.4407,-81.4816 38.4719,-81.4429 38.4913,-81.4225 38.4984,-81.4011 38.5046,-81.38 38.5106,-81.3605 38.5176,-81.3412 38.5297,-81.3231 38.5455,-81.3043 38.5603,-81.2832 38.5697,-81.2549 38.5716,-81.2128 38.5716,-81.1727 38.5716,-81.1502 38.5737,-81.1392 38.5792,-81.1272 38.5857,-81.1151 38.5919,-81.104 38.5963,-81.0927 38.5977,-81.0805 38.5988,-81.0648 38.5998,-81.049 38.6003,-81.0332 38.6009,-81.0176 38.602,-80.9967 38.6055,-80.9764 38.6101,-80.9558 38.614,-80.9341 38.6154,-80.8978 38.6144,-80.8765 38.6141,-80.8556 38.6154,-80.8205 38.6194,-80.7981 38.6203,-80.7796 38.6207,-80.7637 38.6258,-80.7489 38.6407,-80.7419 38.654,-80.7367 38.6685,-80.7311 38.6826,-80.7229 38.6952,-80.7129 38.703,-80.7031 38.7075,-80.6935 38.7142,-80.6843 38.7285,-80.6754 38.7559,-80.6696 38.7844,-80.6622 38.8123,-80.6487 38.838,-80.6223 38.8677,-80.5926 38.896,-80.5633 38.9243,-80.5379 38.9545,-80.5195 38.9633,-80.5067 38.9731,-80.4979 38.9857,-80.4915 39.0023,-80.467 39.0085,-8
0.4571 39.014,-80.4508 39.0202,-80.4372 39.0283,-80.4252 39.0324,-80.4125 39.0352,-80.3998 39.0378,-80.3881 39.0416,-80.3831 39.0461,-80.38 39.0623,-80.3839 39.0766,-80.3887 39.091,-80.3902 39.1046,-80.3869 39.1175,-80.3812 39.1307,-80.3745 39.1436,-80.3683 39.1556,-80.3515 39.1819,-80.3309 39.2065,-80.3111 39.2314,-80.2965 39.2581,-80.287 39.2629,-80.2776 39.2677,-80.2734 39.2749,-80.2693 39.2822)
+LINESTRING(-81.6062 38.3759,-81.6049 38.3774)
+LINESTRING(-81.4994 39.2676,-81.5017 39.2591,-81.5041 39.2507,-81.5067 39.2423,-81.5094 39.2339,-81.5215 39.2253,-81.5274 39.2138,-81.5293 39.201,-81.5298 39.1883,-81.5319 39.1848,-81.5365 39.1789,-81.5413 39.1716,-81.5441 39.1641,-81.5438 39.1421,-81.5404 39.121,-81.5402 39.0999,-81.5494 39.0779,-81.5598 39.0694,-81.5814 39.0532,-81.5998 39.0395,-81.6182 39.0258,-81.6526 38.9969,-81.6933 38.9571,-81.7277 38.9146,-81.7432 38.8777,-81.7429 38.8603,-81.7408 38.8428,-81.7382 38.8252,-81.736 38.8078,-81.7296 38.7868,-81.7153 38.7671,-81.6944 38.7514,-81.6685 38.7423,-81.6549 38.7228,-81.6509 38.6968,-81.6509 38.6695,-81.6492 38.646,-81.6471 38.6387,-81.6443 38.6314,-81.6415 38.6241,-81.6398 38.6167,-81.6409 38.6035,-81.6457 38.587,-81.6512 38.57,-81.6549 38.5553,-81.6542 38.5226,-81.6476 38.4772,-81.6379 38.4318,-81.6278 38.3992,-81.6245 38.3953,-81.6176 38.3878,-81.6119 38.3819,-81.6062 38.3759)
+LINESTRING(-77.4717 37.591,-77.459 37.5804,-77.4462 37.5698,-77.4334 37.5591,-77.4206 37.5485,-77.4093 37.5451,-77.3985 37.5385,-77.3875 37.5315,-77.3759 37.5271,-77.3626 37.5255,-77.3463 37.5247,-77.3157 37.524,-77.2664 37.5217)
+LINESTRING(-121.565 37.7428,-121.581 37.741,-121.596 37.7381,-121.612 37.7353,-121.627 37.7336,-121.645 37.7223,-121.667 37.7184,-121.69 37.7173,-121.712 37.714,-121.718 37.7111,-121.726 37.7072,-121.733 37.7037,-121.74 37.7016,-121.778 37.6992,-121.821 37.6992,-121.865 37.7001,-121.904 37.7003,-121.909 37.7001,-121.914 37.6999,-121.918 37.6997,-121.923 37.6995,-121.926 37.6995)
+LINESTRING(-104.982 39.82,-104.965 39.8309,-104.939 39.8484,-104.912 39.8658,-104.885 39.8833,-104.818 39.9135,-104.741 39.9837,-104.663 40.0601,-104.594 40.1089,-104.578 40.1118,-104.558 40.1116,-104.538 40.1104,-104.52 40.1103,-104.486 40.1387,-104.456 40.1569,-104.421 40.1667,-104.372 40.17,-104.36 40.1699,-104.348 40.1699,-104.335 40.1702,-104.324 40.1713,-104.288 40.1826,-104.242 40.2012,-104.198 40.2193,-104.164 40.2294,-104.142 40.2328,-104.116 40.2369,-104.091 40.2406,-104.068 40.2429,-104.052 40.2516,-104.042 40.2576,-104.034 40.2606,-103.993 40.2621,-103.947 40.2647,-103.906 40.2732,-103.878 40.2928,-103.829 40.2914,-103.779 40.2916,-103.73 40.2927,-103.681 40.2939,-103.655 40.2948,-103.614 40.2967,-103.576 40.2995,-103.553 40.3028,-103.45 40.3513,-103.36 40.4081,-103.279 40.4718,-103.202 40.5407,-103.141 40.6184)
+LINESTRING(-104.987 39.8226,-104.982 39.82)
+LINESTRING(-86.1456 39.8054,-86.1483 39.7923,-86.1497 39.7775,-86.1479 39.7631,-86.1406 39.7512,-86.1196 39.7282,-86.1004 39.7082,-86.0838 39.6873,-86.0703 39.6619,-86.0618 39.6314,-86.0583 39.6037,-86.053 39.5765,-86.0394 39.5476,-86.0282 39.5279,-86.0203 39.5096,-86.0129 39.4911,-86.0033 39.4708,-85.9809 39.4379,-85.9582 39.409,-85.9425 39.3795,-85.9411 39.3448,-85.9451 39.3299,-85.949 39.3196,-85.953 39.3092,-85.9569 39.2943,-85.9554 39.2727,-85.9465 39.2511,-85.9376 39.2294,-85.936 39.2078,-85.941 39.1842,-85.946 39.1606,-85.9509 39.1369,-85.9559 39.1133,-85.9547 39.105,-85.9514 39.0971,-85.9328 39.0756,-85.9169 39.0558,-85.9003 39.0367,-85.8798 39.0175,-85.8674 39.0091,-85.8552 39.0022,-85.8448 38.9945)
+LINESTRING(-104.992 39.8134,-104.982 39.82)
+LINESTRING(-104.992 39.8134,-104.995 39.8378,-104.995 39.8632,-104.993 39.8886,-104.992 39.9132,-104.989 39.9354,-104.986 39.9573,-104.982 39.979,-104.98 40.0006,-104.978 40.0392,-104.977 40.0781,-104.977 40.117,-104.977 40.1557,-104.976 40.2014,-104.974 40.2474,-104.973 40.2933,-104.975 40.3388,-104.984 40.3546,-104.989 40.3719,-104.99 40.3899,-104.991 40.4074)
+LINESTRING(-121.506 38.568,-121.506 38.5541,-121.505 38.5405,-121.503 38.527,-121.5 38.5132,-121.495 38.4898,-121.494 38.474,-121.493 38.4594,-121.491 38.4395,-121.485 38.407,-121.478 38.374,-121.471 38.3411,-121.463 38.3089,-121.455 38.273,-121.448 38.2517,-121.436 38.232,-121.412 38.2009,-121.409 38.196,-121.407 38.191,-121.405 38.1861,-121.403 38.1811,-121.403 38.1682,-121.403 38.1553,-121.402 38.1424,-121.402 38.1294,-121.391 38.1025,-121.367 38.0474,-121.342 37.9906,-121.327 37.9583,-121.317 37.9473,-121.305 37.9298,-121.295 37.9135,-121.29 37.9063,-121.28 37.8858,-121.283 37.8522,-121.292 37.8184,-121.299 37.7973,-121.326 37.7741,-121.366 37.7652,-121.409 37.7635,-121.449 37.7624,-121.46 37.7566,-121.471 37.7507,-121.482 37.7449,-121.493 37.739,-121.51 37.7401,-121.532 37.7409,-121.553 37.7416,-121.565 37.7428)
+LINESTRING(-121.473 38.5572,-121.475 38.5507,-121.475 38.5436,-121.473 38.5365,-121.47 38.5303,-121.458 38.5133,-121.444 38.4995,-121.429 38.4865,-121.416 38.472,-121.407 38.4569,-121.399 38.4405,-121.392 38.4238,-121.385 38.4081,-121.373 38.391,-121.359 38.3755,-121.344 38.3601,-121.331 38.3436,-121.322 38.3311,-121.311 38.3177,-121.301 38.3041,-121.294 38.2909,-121.286 38.275,-121.277 38.261,-121.267 38.2472,-121.257 38.2321,-121.238 38.1755,-121.23 38.1046,-121.229 38.0376,-121.228 37.9926,-121.229 37.99,-121.229 37.9872,-121.228 37.9844,-121.226 37.9819,-121.218 37.9532,-121.216 37.9221,-121.217 37.8907,-121.216 37.8607,-121.216 37.8516,-121.216 37.8423,-121.216 37.833,-121.218 37.8239,-121.21 37.8181,-121.203 37.8115,-121.196 37.8046,-121.189 37.798)
+LINESTRING(-94.2233 39.7521,-94.2224 39.7577,-94.2127 39.7802,-94.1861 39.8365,-94.159 39.8925,-94.1455 39.9196,-94.1356 39.932,-94.1243 39.9442,-94.1133 39.9565,-94.104 39.9691,-94.1006 39.989,-94.1026 40.0178,-94.1049 40.0475,-94.1027 40.0702,-94.09 40.0889,-94.0653 40.1195,-94.0387 40.1514,-94.0201 40.1737,-94.0202 40.185,-94.0197 40.1963,-94.0192 40.2074,-94.0187 40.2186,-94.0117 40.304,-93.9954 40.3879,-93.9711 40.4711,-93.9407 40.5538,-93.9253 40.5752)
+LINESTRING(-94.8953 39.9103,-94.8393 39.8693,-94.8101 39.8461,-94.8082 39.8204,-94.7955 39.7759,-94.7931 39.7488)
+LINESTRING(-105.04 39.7197,-105.035 39.7448,-105.026 39.7688,-105.012 39.7917,-104.992 39.8134)
+LINESTRING(-79.3755 37.8185,-79.3732 37.828,-79.367 37.8372,-79.3573 37.848,-79.3421 37.8608,-79.3169 37.8774,-79.2902 37.8926,-79.2643 37.9085,-79.241 37.9268,-79.221 37.9499,-79.1972 37.981,-79.1742 38.0102,-79.1565 38.0272,-79.1487 38.0306,-79.1399 38.0332,-79.1311 38.0357,-79.1232 38.0389,-79.1027 38.0522,-79.0856 38.0686,-79.071 38.0866,-79.0579 38.1048,-79.0555 38.1079,-79.053 38.1108,-79.0473 38.1166)
+LINESTRING(-105.668 39.7559,-105.628 39.7673,-105.601 39.7692,-105.575 39.7618,-105.538 39.7455,-105.527 39.7424,-105.517 39.7415,-105.508 39.7411,-105.501 39.7394,-105.495 39.7417,-105.489 39.7434,-105.482 39.745,-105.476 39.747,-105.467 39.746,-105.458 39.7456,-105.449 39.746,-105.44 39.7473,-105.421 39.7358,-105.403 39.7265,-105.384 39.7191,-105.36 39.713,-105.352 39.7105,-105.344 39.7071,-105.335 39.7041,-105.327 39.7023,-105.316 39.7037,-105.303 39.7076,-105.286 39.7104,-105.263 39.7088,-105.247 39.7048,-105.233 39.7001,-105.218 39.6961,-105.201 39.6944,-105.197 39.6961,-105.187 39.6993,-105.176 39.7064,-105.166 39.7196,-105.131 39.7202,-105.103 39.7194,-105.075 39.7187,-105.04 39.7197)
+LINESTRING(-82.6478 38.3784,-82.6333 38.3789,-82.6044 38.377,-82.5807 38.3658)
+LINESTRING(-82.5807 38.3658,-82.58 38.3655,-82.5387 38.3586,-82.5016 38.3566,-82.4781 38.3585,-82.4345 38.3608,-82.3849 38.3755,-82.3722 38.383,-82.3469 38.3976,-82.3203 38.4122,-82.3039 38.4197,-82.2932 38.4211,-82.2822 38.4214,-82.2711 38.4217,-82.2605 38.4232,-82.2504 38.4264,-82.2406 38.4302,-82.2306 38.4336,-82.2198 38.4358,-82.2016 38.4369,-82.1745 38.4377,-82.1476 38.4381,-82.1299 38.4378,-82.116 38.4356,-82.102 38.4321,-82.088 38.429,-82.0744 38.4279,-82.0535 38.4317,-82.0354 38.4393,-82.0178 38.4478,-81.9987 38.4541,-81.9732 38.4562,-81.9323 38.4572,-81.8911 38.4566,-81.8647 38.4539,-81.8598 38.4522,-81.8531 38.4496,-81.8464 38.4465,-81.8416 38.4438,-81.8334 38.4365,-81.8272 38.4285,-81.8212 38.4205,-81.8138 38.4134,-81.798 38.4034,-81.779 38.3926,-81.7609 38.3818,-81.748 38.3717,-81.7298 38.3657,-81.7257 38.3659,-81.7221 38.3664,-81.719 38.3664,-81.7161 38.3648,-81.7 38.3639,-81.6837 38.362,-81.6677 38.3589,-81.6527 38.3545,-81.6443 38.359,-81.6299 38.3664,-81.6152 38.3732,-81.6062 38.3759)
+LINESTRING(-87.5307 39.4369,-87.5464 39.4311,-87.5792 39.4295,-87.6106 39.4275,-87.642 39.4263,-87.6748 39.4268,-87.6852 39.4271,-87.6955 39.4261,-87.7073 39.4219,-87.7179 39.4159,-87.7279 39.4101,-87.7376 39.4063,-87.7501 39.4041,-87.7628 39.4026,-87.7756 39.4009,-87.7884 39.3984,-87.8397 39.3827,-87.8989 39.3615,-87.9567 39.3385,-88.0039 39.3177,-88.0125 39.3128,-88.0208 39.307,-88.0292 39.3013,-88.0382 39.2964,-88.0661 39.2856,-88.0953 39.2765,-88.1249 39.2673,-88.1537 39.2564,-88.1604 39.257,-88.1675 39.2569,-88.1745 39.2562,-88.181 39.2549,-88.2172 39.233,-88.2604 39.2153,-88.3057 39.2004,-88.3485 39.1867,-88.3578 39.1816,-88.3677 39.176,-88.4007 39.1669,-88.4381 39.1607,-88.4762 39.1558,-88.5126 39.1509)
+LINESTRING(-89.5928 39.8013,-89.5837 39.8046,-89.5745 39.8079,-89.5656 39.8113,-89.5563 39.8153,-89.5474 39.8225,-89.542 39.8298,-89.5319 39.8354,-89.5084 39.8376,-89.4466 39.8395,-89.387 39.8441,-89.3274 39.8486,-89.2656 39.8503,-89.2129 39.8491,-89.1594 39.8483,-89.1062 39.8505,-89.0542 39.8584,-89.0555 39.8651,-89.0559 39.8716,-89.0355 39.9059,-88.9971 39.9231,-88.9498 39.9294,-88.9026 39.9312,-88.8966 39.9317,-88.8713 39.9395,-88.8515 39.951,-88.8348 39.9654,-88.8187 39.982,-88.8126 39.9868,-88.8059 39.9907,-88.7995 39.9952,-88.7945 40.0013,-88.793 40.0064,-88.7922 40.012,-88.7906 40.0173,-88.7865 40.0217,-88.7417 40.0307,-88.6919 40.0331,-88.6418 40.0335,-88.5955 40.037,-88.5812 40.0425,-88.5724 40.0513,-88.5658 40.0608,-88.5579 40.068,-88.493 40.1043,-88.4564 40.1203,-88.4071 40.1231,-88.304 40.1198,-88.3039 40.0182,-88.3031 39.9676,-88.3008 39.9166,-88.2959 39.9107,-88.2852 39.9026,-88.2738 39.8952,-88.2671 39.8909,-88.267 39.7903,-88.2678 39.7754,-88.2712 39.7655,-88.2785 39.7564,-88.2911 39.7442,-8
8.289 39.7066,-88.2829 39.6594,-88.2822 39.6147,-88.296 39.5848,-88.2965 39.5588,-88.2933 39.5239,-88.2932 39.4907,-88.3032 39.4697,-88.3446 39.4393,-88.3613 39.4166,-88.3707 39.3868,-88.3903 39.3353,-88.3972 39.322,-88.4124 39.2968,-88.419 39.2837,-88.4242 39.2694,-88.4286 39.2546,-88.4331 39.2399,-88.4389 39.226,-88.4434 39.2199,-88.4494 39.214,-88.455 39.2081,-88.4582 39.2022,-88.4671 39.1896,-88.4834 39.1766,-88.5007 39.1636,-88.5126 39.1509)
+LINESTRING(-88.5126 39.1509,-88.5357 39.1544,-88.5442 39.1555,-88.558 39.1548,-88.5699 39.1501,-88.5787 39.1423,-88.5832 39.1321,-88.5839 39.1224,-88.583 39.1138,-88.5814 39.1051,-88.5806 39.0957)
+LINESTRING(-76.3173 37.0126,-76.3187 37.0162,-76.3199 37.0251,-76.3231 37.0342,-76.33 37.0405,-76.3424 37.0408,-76.3477 37.0367,-76.3548 37.0338,-76.3625 37.032,-76.37 37.0307,-76.3874 37.0381,-76.404 37.0492,-76.4194 37.0615,-76.4332 37.0729,-76.4464 37.0873,-76.4551 37.1035,-76.4628 37.1202,-76.4731 37.1362,-76.4987 37.1673,-76.5209 37.1921,-76.5467 37.2137,-76.5831 37.2356,-76.5887 37.2386,-76.5944 37.2416,-76.6001 37.2445,-76.6057 37.2475,-76.6172 37.2583,-76.6342 37.2669,-76.6518 37.2754,-76.6648 37.286,-76.6959 37.3214,-76.7401 37.3638,-76.7878 37.4043,-76.8296 37.434,-76.8488 37.4459,-76.8706 37.4595,-76.8923 37.4722,-76.9114 37.4816,-76.92 37.4844,-76.9305 37.4872,-76.9411 37.4896,-76.95 37.4914,-76.9715 37.4941,-76.9933 37.4949,-77.0151 37.4952,-77.0368 37.4964,-77.0945 37.5033,-77.1519 37.5114,-77.2092 37.5183,-77.2664 37.5217)
+LINESTRING(-76.3152 37.007,-76.3173 37.0126)
+LINESTRING(-106.456 39.6068,-106.443 39.6148,-106.43 39.6236,-106.416 39.6321,-106.403 39.6396,-106.387 39.6438,-106.364 39.6468,-106.34 39.6481,-106.322 39.6475,-106.314 39.6446,-106.303 39.639,-106.293 39.6328,-106.285 39.6281,-106.283 39.6223,-106.28 39.617,-106.278 39.6114,-106.278 39.6046,-106.276 39.6014,-106.273 39.5982,-106.265 39.5962,-106.257 39.596,-106.25 39.5947,-106.245 39.5892,-106.247 39.5847,-106.249 39.5801,-106.243 39.5706,-106.23 39.5538,-106.217 39.5363,-106.208 39.5245,-106.206 39.5209,-106.205 39.5173,-106.202 39.5137,-106.2 39.5109,-106.194 39.5074,-106.187 39.5043,-106.179 39.5018,-106.172 39.5005,-106.167 39.5017,-106.161 39.5029,-106.156 39.5045,-106.153 39.506,-106.152 39.5106,-106.149 39.5149,-106.145 39.5191,-106.143 39.5232,-106.133 39.5467,-106.122 39.5693,-106.107 39.5911,-106.087 39.6116,-106.082 39.6157,-106.076 39.6194,-106.072 39.6237,-106.069 39.6293,-106.046 39.64,-106.008 39.6556,-105.969 39.6703,-105.945 39.6783,-105.93 39.6801,-105.914 39.6805,-105.899 39.6812,-105.
885 39.6837,-105.875 39.6879,-105.865 39.6928,-105.855 39.6972,-105.844 39.6995,-105.814 39.6984,-105.777 39.6948,-105.74 39.6928,-105.713 39.6966,-105.7 39.7076,-105.691 39.7247,-105.681 39.7425,-105.668 39.7559)
+LINESTRING(-76.3114 37.0005,-76.3143 37.0048,-76.3152 37.007)
+LINESTRING(-76.2989 36.9702,-76.3002 36.9818,-76.3068 36.9939,-76.3114 37.0005)
+LINESTRING(-76.2655 36.9521,-76.2687 36.9581,-76.2763 36.9602,-76.284 36.9623,-76.2917 36.9646,-76.2986 36.967,-76.2989 36.9702)
+LINESTRING(-80.2325 37.7861,-80.2307 37.7861,-80.213 37.7934,-80.1989 37.8038,-80.1822 37.8132,-80.1572 37.8174,-80.1039 37.8127,-80.0576 37.8032,-80.0157 37.7969,-79.9757 37.8016,-79.9308 37.8211,-79.8907 37.8391,-79.8482 37.8505,-79.7964 37.8502,-79.7845 37.846,-79.7694 37.8378,-79.7548 37.8285,-79.7442 37.8212,-79.7396 37.8164,-79.7362 37.8106,-79.7325 37.8051,-79.7272 37.8008,-79.6832 37.8099,-79.6469 37.8435,-79.6139 37.8765,-79.5799 37.8839,-79.5411 37.8658,-79.4809 37.8469,-79.4199 37.8293,-79.3755 37.8185)
+LINESTRING(-121.926 37.6995,-121.924 37.694,-121.923 37.6889,-121.921 37.6836,-121.919 37.6783,-121.906 37.6569,-121.887 37.6407,-121.868 37.6246,-121.854 37.6031,-121.856 37.5895,-121.867 37.5789,-121.883 37.5695,-121.9 37.5595,-121.917 37.5466,-121.93 37.5326,-121.937 37.5172,-121.936 37.4998,-121.926 37.4819,-121.911 37.4687,-121.895 37.4561,-121.878 37.4401,-121.872 37.413,-121.869 37.3885,-121.862 37.3653,-121.846 37.3423)
+LINESTRING(-121.942 37.3151,-121.918 37.3219,-121.894 37.3287,-121.87 37.3355,-121.846 37.3423)
+LINESTRING(-121.942 37.3151,-121.977 37.317,-121.991 37.3214,-122 37.3277,-122.024 37.3351,-122.035 37.3359,-122.051 37.3354,-122.067 37.3345,-122.081 37.3344,-122.087 37.3382,-122.093 37.3431,-122.098 37.3485,-122.102 37.3539,-122.115 37.3582,-122.132 37.3696,-122.15 37.3825,-122.162 37.3916,-122.19 37.4076,-122.218 37.4219,-122.247 37.4358,-122.274 37.4508,-122.284 37.4598,-122.29 37.4703,-122.294 37.4813,-122.3 37.4914,-122.31 37.4977,-122.323 37.5031,-122.338 37.508,-122.35 37.5129,-122.358 37.5234,-122.364 37.5344,-122.371 37.5452,-122.379 37.5554,-122.391 37.5678,-122.403 37.5801,-122.416 37.5926,-122.427 37.6055,-122.427 37.6091,-122.426 37.6127,-122.425 37.6164,-122.425 37.62,-122.436 37.6351,-122.448 37.6467,-122.458 37.6572,-122.465 37.6686,-122.467 37.6728,-122.467 37.6762,-122.468 37.6796,-122.469 37.6838,-122.47 37.6925,-122.466 37.7001,-122.458 37.707,-122.449 37.7133,-122.441 37.7167,-122.434 37.7187,-122.427 37.7208,-122.42 37.7248,-122.409 37.7379,-122.406 37.7514,-122.407 37.7659,-122.408
37.7686)
+LINESTRING(-77.3578 37.1524,-77.3502 37.1617,-77.3413 37.1743,-77.3335 37.187,-77.3293 37.1968,-77.3247 37.2177,-77.32 37.2385,-77.3144 37.2642,-77.312 37.2768,-77.316 37.2873,-77.3247 37.3053,-77.3337 37.3239,-77.3386 37.3362,-77.3424 37.362,-77.3442 37.3889,-77.3452 37.4159,-77.3465 37.442,-77.3243 37.4577,-77.3044 37.4749,-77.2858 37.4929,-77.2673 37.5113,-77.2678 37.5139,-77.2677 37.5165,-77.2672 37.5192,-77.2664 37.5217)
+LINESTRING(-77.4267 37.2036,-77.3998 37.2189,-77.3854 37.2091,-77.3707 37.1987,-77.3583 37.187,-77.3508 37.1733,-77.3525 37.1681,-77.3543 37.1629,-77.356 37.1577,-77.3578 37.1524)
+LINESTRING(-75.9856 36.8509,-76.0184 36.8468,-76.0503 36.8398,-76.0819 36.8333,-76.1137 36.8305,-76.1355 36.8338,-76.1576 36.8406,-76.1796 36.8466,-76.201 36.8474)
+LINESTRING(-76.2655 36.9521,-76.2668 36.9481,-76.2676 36.946,-76.269 36.9414,-76.2708 36.9367,-76.2722 36.9324,-76.2728 36.9281,-76.272 36.9234,-76.2666 36.9143,-76.2583 36.9079,-76.2479 36.9027,-76.2363 36.8973,-76.2234 36.8874,-76.2162 36.8755,-76.2105 36.8623,-76.201 36.8474)
+LINESTRING(-108.602 39.1205,-108.616 39.1224,-108.626 39.1288,-108.635 39.1367,-108.645 39.143,-108.679 39.1608,-108.712 39.1777,-108.744 39.195,-108.777 39.2139,-108.8 39.2266,-108.824 39.2386,-108.849 39.2485,-108.873 39.2549,-108.881 39.2543,-108.893 39.2517,-108.905 39.2487,-108.913 39.2465,-108.928 39.2391,-108.943 39.2285,-108.959 39.218,-108.974 39.211,-108.988 39.2073,-109.001 39.2039,-109.015 39.2002,-109.031 39.1954,-109.036 39.1927,-109.042 39.1906,-109.047 39.1903,-109.053 39.1905)
+LINESTRING(-106.456 39.6068,-106.472 39.6135,-106.486 39.6216,-106.5 39.6293,-106.516 39.6351,-106.543 39.6409,-106.579 39.6481,-106.612 39.6562,-106.635 39.6649,-106.654 39.6791,-106.674 39.6939,-106.695 39.7062,-106.721 39.713,-106.733 39.7073,-106.749 39.7006,-106.764 39.6928,-106.772 39.6836,-106.787 39.6804,-106.803 39.6742,-106.817 39.6667,-106.83 39.6592,-106.856 39.656,-106.906 39.6536,-106.954 39.6522,-106.978 39.652,-107.001 39.6614,-107.012 39.6655,-107.024 39.6689,-107.055 39.6708,-107.085 39.6648,-107.117 39.6544,-107.15 39.6427,-107.175 39.6332,-107.195 39.6238,-107.215 39.6142,-107.239 39.6043,-107.278 39.5924,-107.311 39.5873,-107.344 39.5885,-107.382 39.595,-107.398 39.5991,-107.411 39.6036,-107.425 39.6083,-107.44 39.6127,-107.464 39.618,-107.485 39.6212,-107.508 39.6225,-107.533 39.6216,-107.584 39.6151,-107.673 39.5959,-107.724 39.5892,-107.776 39.5855,-107.801 39.5834,-107.822 39.5803,-107.842 39.5747,-107.863 39.5655,-107.87 39.5604,-107.877 39.5548,-107.884 39.5502,-107.894 39.5479,-1
07.903 39.549,-107.919 39.556,-107.929 39.5572,-107.966 39.5502,-107.997 39.5363,-108.022 39.5166,-108.046 39.4922,-108.053 39.4805,-108.056 39.4683,-108.057 39.455,-108.058 39.4401,-108.066 39.4064,-108.079 39.3756,-108.102 39.3525,-108.138 39.3415,-108.158 39.3437,-108.187 39.3582,-108.208 39.3604,-108.222 39.3566,-108.237 39.3487,-108.249 39.3388,-108.259 39.3288,-108.268 39.2995,-108.278 39.2745,-108.289 39.2498,-108.301 39.2212,-108.326 39.1765,-108.362 39.1451,-108.411 39.1253,-108.474 39.1154,-108.494 39.1136,-108.513 39.1125,-108.531 39.113,-108.551 39.1161,-108.565 39.119,-108.577 39.1207,-108.588 39.1212,-108.602 39.1205)
+LINESTRING(-76.3446 36.7551,-76.3276 36.7546,-76.3105 36.7543,-76.2935 36.7543,-76.2765 36.7542,-76.2748 36.7555,-76.2731 36.7568,-76.2715 36.7581,-76.2698 36.7595,-76.2529 36.7627,-76.241 36.7739,-76.2292 36.7856,-76.2127 36.7901,-76.2049 36.8029,-76.2011 36.8176,-76.2002 36.8329,-76.201 36.8474)
+LINESTRING(-81.2029 37.7333,-81.1872 37.7414,-81.1709 37.7487,-81.1547 37.7562,-81.1394 37.7647,-81.1155 37.766,-81.0896 37.7641,-81.0632 37.7616,-81.038 37.7611,-81.0149 37.7648,-80.9948 37.7714,-80.9758 37.7788,-80.9556 37.7844,-80.9445 37.7846,-80.9338 37.7825,-80.9233 37.7803,-80.9125 37.7802,-80.8951 37.7828,-80.8775 37.7852,-80.86 37.788,-80.843 37.7914,-80.8334 37.7938,-80.8248 37.7976,-80.8171 37.8056,-80.8114 37.8152,-80.8057 37.8245,-80.7978 37.8313,-80.7728 37.8421,-80.7462 37.8513,-80.7192 37.8601,-80.6932 37.8696,-80.6716 37.8832,-80.6493 37.9001,-80.6262 37.9105,-80.6022 37.9048,-80.5944 37.8992,-80.5885 37.8928,-80.5689 37.8588,-80.5426 37.8475,-80.5113 37.8449,-80.4767 37.8371,-80.4625 37.8294,-80.437 37.811,-80.4229 37.8033,-80.4121 37.8001,-80.4008 37.7984,-80.3897 37.7963,-80.3794 37.7919,-80.3739 37.7864,-80.3684 37.7791,-80.3636 37.7716,-80.3604 37.7658,-80.3494 37.7654,-80.34 37.7596,-80.3161 37.7625,-80.3002 37.7718,-80.2869 37.7825,-80.2709 37.7897,-80.2613 37.7897,-80.251 37.7878,-8
0.2406 37.7859,-80.2325 37.7861)
+LINESTRING(-81.6049 38.3774,-81.5787 38.3664,-81.5618 38.3569,-81.553 38.3463,-81.5484 38.3308,-81.5606 38.3011,-81.5932 38.2748,-81.6208 38.249,-81.6183 38.2209,-81.5948 38.1954,-81.5719 38.177,-81.5458 38.1643,-81.5125 38.1558,-81.4861 38.1523,-81.4352 38.1484,-81.4089 38.1449,-81.4012 38.1427,-81.3946 38.1392,-81.3899 38.1289,-81.3941 38.1207,-81.4066 38.1076,-81.4109 38.0994,-81.4068 38.0869,-81.3903 38.0838,-81.3718 38.0805,-81.3613 38.0675,-81.3577 38.0611,-81.3549 38.0538,-81.3529 38.0464,-81.3517 38.0395,-81.3516 38.0304,-81.3524 38.0199,-81.3522 38.0098,-81.3492 38.0014,-81.3305 37.9919,-81.3091 37.9858,-81.2858 37.9756,-81.2614 37.9539,-81.2618 37.9441,-81.2666 37.9377,-81.2733 37.9323,-81.2795 37.9256,-81.2777 37.9096,-81.2759 37.8876,-81.273 37.8672,-81.2679 37.8564,-81.243 37.8469,-81.2307 37.8421,-81.2186 37.8369,-81.2152 37.8235,-81.2166 37.8077,-81.2206 37.7919,-81.2252 37.7779,-81.2219 37.7675,-81.2166 37.7551,-81.2103 37.743,-81.2029 37.7333)
+LINESTRING(-109.816 38.9404,-109.839 38.9384,-109.843 38.9374,-109.847 38.9358,-109.851 38.9341,-109.855 38.9328,-109.877 38.9286,-109.896 38.9256,-109.915 38.9233,-109.937 38.9211,-109.954 38.9197,-109.969 38.9193,-109.984 38.9204,-110 38.9233,-110.008 38.9257,-110.014 38.929,-110.02 38.9325,-110.027 38.9357,-110.041 38.9413,-110.06 38.9497,-110.096 38.9653,-110.109 38.9701,-110.122 38.9728,-110.135 38.9747,-110.15 38.977,-110.167 38.9817,-110.182 38.9873,-110.197 38.9916,-110.214 38.9923,-110.251 38.9886)
+LINESTRING(-109.053 39.1905,-109.054 39.1906,-109.066 39.1916,-109.076 39.1883,-109.089 39.1884,-109.104 39.1886,-109.116 39.1855,-109.134 39.1691,-109.153 39.1449,-109.172 39.1191,-109.193 39.0984,-109.216 39.0825,-109.24 39.0666,-109.263 39.0504,-109.285 39.0338,-109.298 39.0214,-109.31 39.008,-109.323 38.9946,-109.338 38.9823,-109.352 38.9741,-109.366 38.9665,-109.38 38.9584,-109.392 38.9489,-109.404 38.937,-109.438 38.9347,-109.504 38.9351,-109.572 38.9369,-109.613 38.9394,-109.638 38.9436,-109.664 38.9492,-109.69 38.9553,-109.715 38.9613,-109.72 38.9618,-109.746 38.9581,-109.769 38.9535,-109.793 38.9476,-109.816 38.9404)
+LINESTRING(-104.982 39.82,-104.968 39.8126,-104.936 39.7967,-104.904 39.7829,-104.877 39.7767,-104.829 39.77,-104.801 39.7662,-104.775 39.7582,-104.732 39.7385,-104.703 39.7405,-104.673 39.7388,-104.643 39.7368,-104.614 39.7377,-104.605 39.7385,-104.597 39.7387,-104.589 39.7386,-104.58 39.7383,-104.539 39.7381,-104.497 39.7395,-104.455 39.7399,-104.414 39.7367,-104.405 39.7334,-104.396 39.7302,-104.365 39.7287,-104.336 39.7289,-104.307 39.7279,-104.275 39.7227,-104.264 39.7201,-104.252 39.7178,-104.24 39.7154,-104.228 39.7125,-104.204 39.7071,-104.177 39.7025,-104.15 39.6971,-104.128 39.6888,-104.076 39.651,-104.036 39.6041,-104.003 39.5534,-103.97 39.5045,-103.96 39.4937,-103.948 39.484,-103.936 39.4739,-103.926 39.4616,-103.91 39.4348,-103.895 39.4075,-103.88 39.3802,-103.864 39.3531,-103.855 39.3489,-103.845 39.3433,-103.838 39.3358,-103.835 39.3276,-103.831 39.3196,-103.824 39.3126,-103.806 39.3032,-103.778 39.2911,-103.748 39.2803,-103.727 39.275,-103.717 39.2741,-103.708 39.2733)
+LINESTRING(-76.3446 36.7551,-76.3471 36.7553,-76.3496 36.7556,-76.3522 36.7559,-76.3547 36.7561,-76.3588 36.7629,-76.3646 36.7677,-76.3705 36.7722,-76.3752 36.7779,-76.3779 36.7786,-76.3806 36.7792,-76.3833 36.7799,-76.386 36.7805,-76.3876 36.7824,-76.3892 36.7844,-76.3908 36.7863,-76.3924 36.7882,-76.3952 36.7869,-76.398 36.7856,-76.4252 36.7823,-76.4645 36.7714,-76.5032 36.7587,-76.5288 36.7498,-76.5442 36.7551,-76.5663 36.7612,-76.5886 36.7653,-76.6046 36.7643,-76.6102 36.7536,-76.6158 36.7428,-76.6214 36.7321,-76.627 36.7213)
+LINESTRING(-103.708 39.2733,-103.688 39.2707,-103.657 39.268,-103.627 39.2659,-103.609 39.2651,-103.602 39.2652,-103.595 39.2653,-103.588 39.2655,-103.581 39.2658)
+LINESTRING(-112.615 38.5765,-112.616 38.5923,-112.616 38.6082,-112.616 38.6241,-112.616 38.6399,-112.606 38.6514,-112.595 38.6614,-112.595 38.6748,-112.602 38.6871,-112.601 38.7062,-112.577 38.7398,-112.525 38.7907,-112.471 38.8392,-112.415 38.8871,-112.36 38.9356,-112.353 38.9444,-112.35 38.9526,-112.348 38.9611,-112.344 38.9705,-112.336 38.9814,-112.327 38.9916,-112.318 39.0019,-112.312 39.0132,-112.305 39.0283,-112.299 39.0434,-112.293 39.0585,-112.287 39.0735,-112.28 39.083,-112.271 39.0911,-112.261 39.0989,-112.253 39.1076,-112.247 39.1179,-112.244 39.1286,-112.24 39.1394,-112.235 39.1498,-112.2 39.1873,-112.156 39.2191,-112.114 39.2506,-112.083 39.2873,-112.075 39.3192,-112.075 39.3539,-112.072 39.3885,-112.055 39.4197,-112.036 39.4361,-112.013 39.4515,-111.991 39.4668,-111.974 39.4827,-111.963 39.5014,-111.955 39.5231,-111.948 39.5454,-111.94 39.5657,-111.934 39.5732,-111.924 39.5833,-111.918 39.5899,-111.912 39.5965,-111.909 39.6085,-111.906 39.6205,-111.903 39.6325,-111.9 39.6445,-111.887 39.6593,-
111.864 39.6723,-111.839 39.6874,-111.819 39.7088,-111.821 39.7241,-111.828 39.7529,-111.837 39.7843,-111.84 39.8072,-111.834 39.8357,-111.822 39.8809,-111.811 39.9229,-111.806 39.9418,-111.798 39.9509,-111.79 39.9599,-111.782 39.969,-111.774 39.978)
+LINESTRING(-103.581 39.2658,-103.551 39.2677,-103.522 39.2702,-103.493 39.2726,-103.463 39.2744,-103.387 39.2774,-103.31 39.28,-103.233 39.2823,-103.157 39.2846,-103.141 39.2855,-103.124 39.2868,-103.107 39.2878,-103.091 39.2876,-103.07 39.2854,-103.048 39.282,-103.026 39.2782,-103.004 39.2747,-102.978 39.2757,-102.942 39.2819,-102.905 39.2889,-102.874 39.2923,-102.79 39.2929,-102.706 39.2936,-102.623 39.2938,-102.539 39.293,-102.467 39.2913,-102.395 39.2895,-102.323 39.2895,-102.252 39.2929,-102.247 39.2966,-102.242 39.3008,-102.238 39.3053,-102.235 39.31,-102.188 39.3156,-102.141 39.3211,-102.094 39.3263,-102.047 39.3311)
+LINESTRING(-94.563 39.1765,-94.5519 39.1761,-94.5406 39.1771,-94.5296 39.1792,-94.5192 39.1822,-94.5154 39.1858,-94.5138 39.1897,-94.5129 39.1937,-94.5113 39.1977,-94.5044 39.2063,-94.4963 39.2134,-94.4879 39.2202,-94.4801 39.2277,-94.4686 39.2423,-94.4582 39.2573,-94.4474 39.2724,-94.4347 39.2871,-94.4324 39.2893,-94.4301 39.2916,-94.4279 39.2941,-94.4261 39.2966,-94.4109 39.3221,-94.3958 39.3476,-94.3809 39.3733,-94.3663 39.399,-94.344 39.4372,-94.3209 39.4758,-94.2987 39.5146,-94.279 39.5535,-94.2648 39.5932,-94.2448 39.6589,-94.2273 39.7256,-94.2233 39.7521)
+LINESTRING(-94.563 39.1765,-94.5748 39.1878,-94.5954 39.1994,-94.6181 39.211,-94.6362 39.2224,-94.6405 39.2307,-94.6438 39.2387,-94.6469 39.2463,-94.6507 39.2534,-94.6646 39.2727,-94.6774 39.2905,-94.6864 39.3096,-94.6888 39.3326,-94.7095 39.3429,-94.7301 39.3533,-94.7542 39.3655,-94.7656 39.3716,-94.7849 39.4128,-94.7904 39.4698,-94.7889 39.5281,-94.7874 39.5734,-94.7888 39.6173,-94.7901 39.6612,-94.7919 39.705,-94.7931 39.7488)
+LINESTRING(-110.251 38.9886,-110.294 38.9628,-110.331 38.9424,-110.371 38.9279,-110.421 38.9197,-110.435 38.9206,-110.446 38.9245,-110.456 38.9293,-110.467 38.9334,-110.469 38.9393,-110.476 38.9396,-110.484 38.94,-110.494 38.9312,-110.503 38.9224,-110.512 38.9137,-110.521 38.905,-110.526 38.9053,-110.533 38.9048,-110.538 38.9033,-110.543 38.9003,-110.56 38.8999,-110.593 38.8969,-110.627 38.8927,-110.649 38.8893,-110.668 38.8731,-110.692 38.8678,-110.718 38.8685,-110.744 38.8703,-110.756 38.8695,-110.77 38.8671,-110.785 38.8641,-110.797 38.8614,-110.803 38.8636,-110.81 38.866,-110.817 38.8678,-110.823 38.8684,-110.831 38.8653,-110.836 38.8656,-110.841 38.8658,-110.849 38.8709,-110.857 38.8685,-110.863 38.8645,-110.867 38.8591,-110.87 38.853,-110.877 38.8528,-110.883 38.8526,-110.888 38.8477,-110.893 38.8468,-110.899 38.846,-110.904 38.8486,-110.91 38.8513,-110.915 38.8539,-110.921 38.8566,-110.927 38.8564,-110.932 38.8562,-110.939 38.8526,-110.944 38.8477,-110.97 38.8423,-110.983 38.8419,-110.995 38.8446,-11
1.019 38.8488,-111.04 38.848,-111.062 38.843,-111.084 38.8376,-111.106 38.8354,-111.112 38.8287,-111.118 38.8274,-111.124 38.8265,-111.13 38.826,-111.137 38.8257,-111.141 38.8218,-111.145 38.818,-111.167 38.8125,-111.194 38.81,-111.221 38.8097,-111.245 38.8105,-111.252 38.807,-111.258 38.8031,-111.264 38.7988,-111.27 38.7943,-111.277 38.7941,-111.285 38.7928,-111.292 38.7905,-111.297 38.7872,-111.3 38.7814,-111.311 38.7772,-111.323 38.7747,-111.336 38.7728,-111.347 38.7703,-111.378 38.761,-111.397 38.7562,-111.416 38.7546,-111.45 38.7545,-111.456 38.7575,-111.462 38.7603,-111.468 38.7626,-111.475 38.7641,-111.492 38.7819,-111.506 38.7926,-111.519 38.8,-111.529 38.8078,-111.533 38.8159,-111.534 38.8243,-111.533 38.8329,-111.534 38.8414,-111.537 38.8481,-111.542 38.8559,-111.547 38.8642,-111.551 38.8723,-111.561 38.878,-111.572 38.8806,-111.584 38.8817,-111.596 38.8828,-111.603 38.8852,-111.612 38.8894,-111.621 38.8936,-111.629 38.8979,-111.631 38.9023,-111.635 38.9056,-111.641 38.9025,-111.647 38.8993,-111.67
6 38.9039,-111.72 38.9135,-111.762 38.9244,-111.783 38.9327,-111.789 38.9335,-111.795 38.9342,-111.801 38.9346,-111.807 38.935,-111.812 38.9312,-111.817 38.9273,-111.826 38.927,-111.837 38.9292,-111.848 38.932,-111.859 38.9333,-111.866 38.9299,-111.876 38.9222,-111.885 38.9137,-111.892 38.9079,-111.89 38.9027,-111.889 38.8975,-111.913 38.8868,-111.944 38.88,-111.976 38.8721,-112.005 38.8577,-112.024 38.8439,-112.054 38.8209,-112.082 38.7986,-112.096 38.7869,-112.098 38.7793,-112.099 38.7715,-112.101 38.7637,-112.103 38.7561,-112.11 38.7448,-112.122 38.7279,-112.134 38.7108,-112.143 38.6994,-112.162 38.6747,-112.178 38.656,-112.189 38.6399,-112.197 38.6231,-112.199 38.6152,-112.201 38.6073,-112.203 38.5994,-112.205 38.5913,-112.211 38.5875,-112.218 38.5852,-112.225 38.5835,-112.231 38.5813,-112.257 38.5734,-112.276 38.5748,-112.297 38.579,-112.329 38.5794,-112.334 38.5785,-112.339 38.5772,-112.343 38.5762,-112.349 38.5762,-112.353 38.5733,-112.357 38.5705,-112.362 38.5676,-112.366 38.5648,-112.365 38.5585,-11
2.363 38.5521,-112.37 38.5487,-112.378 38.5453,-112.387 38.5509,-112.4 38.5532,-112.414 38.554,-112.426 38.5546,-112.433 38.5598,-112.436 38.5632,-112.437 38.5664,-112.457 38.5716,-112.479 38.5806,-112.498 38.5925,-112.507 38.606,-112.519 38.6065,-112.53 38.607,-112.547 38.6078,-112.557 38.6085,-112.571 38.6025,-112.585 38.5932,-112.6 38.5835,-112.615 38.5765)
+LINESTRING(-79.3755 37.8185,-79.4232 37.7616,-79.4307 37.7473,-79.4437 37.7269,-79.4583 37.7071,-79.4704 37.695,-79.4972 37.6792,-79.5256 37.6639,-79.5543 37.6488,-79.582 37.6333,-79.6059 37.6169,-79.6278 37.5989,-79.6494 37.5807,-79.6725 37.5638,-79.6801 37.5595,-79.6885 37.5557,-79.697 37.5519,-79.705 37.5479,-79.7188 37.5393,-79.7323 37.5297,-79.7458 37.5198,-79.7594 37.5106,-79.7851 37.4956,-79.8114 37.4811,-79.8376 37.4665,-79.8629 37.451,-79.8878 37.4309,-79.9091 37.409,-79.9319 37.3868,-79.9616 37.3659,-79.9831 37.3596)
+LINESTRING(-84.5238 38.1131,-84.5277 38.1296,-84.5313 38.1517,-84.5315 38.173,-84.5252 38.1869,-84.5286 38.2085,-84.5374 38.2288,-84.5474 38.249,-84.5545 38.2701,-84.5556 38.2825,-84.5552 38.2955,-84.555 38.3087,-84.5568 38.3214,-84.5611 38.3359,-84.5653 38.3504,-84.5692 38.3647,-84.5725 38.3799,-84.5762 38.3999,-84.576 38.4113,-84.5736 38.4218,-84.5706 38.4393,-84.571 38.442,-84.5722 38.4464,-84.5734 38.4501,-84.5745 38.4538,-84.5788 38.473,-84.5817 38.4901,-84.5841 38.5067,-84.5872 38.5242,-84.5897 38.5315,-84.5935 38.5389,-84.5971 38.5465,-84.5991 38.5546,-84.5971 38.5702,-84.5908 38.589,-84.5834 38.6079,-84.5782 38.6238,-84.5776 38.627,-84.577 38.6302,-84.5764 38.6333,-84.5757 38.6365,-84.5812 38.6482,-84.5875 38.6599,-84.5933 38.6714,-84.597 38.6829,-84.6014 38.7055,-84.6066 38.7347,-84.6099 38.7637,-84.6087 38.7859,-84.6052 38.7966,-84.6013 38.8069,-84.5981 38.8175,-84.5969 38.8289,-84.5999 38.8342,-84.6049 38.8397,-84.6109 38.8445,-84.6174 38.8476,-84.6176 38.8553,-84.6185 38.8631,-84.6198 38.8707,-8
4.6211 38.8784)
+LINESTRING(-94.563 39.1765,-94.5747 39.0969)
+LINESTRING(-88.5806 39.0957,-88.6558 39.0725,-88.731 39.0501,-88.8065 39.0279,-88.8819 39.0056,-88.9048 38.9981,-88.9274 38.99,-88.9501 38.9821,-88.9733 38.9752,-89.0024 38.9739,-89.0371 38.9789,-89.0753 38.9835,-89.1153 38.9811,-89.1474 38.9711,-89.1753 38.9576,-89.1995 38.9442,-89.2203 38.9347,-89.2301 38.9299,-89.2368 38.9239,-89.2425 38.9182,-89.2594 38.9117,-89.2709 38.9099,-89.2824 38.9078,-89.2931 38.9045,-89.3068 38.8975,-89.3222 38.8885,-89.3379 38.8802,-89.3529 38.8752,-89.3713 38.871,-89.3881 38.866,-89.4045 38.8605,-89.422 38.8548,-89.4464 38.8502,-89.4711 38.848,-89.4963 38.8433,-89.5225 38.8313,-89.5513 38.827,-89.5773 38.8137,-89.603 38.7987,-89.6311 38.7895,-89.6604 38.7883,-89.6979 38.7875,-89.732 38.7829,-89.7515 38.7703,-89.7655 38.7648,-89.7817 38.7639,-89.7983 38.765,-89.8134 38.7656,-89.8204 38.7643,-89.8276 38.7624,-89.8482 38.7585,-89.8675 38.7567,-89.8866 38.7555,-89.9066 38.7531)
+LINESTRING(-89.6454 39.7396,-89.6443 39.7271,-89.6433 39.7146,-89.6422 39.7022,-89.6411 39.6897,-89.643 39.6875,-89.645 39.6854,-89.6469 39.6832,-89.6489 39.6811,-89.6446 39.5708,-89.6431 39.4602,-89.6431 39.3495,-89.6432 39.2391,-89.6581 39.2106,-89.6921 39.1611,-89.7291 39.1126,-89.7532 39.0871,-89.7545 39.073,-89.7554 39.0583,-89.7553 39.0436,-89.7541 39.0295,-89.7524 39.0275,-89.7506 39.0255,-89.7504 39.0123,-89.7502 38.9992,-89.75 38.986,-89.7498 38.9729,-89.7516 38.9704,-89.7535 38.9679,-89.7556 38.9652,-89.7575 38.9634,-89.7967 38.9311,-89.8353 38.8933,-89.8683 38.8527,-89.8904 38.8116,-89.895 38.7971,-89.8989 38.7825,-89.9025 38.7677,-89.9066 38.7531)
+LINESTRING(-85.8502 38.3143,-85.8406 38.3137,-85.835 38.3137,-85.8253 38.3124,-85.8218 38.3113,-85.8193 38.3094,-85.8171 38.307,-85.8147 38.3045,-85.8092 38.2984,-85.8054 38.2923,-85.8017 38.2862,-85.7966 38.2798,-85.7964 38.2797)
+LINESTRING(-94.6077 39.0938,-94.605 39.094,-94.59 39.0952,-94.5747 39.0969)
+LINESTRING(-85.8448 38.9945,-85.8376 38.9838,-85.8347 38.9685,-85.836 38.9545,-85.8372 38.9404,-85.8343 38.9252,-85.8258 38.9141,-85.8139 38.9054,-85.8039 38.8966,-85.8013 38.8852,-85.8037 38.8725,-85.8057 38.8612,-85.8076 38.8499,-85.8101 38.8372,-85.8132 38.8238,-85.8164 38.8121,-85.8196 38.8004,-85.8227 38.787,-85.8227 38.7629,-85.8143 38.7419,-85.802 38.7211,-85.7901 38.6975,-85.7786 38.6532,-85.7776 38.613,-85.7798 38.5724,-85.7776 38.5265,-85.7721 38.4923,-85.7665 38.4623,-85.7608 38.4323,-85.7553 38.3981,-85.7528 38.3604,-85.7532 38.3214,-85.753 38.2824,-85.7514 38.2679)
+LINESTRING(-84.4553 38.0789,-84.4672 38.089,-84.487 38.1014,-84.508 38.111,-84.5238 38.1131)
+LINESTRING(-94.6075 39.0707,-94.6001 39.0763,-94.5914 39.0831,-94.583 39.09,-94.5747 39.0969)
+LINESTRING(-84.1488 38.0179,-84.1098 38.0248,-84.0848 38.0329,-84.0625 38.0443,-84.0317 38.0615,-84.0241 38.0618,-84.006 38.067,-83.9873 38.0725,-83.9685 38.0777,-83.95 38.0818,-83.9378 38.0829,-83.9247 38.0828,-83.9117 38.0829,-83.8997 38.0843,-83.8798 38.091,-83.8624 38.0988,-83.8424 38.1043,-83.815 38.104,-83.8082 38.1088,-83.8013 38.1136,-83.7945 38.1183,-83.7877 38.1231,-83.7564 38.1252,-83.7298 38.134,-83.7043 38.1446,-83.6764 38.1519,-83.6577 38.1543,-83.6391 38.1568,-83.6204 38.1592,-83.6018 38.1616,-83.5773 38.1681,-83.5608 38.1762,-83.5391 38.182,-83.4988 38.1813,-83.4659 38.1989,-83.4417 38.2277,-83.4227 38.257,-83.4053 38.2759,-83.385 38.2802,-83.3652 38.2816,-83.3461 38.2826,-83.3282 38.2859,-83.2992 38.2964,-83.2724 38.3077,-83.2445 38.3177,-83.2121 38.3241,-83.2026 38.3244,-83.1931 38.324,-83.1755 38.3246,-83.1499 38.3258,-83.1251 38.3269,-83.1099 38.3271,-83.0851 38.3254,-83.0544 38.3236,-83.0242 38.3231,-83.0008 38.325,-82.9924 38.3279,-82.9851 38.3321,-82.9782 38.3365,-82.9632 38.3415,-82.
9549 38.3425,-82.9465 38.3435,-82.9385 38.345,-82.9138 38.3524,-82.8888 38.3605,-82.8633 38.3671,-82.8372 38.3696,-82.8084 38.3686,-82.7784 38.367,-82.7485 38.3659,-82.7199 38.3665,-82.6981 38.3696,-82.6768 38.3743,-82.6554 38.3781,-82.6478 38.3784)
+LINESTRING(-85.7488 38.2444,-85.7394 38.2496,-85.7299 38.2547,-85.7205 38.2598,-85.7111 38.265,-85.6946 38.2694,-85.67 38.2752,-85.654 38.2789,-85.6379 38.2825,-85.623 38.2899,-85.6073 38.2965,-85.5913 38.3024,-85.5753 38.3081,-85.5367 38.3227,-85.4988 38.3382,-85.4611 38.354,-85.423 38.3697,-85.4077 38.3749,-85.3916 38.3795,-85.3757 38.3844,-85.3608 38.3904,-85.3512 38.3962,-85.3418 38.4032,-85.3331 38.4109,-85.3255 38.4185,-85.2894 38.4567,-85.2531 38.4961,-85.2179 38.5361,-85.1851 38.5761,-85.1797 38.5857,-85.1759 38.5964,-85.1719 38.6075,-85.1661 38.6178,-85.1568 38.6256,-85.143 38.6331,-85.1282 38.6405,-85.1159 38.6475,-85.0934 38.6513,-85.0736 38.6548,-85.055 38.6586,-85.0357 38.6631,-84.9534 38.6871,-84.8796 38.7156,-84.8102 38.7502,-84.7408 38.7922,-84.7127 38.8135,-84.6827 38.8386,-84.6519 38.862,-84.6211 38.8784)
+LINESTRING(-85.7514 38.2679,-85.7494 38.2501,-85.7488 38.2444)
+LINESTRING(-85.7964 38.2797,-85.7867 38.2714,-85.7745 38.263,-85.7615 38.2542,-85.7513 38.2464,-85.7488 38.2444)
+LINESTRING(-84.4288 38.052,-84.4354 38.0587,-84.442 38.0655,-84.4486 38.0722,-84.4553 38.0789)
+LINESTRING(-84.5238 38.1131,-84.5449 38.1246,-84.5659 38.136,-84.587 38.1475,-84.6081 38.159,-84.6184 38.1589,-84.6286 38.1592,-84.6388 38.1595,-84.649 38.1598,-84.6751 38.1601,-84.7019 38.1608,-84.7286 38.1624,-84.7543 38.165,-84.7685 38.1676,-84.783 38.1707,-84.7976 38.1732,-84.8122 38.1735,-84.8259 38.1713,-84.8386 38.1678,-84.8511 38.164,-84.8638 38.1611,-84.8948 38.1563,-84.9271 38.152,-84.9595 38.1484,-84.9909 38.1458,-85.04 38.1493,-85.1129 38.1601,-85.187 38.1733,-85.2395 38.1837,-85.3204 38.2003,-85.3953 38.2124,-85.4713 38.22,-85.5555 38.2225,-85.5724 38.2232,-85.5905 38.2254,-85.6082 38.2294,-85.6237 38.2356,-85.6366 38.234,-85.6494 38.2344,-85.6622 38.2349,-85.6746 38.2338,-85.6911 38.2354,-85.7126 38.2354,-85.7336 38.2373,-85.7488 38.2444)
+LINESTRING(-102.047 39.3311,-102.046 39.3311,-101.966 39.3293,-101.885 39.3285,-101.805 39.3284,-101.725 39.3286,-101.663 39.329,-101.6 39.3296,-101.538 39.3303,-101.476 39.3307,-101.454 39.3308,-101.432 39.331,-101.405 39.3313,-101.392 39.3317,-101.372 39.3387,-101.353 39.3486,-101.333 39.3587,-101.313 39.3658,-101.263 39.3687,-101.182 39.3687,-101.096 39.3673,-101.034 39.3663,-101.021 39.3578,-101.01 39.3437,-101 39.3289,-100.988 39.3182,-100.985 39.3168,-100.98 39.3149,-100.975 39.3131,-100.973 39.3117,-100.947 39.282,-100.921 39.2522,-100.896 39.2225,-100.87 39.1927)
+LINESTRING(-92.2947 38.961,-92.2637 38.9591,-92.2326 38.9579,-92.2015 38.9569,-92.1705 38.9553,-92.1433 38.953,-92.1163 38.9504,-92.0892 38.948,-92.0617 38.9468,-92.0419 38.947,-92.0216 38.9477,-92.0014 38.9481,-91.9818 38.9474,-91.9681 38.9456,-91.9546 38.943,-91.9411 38.9403,-91.9274 38.9386,-91.9022 38.9377,-91.8628 38.937,-91.8253 38.9363,-91.8056 38.9352,-91.7811 38.9278,-91.7586 38.919,-91.7351 38.9113,-91.7077 38.907,-91.6892 38.9056,-91.671 38.904,-91.6528 38.9022,-91.6345 38.9006,-91.5994 38.9,-91.5636 38.9016,-91.5281 38.9025,-91.4937 38.9,-91.4677 38.8937,-91.4421 38.8847,-91.4166 38.8755,-91.3908 38.8683,-91.3769 38.8671,-91.3628 38.8678,-91.3489 38.8685,-91.3352 38.8673,-91.3214 38.8637,-91.3073 38.8592,-91.2931 38.855,-91.2793 38.8523,-91.273 38.852,-91.2662 38.8523,-91.2595 38.8525,-91.2533 38.852,-91.2352 38.8469,-91.2173 38.8396,-91.1993 38.8323,-91.1811 38.8273,-91.1628 38.8249,-91.1384 38.8228,-91.1144 38.8216,-91.0973 38.8223,-91.0799 38.8271,-91.066 38.8332,-91.0495 38.8375,-91.0244 38.
8368,-90.9742 38.8279,-90.9249 38.8168,-90.8753 38.8063,-90.8243 38.7994)
+LINESTRING(-84.1488 38.0179,-84.188 38.0094,-84.2098 38.0119,-84.2305 38.0217,-84.266 38.035,-84.2753 38.0367,-84.2863 38.0377,-84.2976 38.0386,-84.308 38.04,-84.339 38.0492,-84.3672 38.0588,-84.3959 38.062,-84.4288 38.052)
+LINESTRING(-93.2001 38.9651,-93.2657 38.9673,-93.3313 38.9695,-93.3969 38.9719,-93.4624 38.9751,-93.4733 38.9764,-93.4833 38.9787,-93.493 38.9812,-93.5034 38.9834,-93.508 38.9838,-93.5126 38.9842,-93.5173 38.9847,-93.5219 38.9851,-93.5422 38.9873,-93.5697 38.9905,-93.5964 38.9936,-93.6142 38.9952,-93.6204 38.993,-93.6266 38.9909,-93.6339 38.9886,-93.6378 38.9877,-93.6541 38.9888,-93.6705 38.99,-93.6869 38.9913,-93.703 38.993,-93.7118 38.9947,-93.7204 38.9972,-93.7292 38.9995,-93.7387 39.0008,-93.863 39.0076,-93.9875 39.0142,-94.112 39.0198,-94.2366 39.0234,-94.254 39.0257,-94.2701 39.0306,-94.2861 39.0359,-94.3027 39.0397,-94.3615 39.0432,-94.421 39.044,-94.4793 39.0495,-94.5346 39.0669,-94.5445 39.0723,-94.5572 39.0803,-94.5686 39.0891,-94.5747 39.0969)
+LINESTRING(-92.2947 38.961,-92.3007 38.9631,-92.3084 38.965,-92.3162 38.9665,-92.3225 38.9669,-92.3277 38.966,-92.333 38.9639,-92.3383 38.9619,-92.3432 38.9606,-92.385 38.9594,-92.43 38.962,-92.4751 38.9662,-92.5172 38.9698,-92.5366 38.965,-92.5527 38.9525,-92.5687 38.9396,-92.5876 38.9335,-92.6772 38.9322,-92.7668 38.9308,-92.8564 38.9296,-92.946 38.9282,-92.9694 38.9303,-92.9873 38.9355,-93.0034 38.9413,-93.0213 38.9451,-93.0477 38.947,-93.0745 38.9478,-93.1012 38.9487,-93.1278 38.9505,-93.1463 38.9535,-93.1643 38.9576,-93.1821 38.9619,-93.2001 38.9651)
+LINESTRING(-95.7222 39.0265,-95.6975 39.0266,-95.6729 39.0267,-95.6482 39.0268,-95.6236 39.0269)
+LINESTRING(-77.5537 36.7036,-77.539 36.7144,-77.5165 36.724,-77.4927 36.7322,-77.4743 36.7386,-77.4537 36.7513,-77.4471 36.7654,-77.4459 36.7816,-77.4413 36.8008,-77.4297 36.8179,-77.4139 36.8339,-77.3988 36.8494,-77.3895 36.8652,-77.387 36.8916,-77.3846 36.9181,-77.3821 36.9445,-77.3797 36.971,-77.38 36.983,-77.381 36.995,-77.3814 37.007,-77.38 37.019,-77.3778 37.0265,-77.3749 37.0339,-77.372 37.0412,-77.37 37.0483,-77.3669 37.0757,-77.3664 37.0999,-77.3647 37.1244,-77.3578 37.1524)
+LINESTRING(-95.2328 38.9937,-95.2204 38.9939,-95.2081 38.9942,-95.1958 38.9946,-95.1835 38.9955,-95.1803 38.9981,-95.1768 39.0003,-95.1521 39.0125,-95.1272 39.0259,-95.1022 39.0389,-95.0773 39.0498,-95.0251 39.0657,-94.9502 39.0842,-94.8735 39.0995,-94.816 39.1058,-94.783 39.1065,-94.7468 39.1076,-94.7106 39.1074,-94.6778 39.1044,-94.6663 39.1015,-94.6548 39.0976,-94.6431 39.0943,-94.6309 39.0929,-94.6188 39.0932,-94.6077 39.0938)
+LINESTRING(-95.6236 39.0269,-95.6004 39.0326,-95.5753 39.0313,-95.5507 39.0255,-95.5291 39.0174,-95.4909 39.0175,-95.4522 39.0116,-95.4135 39.0035,-95.3754 38.9973,-95.3573 38.9961,-95.3392 38.9959,-95.3211 38.9962,-95.3029 38.9965,-95.2915 38.996,-95.2797 38.9945,-95.2681 38.992,-95.2573 38.9889,-95.2511 38.9901,-95.245 38.9913,-95.2389 38.9925,-95.2328 38.9937)
+LINESTRING(-89.9066 38.7531,-89.9077 38.7451,-89.909 38.7354,-89.9112 38.726,-89.9152 38.7191,-89.9418 38.7125,-89.9689 38.7065,-89.9931 38.6971,-90.0111 38.6802,-90.0135 38.6795,-90.0158 38.6788,-90.052 38.6672,-90.086 38.66,-90.1174 38.6495,-90.1458 38.6284)
+LINESTRING(-90.1809 38.6264,-90.1458 38.6284)
+LINESTRING(-90.1962 38.6256,-90.1809 38.6264)
+LINESTRING(-90.1962 38.6256,-90.195 38.6318,-90.1969 38.6385,-90.2004 38.645,-90.2038 38.6505,-90.2083 38.6583,-90.2136 38.6669,-90.2195 38.6751,-90.2257 38.6819,-90.2413 38.6891,-90.271 38.7001,-90.3012 38.7106,-90.3184 38.7162,-90.3238 38.7171,-90.3295 38.7174,-90.3351 38.718,-90.3401 38.7198,-90.3707 38.7302,-90.392 38.735,-90.4135 38.7376,-90.4451 38.7415,-90.4636 38.7486,-90.4939 38.7627,-90.5265 38.7776,-90.5519 38.7868,-90.6191 38.7959,-90.6878 38.7972,-90.7567 38.7965,-90.8243 38.7994)
+LINESTRING(-90.6984 38.7106,-90.6923 38.7084,-90.6861 38.7063,-90.68 38.7042,-90.6738 38.702,-90.6701 38.6948,-90.6663 38.6876,-90.6629 38.6802,-90.6598 38.6728,-90.656 38.6711,-90.6523 38.6693,-90.6485 38.6676,-90.6447 38.6658,-90.6164 38.6675,-90.5965 38.6628,-90.5791 38.655,-90.5585 38.6477,-90.5135 38.6403,-90.4516 38.6343,-90.39 38.6312,-90.3462 38.6328,-90.3119 38.6338,-90.2774 38.6328,-90.2429 38.6307,-90.2085 38.6281,-90.2054 38.6275,-90.2023 38.6269,-90.1993 38.6262,-90.1962 38.6256)
+LINESTRING(-78.0906 36.7569,-78.0737 36.7692,-78.0479 36.7764,-78.0214 36.782,-78.0024 36.7896,-77.9838 36.8045,-77.9643 36.8194,-77.9433 36.8326,-77.9199 36.8428,-77.9075 36.8424,-77.8951 36.8417,-77.8829 36.8419,-77.871 36.8444,-77.8612 36.8487,-77.8525 36.8542,-77.8368 36.8667,-77.821 36.8802,-77.8049 36.8933,-77.7885 36.9044,-77.7736 36.9118,-77.7575 36.9184,-77.7422 36.9256,-77.7291 36.9349,-77.7151 36.9501,-77.7025 36.9662,-77.6896 36.9821,-77.6746 36.9966,-77.6453 37.0188,-77.6149 37.0405,-77.5862 37.0634,-77.5616 37.0888,-77.5472 37.107,-77.5345 37.1246,-77.523 37.1429,-77.5129 37.1628,-77.5092 37.1714,-77.5068 37.1767,-77.4743 37.2,-77.4499 37.2026,-77.4267 37.2036)
+LINESTRING(-84.1488 38.0179,-84.1207 37.9963,-84.0914 37.9866,-84.0627 37.98,-84.0365 37.9677,-84.0162 37.9522,-83.9908 37.9319,-83.9671 37.9117,-83.9522 37.8964,-83.9466 37.8862,-83.9431 37.8759,-83.9395 37.8656,-83.9338 37.8558,-83.9016 37.838,-83.8565 37.8351,-83.8095 37.8405,-83.7719 37.8477,-83.7689 37.8467,-83.7658 37.8456,-83.7628 37.8445,-83.7598 37.8435,-83.7576 37.8404,-83.7555 37.8373,-83.7534 37.8342,-83.7513 37.8311,-83.7439 37.829,-83.7359 37.8273,-83.7278 37.8262,-83.72 37.8257,-83.7082 37.8173,-83.6901 37.8099,-83.6705 37.8039,-83.6542 37.7998,-83.6505 37.7963,-83.6468 37.7929,-83.6465 37.7907,-83.6463 37.7885,-83.6461 37.7864,-83.6458 37.7842,-83.6233 37.7723,-83.6124 37.7613,-83.5946 37.7514,-83.5514 37.7429,-83.547 37.7444,-83.5426 37.7459,-83.5382 37.7474,-83.5338 37.7489,-83.5211 37.7467,-83.5058 37.7444,-83.4906 37.7439,-83.4785 37.7471,-83.4724 37.7429,-83.4662 37.7387,-83.4601 37.7346,-83.454 37.7304,-83.4362 37.7365,-83.4202 37.7413,-83.4035 37.7434,-83.3832 37.7414,-83.3772 37.7464
,-83.3713 37.7514,-83.3653 37.7564,-83.3594 37.7614,-83.3128 37.7583,-83.2687 37.7455,-83.2226 37.7374,-83.1699 37.7484,-83.1569 37.7453,-83.1356 37.7396,-83.1154 37.7337,-83.1053 37.7299,-83.0988 37.7344,-83.0925 37.7397,-83.0869 37.7454,-83.0825 37.7512)
+LINESTRING(-78.0906 36.7569,-78.0978 36.7466,-78.105 36.7362,-78.1119 36.7257,-78.1183 36.715)
+LINESTRING(-81.1102 37.2786,-81.1048 37.2836,-81.0852 37.2985,-81.0716 37.3061,-81.0695 37.308,-81.0673 37.31,-81.0652 37.3119,-81.063 37.3139,-81.062 37.3243,-81.0613 37.3354,-81.0597 37.3462,-81.0561 37.3561,-81.0533 37.3602,-81.0503 37.364,-81.0477 37.368,-81.0465 37.3729,-81.0496 37.3806,-81.0568 37.3947,-81.0644 37.4103,-81.0686 37.4226,-81.0691 37.4345,-81.0682 37.4465,-81.068 37.4584,-81.0705 37.4698,-81.0797 37.4812,-81.0939 37.4905,-81.1084 37.4999,-81.1187 37.5115,-81.1182 37.5174,-81.116 37.5281,-81.1136 37.54,-81.1128 37.5492,-81.1161 37.5621,-81.1216 37.5744,-81.1264 37.587,-81.1281 37.6007,-81.1258 37.6112,-81.1213 37.6215,-81.1169 37.6318,-81.1148 37.6421,-81.1205 37.6634,-81.1353 37.6853,-81.1552 37.7051,-81.1759 37.7199,-81.1794 37.7205,-81.1829 37.721,-81.1864 37.7215,-81.1899 37.7221,-81.1933 37.7248,-81.1966 37.7275,-81.1998 37.7304,-81.2029 37.7333)
+LINESTRING(-77.5802 36.5457,-77.5802 36.5459,-77.5804 36.5493,-77.5815 36.5538,-77.5827 36.5584,-77.5831 36.5621,-77.5806 36.5985,-77.5755 36.634,-77.5669 36.669,-77.5537 36.7036)
+LINESTRING(-81.1308 37.2554,-81.1226 37.2672,-81.1102 37.2786)
+LINESTRING(-105.04 39.7197,-105.029 39.7184,-105.018 39.7172,-105.008 39.7159,-104.997 39.7146,-104.972 39.7042,-104.947 39.6888,-104.925 39.6704,-104.912 39.6508,-104.894 39.6116,-104.884 39.5913,-104.879 39.5672,-104.877 39.5164,-104.877 39.5134,-104.877 39.5103,-104.877 39.5072,-104.877 39.5042,-104.878 39.4882,-104.88 39.4712,-104.881 39.4543,-104.881 39.4385,-104.877 39.4251,-104.869 39.4084,-104.862 39.3905,-104.857 39.3734,-104.864 39.3622,-104.87 39.3464,-104.876 39.3302,-104.88 39.3177,-104.891 39.291,-104.896 39.2795,-104.892 39.2676,-104.878 39.2395,-104.875 39.2326,-104.874 39.2255,-104.872 39.2185,-104.868 39.2117,-104.863 39.2056,-104.858 39.2,-104.855 39.194,-104.853 39.1866,-104.854 39.1623,-104.859 39.1394,-104.862 39.1159,-104.86 39.0902,-104.848 39.0599,-104.831 39.0304,-104.815 39.0011,-104.808 38.9714,-104.81 38.9394,-104.819 38.9168,-104.829 38.8998,-104.835 38.8846,-104.836 38.8707,-104.835 38.8565,-104.834 38.8422,-104.834 38.8279)
+LINESTRING(-87.4455 38.1769,-87.4091 38.1844,-87.3725 38.189,-87.3356 38.1921,-87.2982 38.1947,-87.2863 38.1961,-87.2738 38.1979,-87.2615 38.1996,-87.2502 38.2005,-87.2301 38.2,-87.2098 38.1986,-87.1895 38.197,-87.1694 38.1959,-87.1415 38.1963,-87.1135 38.1981,-87.0857 38.1998,-87.0581 38.2001,-87.0383 38.199,-87.0183 38.1973,-86.9983 38.1957,-86.9785 38.195,-86.9645 38.1959,-86.9379 38.1978,-86.9117 38.2001,-86.8989 38.2016,-86.8945 38.2057,-86.8901 38.2098,-86.8698 38.2122,-86.8555 38.2094,-86.8424 38.2041,-86.8256 38.1991,-86.8143 38.2035,-86.8021 38.205,-86.7897 38.2057,-86.7777 38.2074,-86.7657 38.2112,-86.754 38.2159,-86.7418 38.2206,-86.7285 38.2243,-86.7122 38.2277,-86.6949 38.2311,-86.6775 38.2341,-86.6612 38.2362,-86.6369 38.2373,-86.6118 38.237,-86.5864 38.2366,-86.5616 38.2372,-86.5242 38.2403,-86.4871 38.2439,-86.4498 38.2469,-86.4121 38.248,-86.4042 38.2444,-86.3963 38.2408,-86.3884 38.2371,-86.3805 38.2335,-86.3434 38.2449,-86.3105 38.2517,-86.2771 38.2511,-86.2387 38.2405,-86.2164 38.2468,-8
6.2019 38.2468,-86.1893 38.2441,-86.1725 38.2422,-86.1407 38.2427,-86.1001 38.2451,-86.0594 38.2491,-86.0277 38.2544,-86.0013 38.2613,-85.9749 38.2681,-85.9433 38.2767,-85.9255 38.2821,-85.9139 38.2864,-85.9001 38.2908,-85.8859 38.2947,-85.8729 38.2975,-85.8672 38.3017,-85.8615 38.3059,-85.8559 38.3101,-85.8502 38.3143)
+LINESTRING(-88.5806 39.0957,-88.5815 39.0831,-88.5836 39.0714,-88.5862 39.0598,-88.5889 39.0478,-88.5897 39.0313,-88.589 39.0158,-88.5918 39.0014,-88.6032 38.988,-88.6084 38.9848,-88.6139 38.9818,-88.6193 38.9787,-88.6241 38.975,-88.6616 38.9418,-88.7 38.9102,-88.7391 38.8793,-88.7787 38.8478,-88.7937 38.8347,-88.8082 38.8212,-88.8231 38.8078,-88.8394 38.7951,-88.8518 38.7875,-88.865 38.7808,-88.878 38.7738,-88.8898 38.7654,-88.8942 38.7607,-88.8981 38.7551,-88.9019 38.7493,-88.9059 38.7442,-88.9141 38.7286,-88.9156 38.7123,-88.9174 38.6962,-88.9268 38.6814,-88.9292 38.6787,-88.9316 38.676,-88.9311 38.596,-88.9203 38.4944,-88.9115 38.398,-88.9173 38.3338)
+LINESTRING(-90.1458 38.6284,-90.1278 38.6267,-90.1066 38.6243,-90.0848 38.6214,-90.0654 38.6183,-90.0524 38.6144,-90.0387 38.6084,-90.0262 38.6028,-90.0164 38.6,-89.9914 38.5986,-89.9673 38.5968,-89.9456 38.5911,-89.9274 38.5776,-89.9016 38.572,-89.8786 38.568,-89.8537 38.5631,-89.8219 38.5548,-89.8144 38.5526,-89.8104 38.5516,-89.8066 38.5508,-89.7902 38.5492,-89.7725 38.5482,-89.7551 38.5465,-89.7395 38.5428,-89.7331 38.5392,-89.7265 38.5338,-89.72 38.5282,-89.7136 38.5238,-89.6984 38.5178,-89.6868 38.5166,-89.6755 38.5167,-89.6612 38.5148,-89.6483 38.5102,-89.6364 38.5039,-89.6261 38.498,-89.6182 38.4945,-89.6045 38.4909,-89.5976 38.4893,-89.5906 38.4881,-89.5862 38.4819,-89.5792 38.4726,-89.572 38.4639,-89.567 38.4592,-89.5536 38.4518,-89.5397 38.4438,-89.5251 38.4368,-89.51 38.4324,-89.5004 38.4316,-89.4806 38.4315,-89.4713 38.4306,-89.463 38.4284,-89.4553 38.425,-89.448 38.4212,-89.4407 38.4175,-89.4123 38.4055,-89.3851 38.3976,-89.3565 38.3933,-89.3239 38.3924,-89.3184 38.3919,-89.3124 38.3906,-89.30
6 38.3894,-89.2998 38.3892,-89.2963 38.39,-89.2925 38.3913,-89.2887 38.3927,-89.2851 38.3937,-89.2547 38.3952,-89.2104 38.3937,-89.1639 38.391,-89.1266 38.3893,-89.0917 38.3694,-89.067 38.3639,-89.041 38.3636,-89.0018 38.3589,-88.9844 38.3539,-88.9598 38.3457,-88.9351 38.3378,-88.9173 38.3338)
+LINESTRING(-97.6418 38.8778,-97.6053 38.8835,-97.5786 38.8977,-97.5537 38.9141,-97.5232 38.9266,-97.5001 38.9298,-97.4743 38.9303,-97.4482 38.9297,-97.4244 38.9294,-97.4136 38.9323,-97.4009 38.9387,-97.3882 38.9462,-97.3779 38.9521,-97.353 38.9514,-97.3271 38.9506,-97.3013 38.9504,-97.2767 38.9516,-97.2542 38.9559,-97.2022 38.9706,-97.1808 38.9746,-97.1694 38.9744,-97.1531 38.9735,-97.1371 38.9729,-97.1264 38.9736,-97.0969 38.9836,-97.0684 38.9955,-97.0395 39.0073,-97.0088 39.0166,-96.9766 39.0171,-96.9355 39.0106,-96.8936 39.0032,-96.8588 39.0009,-96.8481 39.0031,-96.8375 39.0075,-96.8278 39.0131,-96.8199 39.0189,-96.8038 39.0241,-96.7791 39.0265,-96.7542 39.029,-96.7376 39.0345,-96.7279 39.041,-96.7115 39.0484,-96.6882 39.0541,-96.6575 39.0559,-96.1772 39.0412,-95.8742 39.0312,-95.7222 39.0265)
+LINESTRING(-97.6692 39.1186,-97.6647 39.1154,-97.6601 39.1122,-97.6555 39.109,-97.651 39.1058,-97.6506 39.0924,-97.6507 39.079,-97.6509 39.0657,-97.6504 39.0523,-97.6487 39.0435,-97.6455 39.0346,-97.6422 39.0257,-97.6402 39.0169,-97.639 39.0023,-97.6385 38.9875,-97.6382 38.9727,-97.6379 38.958,-97.6385 38.9384,-97.6407 38.9207,-97.6425 38.9016,-97.6418 38.8778)
+LINESTRING(-87.5497 38.1706,-87.528 38.1666,-87.4992 38.1692,-87.4696 38.1741,-87.4455 38.1769)
+LINESTRING(-87.9829 38.223,-87.9771 38.2191,-87.962 38.2074,-87.9465 38.1992,-87.92 38.1948,-87.8919 38.1945,-87.8638 38.1945,-87.8369 38.1909,-87.8213 38.1854,-87.8085 38.1798,-87.7941 38.1766,-87.774 38.1785,-87.7497 38.165,-87.7186 38.1626,-87.686 38.1656,-87.6573 38.1687,-87.6306 38.1698,-87.6035 38.1702,-87.5765 38.1703,-87.5497 38.1706)
+LINESTRING(-121.942 37.3151,-121.942 37.3061,-121.941 37.2971,-121.939 37.2881,-121.939 37.2788,-121.953 37.2631,-121.965 37.2458,-121.977 37.2281,-121.988 37.2112,-121.994 37.19,-121.99 37.1656,-121.982 37.1414,-121.973 37.1208,-121.974 37.1141,-121.976 37.1012,-121.977 37.0794,-121.993 37.0667,-122.007 37.0526,-122.018 37.0372,-122.027 37.0208,-122.022 37.0105,-122.018 37.0027,-122.017 36.9947,-122.018 36.9838,-121.981 36.9832,-121.949 36.9859,-121.917 36.9878,-121.881 36.9846,-121.857 36.9757,-121.839 36.9614,-121.825 36.9438,-121.808 36.9249,-121.795 36.9109,-121.784 36.8982,-121.776 36.8845,-121.769 36.8676,-121.768 36.8459,-121.777 36.8075,-121.775 36.7857,-121.771 36.7747,-121.76 36.7563,-121.755 36.7453,-121.752 36.7288,-121.753 36.715,-121.759 36.7014,-121.768 36.6858,-121.777 36.6657,-121.782 36.6472,-121.788 36.6286,-121.798 36.6084,-121.802 36.6034,-121.809 36.5991,-121.817 36.5955,-121.824 36.5927,-121.841 36.586,-121.856 36.5809,-121.871 36.5766,-121.889 36.5725)
+LINESTRING(-100.87 39.1927,-100.852 39.1724,-100.835 39.1521,-100.817 39.1318,-100.8 39.1115,-100.723 39.1109,-100.646 39.1115,-100.57 39.1114,-100.493 39.1086,-100.474 39.1061,-100.454 39.1019,-100.434 39.0979,-100.414 39.0958,-100.395 39.0956,-100.374 39.096,-100.354 39.0965,-100.334 39.097,-100.299 39.0858,-100.245 39.0607,-100.192 39.0354,-100.161 39.0237,-100.102 39.0241,-100.042 39.0255,-99.9818 39.0252,-99.9238 39.0203,-99.8999 39.0157,-99.8759 39.0095,-99.8518 39.003,-99.828 38.9974,-99.7897 38.9909,-99.751 38.9858,-99.7126 38.9807,-99.6749 38.9744,-99.6562 38.9693,-99.6378 38.9622,-99.6196 38.9546,-99.6017 38.9479,-99.5884 38.9468,-99.5671 38.9471,-99.5444 38.9476,-99.5271 38.9472,-99.4911 38.9395,-99.4558 38.9282,-99.4199 38.9196,-99.3818 38.9198,-99.3655 38.9135,-99.3487 38.9073,-99.3322 38.901,-99.3165 38.8944,-99.3049 38.889,-99.2917 38.8831,-99.2779 38.8783,-99.2649 38.8761,-99.2325 38.8766,-99.1989 38.8786,-99.1653 38.8798,-99.1331 38.8778,-99.1137 38.8736,-99.0962 38.8682,-99.0784 38.8635,-9
9.0579 38.8614,-99.0071 38.8617,-98.9563 38.863,-98.9054 38.8641,-98.8546 38.8639,-98.8335 38.8625)
+LINESTRING(-98.8335 38.8625,-98.8124 38.86,-98.7912 38.8574,-98.7701 38.856,-98.7338 38.8561,-98.6974 38.8574,-98.6611 38.8586,-98.6247 38.8585,-98.5898 38.8566,-98.5557 38.8538,-98.5214 38.8505,-98.487 38.8472,-98.4485 38.8453,-98.4085 38.8458,-98.3685 38.8471,-98.3299 38.848,-98.29 38.8478,-98.2501 38.8471,-98.2103 38.8463,-98.1704 38.8459,-98.1569 38.8481,-98.1345 38.8534,-98.112 38.8599,-98.0982 38.8656,-98.0926 38.8658,-98.087 38.866,-98.0814 38.8662,-98.0757 38.8664,-98.071 38.8691,-98.0662 38.8718,-98.0471 38.8734,-98.0285 38.8757,-98.0098 38.8778,-97.9906 38.8788,-97.9033 38.879,-97.8162 38.8787,-97.729 38.8783,-97.6418 38.8778)
+LINESTRING(-88.8938 38.2657,-88.8757 38.2678,-88.8653 38.2701,-88.8549 38.2724,-88.837 38.2747,-88.799 38.2774,-88.7579 38.2784,-88.7167 38.277,-88.6788 38.2724,-88.6746 38.2712,-88.6696 38.2692,-88.6646 38.2674,-88.6607 38.2664,-88.5668 38.2666,-88.4292 38.2698,-88.2974 38.2662,-88.2214 38.2463,-88.1686 38.2414,-88.1165 38.2385,-88.0642 38.2367,-88.0107 38.2349,-87.9929 38.2298,-87.9829 38.223)
+LINESTRING(-88.8938 38.2657,-88.9028 38.2806,-88.9116 38.2994,-88.9173 38.3183,-88.9173 38.3338)
+LINESTRING(-78.1183 36.715,-78.1289 36.6957,-78.1404 36.677,-78.1508 36.6579,-78.1585 36.6379,-78.1643 36.623,-78.1719 36.6094,-78.1805 36.5961,-78.189 36.5821,-78.2009 36.5608,-78.2104 36.5454)
+LINESTRING(-94.357 38.6127,-94.3586 38.6226,-94.3602 38.6325,-94.3614 38.6423,-94.3627 38.6521,-94.3717 38.6557,-94.3809 38.6587,-94.3901 38.6617,-94.399 38.6651,-94.408 38.6704,-94.4157 38.677,-94.4227 38.6841,-94.4298 38.6909,-94.4398 38.6991,-94.4508 38.7078,-94.4609 38.7169,-94.4685 38.7266,-94.4807 38.754,-94.4898 38.7794,-94.5027 38.8032,-94.5266 38.8254,-94.5318 38.8481,-94.5307 38.8764,-94.5285 38.9059,-94.5308 38.9323,-94.5341 38.9332,-94.5374 38.934,-94.5402 38.9369,-94.5438 38.9396,-94.5478 38.9418,-94.5518 38.9438,-94.5541 38.9539,-94.5593 38.9642,-94.5648 38.9748,-94.5678 38.9857,-94.5672 38.9983,-94.5643 39.0106,-94.561 39.0228,-94.5592 39.0352,-94.5616 39.0501,-94.5675 39.066,-94.5731 39.0819,-94.5747 39.0969)
+LINESTRING(-80.9177 36.948,-80.8673 36.9543,-80.8446 36.9692,-80.8342 36.9848,-80.8206 36.9932,-80.7629 37.0062,-80.7362 37.0262,-80.7187 37.0519,-80.6884 37.0821,-80.6731 37.0854,-80.6428 37.0895,-80.6099 37.0937,-80.5871 37.0971,-80.5407 37.102,-80.4812 37.1053,-80.4229 37.1116,-80.3805 37.1259,-80.3763 37.1315,-80.372 37.1371,-80.3677 37.1427,-80.3634 37.1483,-80.3396 37.1668,-80.314 37.1913,-80.293 37.2182,-80.2825 37.2441,-80.273 37.2506,-80.2628 37.2562,-80.2526 37.2617,-80.2429 37.2676,-80.199 37.2935,-80.1566 37.3125,-80.1121 37.3295,-80.0618 37.3498,-80.0382 37.3553,-80.0103 37.3573,-79.9831 37.3596)
+LINESTRING(-95.2674 38.5751,-95.2476 38.5834,-95.2376 38.5995,-95.2337 38.619,-95.2322 38.6372,-95.2224 38.6393,-95.2131 38.6421,-95.1799 38.6598,-95.1454 38.6764,-95.1099 38.6918,-95.0739 38.7059,-95.0624 38.709,-95.0518 38.7121,-95.0407 38.7193,-95.0301 38.7274,-95.0196 38.7354,-95.0085 38.7426,-94.9944 38.749,-94.9788 38.7545,-94.9629 38.7602,-94.9482 38.7672,-94.9123 38.789,-94.8747 38.8128,-94.838 38.8376,-94.8052 38.8624,-94.7992 38.8689,-94.795 38.876,-94.7913 38.8833,-94.7866 38.8904,-94.7645 38.9168,-94.7418 38.9428,-94.7184 38.9685,-94.6943 38.9937,-94.6913 39.0226,-94.6807 39.0341,-94.6631 39.0391,-94.6386 39.0483,-94.6301 39.0541,-94.6151 39.0651,-94.6075 39.0707)
+LINESTRING(-81.1308 37.2554,-81.1205 37.2444,-81.1143 37.2426,-81.1081 37.2405,-81.1021 37.238,-81.0965 37.2351,-81.0942 37.231,-81.0922 37.2267,-81.0907 37.2222,-81.0902 37.2177,-81.0986 37.2111,-81.1066 37.2041,-81.1222 37.19,-81.1306 37.1767,-81.1311 37.1627,-81.1289 37.1487,-81.1291 37.1355,-81.1325 37.1264,-81.1372 37.1163,-81.141 37.1062,-81.1416 37.0972,-81.1364 37.0844,-81.1285 37.0721,-81.1209 37.0595,-81.1168 37.0459,-81.1171 37.0412,-81.1181 37.0364,-81.1184 37.0317,-81.117 37.0273,-81.1016 37.009,-81.0856 36.995,-81.0713 36.9785,-81.0614 36.9536)
+LINESTRING(-87.5474 37.929,-87.5198 37.9266,-87.4917 37.931,-87.4655 37.9408,-87.4438 37.9544,-87.4391 37.9848,-87.4379 38.0164,-87.4377 38.0481,-87.4361 38.0791,-87.4405 38.0815,-87.4449 38.084,-87.4493 38.0864,-87.4538 38.0889,-87.4544 38.1044,-87.4517 38.1185,-87.4478 38.1321,-87.4446 38.1465,-87.4449 38.1539,-87.4466 38.1617,-87.4475 38.1695,-87.4455 38.1769)
+LINESTRING(-81.0614 36.9536,-81.0609 36.9523,-81.0606 36.9514,-81.0311 36.9399,-80.9923 36.94,-80.952 36.9449,-80.9177 36.948)
+LINESTRING(-84.4553 38.0789,-84.4644 38.0734,-84.4735 38.0678,-84.4803 38.0708,-84.4892 38.0738,-84.4984 38.0758,-84.5062 38.0757,-84.5158 38.0742,-84.5255 38.0727,-84.5337 38.0668,-84.5433 38.0621,-84.5531 38.0577,-84.562 38.0526,-84.565 38.0454,-84.5943 38.044,-84.6226 38.0431,-84.6507 38.0433,-84.6796 38.0453,-84.709 38.0264,-84.7493 38.0091,-84.7908 37.9943,-84.8239 37.9827,-84.8315 37.9859,-84.839 37.9892,-84.8624 37.9846,-84.8812 37.9708,-84.8984 37.9549,-84.9171 37.9438,-84.9325 37.9396,-84.9483 37.9362,-84.9642 37.9327,-84.9796 37.9286,-84.9985 37.9222,-85.0172 37.9149,-85.036 37.9078,-85.055 37.9017,-85.0851 37.8948,-85.1122 37.889,-85.1383 37.8803,-85.1654 37.8645,-85.227 37.8784,-85.2849 37.8733,-85.3397 37.8539,-85.3923 37.8245,-85.4095 37.8123,-85.4262 37.7993,-85.4437 37.7872,-85.4634 37.7774,-85.4943 37.7801,-85.5177 37.7767,-85.5402 37.7703,-85.5682 37.7638,-85.59 37.7611,-85.6107 37.7594,-85.6315 37.757,-85.6537 37.752,-85.6758 37.744,-85.6978 37.7345,-85.7196 37.7254,-85.7415 37.7183,-85.7
53 37.7163,-85.765 37.7152,-85.777 37.7143,-85.7886 37.7127,-85.8005 37.7101,-85.8124 37.7069,-85.8243 37.7037,-85.8362 37.7008)
+LINESTRING(-85.8362 37.7008,-85.8283 37.7124,-85.815 37.7215,-85.7997 37.7308,-85.7854 37.7424,-85.777 37.7515,-85.7735 37.7558,-85.7708 37.7601,-85.7648 37.768,-85.7589 37.777,-85.7521 37.7851,-85.7431 37.7901,-85.7356 37.8105,-85.71 37.8442,-85.6956 37.8786,-85.6893 37.9129,-85.6874 37.9464,-85.6887 37.9576,-85.6923 37.9701,-85.6967 37.9827,-85.7004 37.9939,-85.7011 37.9958,-85.7015 37.9976,-85.6967 38.0268,-85.6949 38.0648,-85.6972 38.1035,-85.7042 38.1349,-85.7146 38.1601,-85.7241 38.1782,-85.7365 38.1946,-85.7554 38.215,-85.7537 38.228,-85.7488 38.2444)
+LINESTRING(-90.3848 38.1582,-90.4167 38.1715,-90.4392 38.1843,-90.452 38.2127,-90.4587 38.2587,-90.4601 38.3054,-90.4573 38.336,-90.4539 38.345,-90.4488 38.3546,-90.4429 38.3641,-90.4369 38.3724,-90.4342 38.4016,-90.4158 38.4301,-90.39 38.4574,-90.3653 38.4831,-90.3556 38.4925,-90.344 38.5012,-90.3322 38.51,-90.3213 38.5192,-90.3134 38.5286,-90.3059 38.5393,-90.2982 38.5495,-90.2896 38.5575,-90.2662 38.5708,-90.2454 38.5811,-90.2277 38.5941,-90.1962 38.6256)
+LINESTRING(-79.4663 36.5399,-79.464 36.5452,-79.4336 36.5466,-79.4005 36.5542,-79.3697 36.5666,-79.3465 36.5818)
+LINESTRING(-87.575 37.8668,-87.5681 37.855,-87.5631 37.8404,-87.5605 37.8254,-87.5606 37.8122)
+LINESTRING(-96.2369 38.414,-96.228 38.417,-96.2191 38.4211,-96.2109 38.4261,-96.204 38.4315,-96.1822 38.4309,-96.1587 38.4308,-96.1353 38.431,-96.1119 38.4311,-96.0766 38.4288,-96.0413 38.4266,-96.006 38.4243,-95.9706 38.422,-95.9493 38.4234,-95.9292 38.4265,-95.9095 38.4301,-95.8894 38.4328,-95.8494 38.4329,-95.809 38.4289,-95.7689 38.4256,-95.7294 38.4276,-95.6968 38.434,-95.6644 38.4416,-95.6321 38.4492,-95.5995 38.4555,-95.5909 38.4559,-95.5815 38.4554,-95.5722 38.4549,-95.5637 38.4555,-95.5307 38.4654,-95.4968 38.4803,-95.4634 38.4965,-95.4321 38.5099,-95.4244 38.5121,-95.4163 38.5136,-95.4083 38.5151,-95.4006 38.5173,-95.3889 38.5236,-95.3789 38.5321,-95.3694 38.5409,-95.3592 38.5484,-95.3385 38.5568,-95.3144 38.5627,-95.2898 38.5681,-95.2674 38.5751)
+LINESTRING(-96.2369 38.414,-96.2321 38.4194,-96.2278 38.4251,-96.224 38.4311,-96.2209 38.4372,-96.2083 38.4468,-96.1856 38.4676,-96.1622 38.49,-96.1476 38.5048,-96.1412 38.5142,-96.136 38.5246,-96.1309 38.5353,-96.1246 38.5451,-96.1092 38.5621,-96.092 38.5783,-96.0742 38.5942,-96.0571 38.61,-96.048 38.6203,-96.0407 38.6308,-96.034 38.6416,-96.0268 38.6525,-96.0197 38.6596,-96.0107 38.6668,-96.0021 38.6743,-95.9963 38.6822,-95.9921 38.6919,-95.9883 38.6997,-95.9833 38.7071,-95.9756 38.7158,-95.9613 38.73,-95.9459 38.7449,-95.9312 38.7601,-95.9193 38.7754,-95.9139 38.7854,-95.909 38.7969,-95.9037 38.8081,-95.8977 38.8176,-95.8805 38.8346,-95.8609 38.8506,-95.8414 38.8666,-95.8249 38.8841,-95.8158 38.8876,-95.8046 38.8957,-95.7936 38.905,-95.7849 38.9118,-95.7788 38.92,-95.766 38.9288,-95.7525 38.9379,-95.7445 38.9471,-95.7343 38.9505,-95.7308 38.9567,-95.7246 38.9628,-95.717 38.9678,-95.7093 38.9708,-95.707 38.9758,-95.7035 38.981,-95.6992 38.9858,-95.6767 38.9943,-95.6568 39.0048,-95.638 39.017,-95.6236 39.0
269)
+LINESTRING(-80.9177 36.948,-80.9136 36.9325,-80.9011 36.9203,-80.8857 36.9094,-80.8729 36.8978,-80.8695 36.8879,-80.8706 36.877,-80.8715 36.8652,-80.8673 36.8525,-80.8442 36.8245,-80.8144 36.7973,-80.7828 36.7708,-80.7542 36.7446,-80.7383 36.7243,-80.728 36.7043,-80.7191 36.6842,-80.7076 36.6639,-80.7084 36.6598,-80.7092 36.6557)
+LINESTRING(-104.834 38.8279,-104.834 38.8256,-104.833 38.8233,-104.833 38.8211,-104.832 38.8188,-104.828 38.8159,-104.825 38.8147,-104.821 38.8146,-104.815 38.8151,-104.797 38.7923,-104.769 38.7628,-104.743 38.7353,-104.729 38.7186,-104.726 38.7121,-104.723 38.7056,-104.719 38.6991,-104.716 38.6926,-104.713 38.6874,-104.709 38.6831,-104.705 38.679,-104.701 38.6743,-104.688 38.6465,-104.667 38.5954,-104.645 38.541,-104.628 38.5032,-104.624 38.4952,-104.619 38.4872,-104.615 38.4783,-104.612 38.4712,-104.611 38.4446,-104.614 38.4162,-104.618 38.3877,-104.62 38.3607,-104.619 38.3474,-104.615 38.3336,-104.613 38.3199,-104.614 38.3075)
+LINESTRING(-97.6207 38.3759,-97.6209 38.457,-97.6212 38.5381,-97.6216 38.6193,-97.6227 38.7004,-97.6224 38.7241,-97.6216 38.7486,-97.6215 38.773,-97.6233 38.7965,-97.6268 38.8079,-97.6332 38.8206,-97.6404 38.8332,-97.6464 38.8443,-97.646 38.8499,-97.6445 38.8609,-97.6432 38.8693,-97.6418 38.8778)
+LINESTRING(-84.4288 38.052,-84.4195 38.0361,-84.4099 38.0205,-84.4012 38.0046,-84.3947 37.9878,-84.3913 37.9703,-84.3888 37.9511,-84.3847 37.9321,-84.3765 37.9155,-84.3615 37.898,-84.3465 37.8818,-84.3325 37.8638,-84.3205 37.8407,-84.3127 37.8076,-84.3155 37.7828,-84.322 37.7608,-84.3251 37.7364,-84.3221 37.7152,-84.3165 37.6936,-84.3109 37.672,-84.3078 37.6506,-84.3146 37.583,-84.3311 37.5195,-84.3437 37.455,-84.3382 37.3843,-84.3309 37.3795,-84.3211 37.3761,-84.3118 37.3716,-84.3061 37.3636,-84.2981 37.334,-84.288 37.307,-84.2707 37.2832,-84.2412 37.2632,-84.2284 37.2403,-84.2177 37.228,-84.2002 37.2197,-84.167 37.2089,-84.1531 37.2016,-84.1454 37.192,-84.1399 37.1809,-84.1324 37.1691,-84.1277 37.1645,-84.1224 37.1603,-84.1171 37.1558,-84.1126 37.1503)
+LINESTRING(-80.7092 36.6557,-80.7 36.6412,-80.6964 36.6161,-80.684 36.5933,-80.6626 36.5781,-80.6564 36.565,-80.653 36.5583)
+LINESTRING(-83.2412 37.2641,-83.243 37.2617,-83.2492 37.2578,-83.2586 37.2573,-83.2648 37.258,-83.271 37.2587,-83.2772 37.2594,-83.2963 37.252,-83.3121 37.2431,-83.3267 37.2332,-83.3425 37.2224,-83.3495 37.2201,-83.3604 37.2182,-83.3717 37.2167,-83.3802 37.2154,-83.3837 37.2118,-83.3871 37.2083,-83.3905 37.2047,-83.3939 37.2011,-83.4019 37.1976,-83.4137 37.1891,-83.4261 37.1796,-83.4358 37.1728,-83.4474 37.1724,-83.4642 37.1686,-83.4826 37.1645,-83.4996 37.163,-83.5143 37.1689,-83.533 37.1692,-83.5526 37.1669,-83.57 37.1651,-83.5873 37.1741,-83.5976 37.1795,-83.6089 37.1825,-83.629 37.1841,-83.6303 37.1783,-83.6317 37.1724,-83.6326 37.1665,-83.6336 37.1606,-83.6403 37.1596,-83.647 37.1586,-83.6505 37.1551,-83.6541 37.1516,-83.6576 37.1482,-83.6612 37.1447,-83.672 37.142,-83.6837 37.1409,-83.6956 37.1405,-83.7071 37.1398,-83.719 37.137,-83.7302 37.1328,-83.7416 37.1293,-83.7539 37.1289,-83.7663 37.1323,-83.7783 37.1371,-83.7909 37.141,-83.805 37.1414,-83.8259 37.1384,-83.8469 37.1351,-83.8676 37.1312,-83.887
9 37.1262,-83.9069 37.1192,-83.9216 37.1126,-83.9372 37.1089,-83.9587 37.1102,-83.9958 37.1189,-84.0472 37.1324,-84.0929 37.1448,-84.1126 37.1503)
+LINESTRING(-77.8773 35.9798,-77.8769 35.9865,-77.8766 35.9932,-77.8763 35.9999,-77.8759 36.0066,-77.8674 36.0174,-77.8543 36.0307,-77.8398 36.0465,-77.8271 36.0647,-77.8158 36.0885,-77.8065 36.1132,-77.7973 36.1378,-77.7861 36.1615,-77.7815 36.168,-77.7759 36.1745,-77.7707 36.1811,-77.7671 36.1879,-77.7661 36.1926,-77.7652 36.199,-77.7642 36.2052,-77.763 36.2092,-77.7551 36.221,-77.7458 36.233,-77.736 36.2447,-77.7268 36.2561,-77.723 36.2654,-77.719 36.2806,-77.7154 36.2964,-77.7127 36.3076,-77.7003 36.3328,-77.6817 36.3559,-77.6618 36.3786,-77.6458 36.4025,-77.6431 36.4093,-77.6412 36.4166,-77.6393 36.4239,-77.6369 36.4309,-77.6227 36.4583,-77.6056 36.4876,-77.5899 36.5173,-77.5802 36.5457)
+LINESTRING(-80.7425 36.559,-80.7417 36.5748,-80.7392 36.6009,-80.7351 36.6282,-80.7277 36.6345,-80.7196 36.6408,-80.7128 36.6478,-80.7092 36.6557)
+LINESTRING(-85.8362 37.7008,-85.8425 37.6952,-85.8487 37.6895,-85.8549 37.6838,-85.8611 37.6781,-85.897 37.6562,-85.9327 37.6364,-85.968 37.6174,-86.0025 37.5978,-86.0097 37.5921,-86.0163 37.5851,-86.0227 37.5782,-86.0296 37.5728,-86.0543 37.5619,-86.0829 37.5533,-86.1125 37.5457,-86.1402 37.5378,-86.1488 37.5273,-86.1627 37.513,-86.1777 37.4998,-86.1897 37.4922,-86.2326 37.4791,-86.2764 37.4677,-86.3205 37.4564,-86.3637 37.4435,-86.38 37.4359,-86.3955 37.4263,-86.4113 37.4172,-86.4283 37.4113,-86.4488 37.4089,-86.4746 37.4082,-86.5003 37.4096,-86.5204 37.4133,-86.5315 37.4105,-86.5415 37.4066,-86.551 37.4026,-86.5608 37.3993,-86.5795 37.3953,-86.605 37.3909,-86.6303 37.387,-86.6486 37.3849,-86.6802 37.3856,-86.713 37.3896,-86.7462 37.3937,-86.7791 37.3945,-86.7894 37.3908,-86.8004 37.3866)
+LINESTRING(-87.5606 37.8122,-87.5549 37.8123,-87.5496 37.8119,-87.5199 37.8048,-87.4859 37.7994,-87.4528 37.7934,-87.4254 37.7842,-87.4168 37.7788,-87.409 37.7733,-87.4002 37.7691,-87.3883 37.7676,-87.3618 37.7686,-87.3339 37.7687,-87.3065 37.765,-87.2813 37.7549,-87.2678 37.7554,-87.2468 37.7586,-87.2257 37.7627,-87.2117 37.7659,-87.2026 37.7644,-87.1866 37.7641,-87.1698 37.7645,-87.1581 37.7648,-87.1466 37.7421,-87.1263 37.7317,-87.1011 37.7322,-87.075 37.7424,-87.0664 37.7341,-87.0565 37.7266,-87.0468 37.7194,-87.0388 37.712,-87.034 37.7048,-87.0298 37.6965,-87.0257 37.688,-87.0211 37.6802,-86.9968 37.6458,-86.9722 37.6116,-86.9476 37.5773,-86.9233 37.5429,-86.918 37.5338,-86.9148 37.5253,-86.9127 37.5167,-86.9104 37.5073,-86.9046 37.4962,-86.894 37.4822,-86.8825 37.4686,-86.8736 37.4583,-86.8469 37.4384,-86.8306 37.4234,-86.8174 37.408,-86.8004 37.3866)
+LINESTRING(-88.9958 37.6051,-88.9909 37.6137,-88.9854 37.6222,-88.9804 37.6309,-88.977 37.6399,-88.972 37.6589,-88.9651 37.6842,-88.959 37.7085,-88.9566 37.7246,-88.9541 37.7396,-88.9478 37.7572,-88.9408 37.7745,-88.9359 37.7889,-88.9305 37.8036,-88.9198 37.8312,-88.9094 37.8592,-88.9046 37.8752,-88.904 37.8853,-88.9027 37.8954,-88.9014 37.9058,-88.9006 37.9166,-88.8997 37.9245,-88.8977 37.9312,-88.8952 37.9377,-88.8928 37.9447,-88.8916 37.9606,-88.892 37.9813,-88.8898 38.0013,-88.8811 38.0149,-88.8806 38.0285,-88.8813 38.0451,-88.8818 38.0606,-88.8807 38.0711,-88.8779 38.0761,-88.8743 38.0807,-88.8709 38.0854,-88.8688 38.091,-88.8661 38.0975,-88.8613 38.1134,-88.8583 38.1362,-88.8615 38.1631,-88.8678 38.1918,-88.8715 38.2159,-88.8734 38.233,-88.8745 38.2404,-88.8785 38.2463,-88.8836 38.2527,-88.889 38.2593,-88.8938 38.2657)
+LINESTRING(-81.0614 36.9536,-81.074 36.9626,-81.0835 36.9654,-81.0943 36.964,-81.1115 36.9607,-81.1782 36.95,-81.2419 36.9386,-81.3038 36.9249,-81.365 36.9076,-81.4007 36.8881,-81.4244 36.8635,-81.4453 36.8359,-81.4725 36.8076,-81.5043 36.7862,-81.5388 36.7733,-81.5768 36.7688,-81.6186 36.7725,-81.6333 36.7759,-81.6462 36.7798,-81.6591 36.7837,-81.6738 36.787,-81.7272 36.7909,-81.7743 36.7843,-81.8208 36.7708,-81.8718 36.7542,-81.8858 36.7457,-81.8997 36.7373,-81.9245 36.7221,-81.9477 36.7076,-81.9625 36.7012,-81.9798 36.6974,-81.9979 36.6941,-82.0148 36.6894,-82.0413 36.6769,-82.0669 36.6618,-82.0925 36.6464,-82.1193 36.6329,-82.1287 36.6292,-82.139 36.6273,-82.1487 36.6279,-82.1585 36.6285,-82.1682 36.6287,-82.178 36.6283)
+LINESTRING(-78.2104 36.5454,-78.2145 36.5387,-78.2297 36.5172,-78.2466 36.4979,-78.2656 36.4768,-78.2837 36.4547,-78.3026 36.433,-78.3242 36.4134,-78.3445 36.397,-78.364 36.38,-78.3833 36.3627,-78.4029 36.3455,-78.42 36.3369,-78.4494 36.3269,-78.48 36.321,-78.5004 36.3246,-78.509 36.3242,-78.5181 36.3228,-78.5272 36.3213,-78.5363 36.3198,-78.5451 36.3179,-78.5885 36.2891,-78.6483 36.2327,-78.7053 36.1716,-78.7407 36.1291,-78.7487 36.1163,-78.7565 36.1021,-78.7648 36.0883,-78.774 36.0768,-78.791 36.0607,-78.8169 36.0368,-78.8452 36.0115,-78.8695 35.9911,-78.8797 35.9959,-78.8921 35.9995,-78.9051 36.0027,-78.9171 36.0065,-78.9364 36.0054,-78.9562 36.0094,-78.976 36.0149,-78.9954 36.0181,-79.0072 36.0166,-79.0199 36.0169,-79.0347 36.0217,-79.05 36.0269,-79.0654 36.0317,-79.0805 36.0356,-79.1016 36.0396,-79.1224 36.0435,-79.1435 36.0494,-79.1657 36.0591)
+LINESTRING(-82.178 36.6283,-82.219 36.6151,-82.2571 36.5963)
+LINESTRING(-113.455 37.166,-113.389 37.2216,-113.326 37.284,-113.271 37.3506,-113.23 37.4187,-113.23 37.4268,-113.232 37.4341,-113.229 37.4582,-113.226 37.485,-113.221 37.511,-113.211 37.5327,-113.196 37.5548,-113.182 37.5785,-113.167 37.6018,-113.151 37.6226,-113.089 37.6433,-113.078 37.6762,-113.074 37.7169,-113.033 37.761,-113.013 37.7722,-112.991 37.7825,-112.969 37.7926,-112.948 37.8034,-112.939 37.8092,-112.93 37.8158,-112.922 37.8225,-112.913 37.8286,-112.894 37.8382,-112.872 37.8462,-112.85 37.8539,-112.83 37.8627,-112.805 37.8839,-112.777 37.9182,-112.751 37.9536,-112.733 37.978,-112.718 38.0026,-112.704 38.0284,-112.69 38.0544,-112.675 38.0794,-112.662 38.0966,-112.648 38.1137,-112.634 38.1309,-112.62 38.1482,-112.623 38.1572,-112.632 38.1701,-112.642 38.1831,-112.648 38.1924,-112.65 38.2017,-112.652 38.2122,-112.653 38.2229,-112.654 38.2327,-112.655 38.2677,-112.658 38.303,-112.664 38.338,-112.674 38.3718,-112.675 38.3781,-112.661 38.4056,-112.648 38.4263,-112.634 38.4463,-112.618 38.4718,-112.61
6 38.479,-112.62 38.4939,-112.62 38.5223,-112.618 38.5535,-112.615 38.5765)
+LINESTRING(-79.1657 36.0591,-79.1888 36.0628,-79.2115 36.0686,-79.2342 36.0737,-79.2573 36.0754,-79.274 36.0735,-79.2906 36.0702,-79.3074 36.0669,-79.3245 36.0649,-79.3404 36.0661,-79.3553 36.0688,-79.3701 36.0696,-79.3854 36.0648,-79.3866 36.0634,-79.3877 36.0621,-79.3927 36.0614,-79.3975 36.0611,-79.4023 36.0612,-79.4071 36.0613,-79.4249 36.0629,-79.4436 36.0657,-79.4619 36.0682,-79.4787 36.0693,-79.5101 36.0675,-79.5423 36.0635,-79.5746 36.0592,-79.6063 36.0562,-79.6446 36.0553,-79.6764 36.0558,-79.7094 36.0546,-79.7514 36.0489,-79.7572 36.048,-79.7629 36.0473,-79.7685 36.0464,-79.7742 36.0448)
+LINESTRING(-79.7742 36.0448,-79.7724 36.0579,-79.7716 36.0717,-79.7703 36.0853,-79.7672 36.0979,-79.7485 36.1298,-79.7131 36.1818,-79.6738 36.2342,-79.6434 36.2677,-79.6421 36.2784,-79.6408 36.2959,-79.6406 36.3131,-79.642 36.323,-79.6208 36.3611,-79.5944 36.3965,-79.5651 36.4309,-79.5355 36.466,-79.5298 36.4668,-79.5257 36.4698,-79.5217 36.4727,-79.5164 36.4726,-79.5102 36.4729,-79.5041 36.4739,-79.4994 36.4758,-79.4898 36.4928,-79.4805 36.5099,-79.4718 36.5274,-79.4663 36.5399)
+LINESTRING(-79.7742 36.0448,-79.7823 36.0396,-79.7915 36.0355,-79.8014 36.0327,-79.8118 36.0313)
+LINESTRING(-85.8362 37.7008,-85.8537 37.6553,-85.8694 37.6042,-85.8804 37.5527,-85.8835 37.5058,-85.8821 37.4778,-85.8805 37.4492,-85.8798 37.4206,-85.8806 37.3929,-85.8834 37.3791,-85.8885 37.3648,-85.894 37.3503,-85.8981 37.3362,-85.8994 37.3261,-85.9001 37.3155,-85.9009 37.305,-85.9027 37.2954,-85.907 37.2846,-85.913 37.2742,-85.9193 37.264,-85.9244 37.2536,-85.9286 37.2416,-85.9322 37.2294,-85.9359 37.2172,-85.9401 37.2052,-85.9415 37.2019,-85.9428 37.1985,-85.9441 37.1952,-85.9455 37.1919,-85.9552 37.1774,-85.9638 37.1648,-85.9709 37.1515,-85.9763 37.1351,-85.9969 37.1211,-86.021 37.1152,-86.0454 37.1063,-86.0665 37.0835,-86.0782 37.0777,-86.0898 37.072,-86.1014 37.0663,-86.1131 37.0606)
+LINESTRING(-80.234 36.0965,-80.2162 36.0977,-80.1997 36.1004,-80.1833 36.1039,-80.1663 36.1075,-80.1255 36.1115,-80.0844 36.1092,-80.0439 36.1022,-80.0046 36.0922,-79.9826 36.0852,-79.9609 36.0771,-79.9392 36.0687,-79.9175 36.0609,-79.8915 36.053,-79.8649 36.0458,-79.8382 36.0388,-79.8118 36.0313)
+LINESTRING(-80.653 36.5583,-80.6464 36.5456,-80.6364 36.5274,-80.6298 36.5178,-80.6279 36.4979,-80.6102 36.4849,-80.5873 36.4752,-80.5699 36.4651,-80.5544 36.4536,-80.5311 36.4346,-80.509 36.4157,-80.4968 36.4046,-80.4918 36.3956,-80.4885 36.3844,-80.4862 36.3744,-80.4846 36.3693,-80.4728 36.3544,-80.4618 36.3378,-80.4501 36.3221,-80.4363 36.3101,-80.4098 36.2933,-80.3871 36.2771,-80.3661 36.2594,-80.3446 36.2382,-80.3327 36.2284,-80.3187 36.2197,-80.3047 36.2109,-80.2925 36.2012,-80.2878 36.1951,-80.2837 36.188,-80.2795 36.1807,-80.2742 36.174,-80.267 36.1678,-80.2588 36.1615,-80.2509 36.1551,-80.245 36.1487,-80.2393 36.1352,-80.238 36.122,-80.2375 36.1091,-80.234 36.0965)
+LINESTRING(-77.8773 35.9798,-77.8951 35.9781,-77.9131 35.9766,-77.9311 35.9754,-77.9491 35.9743,-77.9555 35.978,-77.9619 35.9818,-77.968 35.9821,-77.9742 35.9825,-77.9803 35.9825,-77.9864 35.9822,-78.0152 35.9667,-78.0604 35.9491,-78.1083 35.9317,-78.1455 35.9167,-78.1632 35.9058,-78.1863 35.8897,-78.2084 35.8747,-78.2227 35.8675,-78.2347 35.8659,-78.2467 35.8643,-78.2586 35.8626,-78.2706 35.861,-78.2798 35.854,-78.2895 35.8472,-78.2994 35.8408,-78.3098 35.8348,-78.3427 35.8346,-78.3749 35.8292,-78.4051 35.8187,-78.4319 35.8033,-78.4643 35.804,-78.501 35.7981,-78.5376 35.7938,-78.5698 35.7996,-78.5777 35.7977,-78.5857 35.7957,-78.5972 35.7834,-78.6107 35.777,-78.6267 35.7745,-78.6456 35.7735)
+LINESTRING(-79.1657 36.0591,-79.1492 36.0485,-79.1304 36.0385,-79.1119 36.0283,-79.0963 36.0171,-79.0882 36.0089,-79.082 36.0018,-79.0742 35.9947,-79.0612 35.9865,-79.0535 35.9833,-79.0438 35.9802,-79.034 35.9773,-79.026 35.9743,-79.0123 35.9686,-78.9972 35.9629,-78.9821 35.9573,-78.9683 35.9518,-78.9418 35.941,-78.9145 35.9307,-78.887 35.9206,-78.8599 35.9105,-78.8286 35.8921,-78.7732 35.8423,-78.7409 35.8228,-78.7164 35.8123,-78.6934 35.8011,-78.6713 35.7884,-78.6456 35.7735)
+LINESTRING(-86.8004 37.3866,-86.8306 37.3749,-86.8604 37.3638,-86.8912 37.356,-86.9243 37.3543,-86.9523 37.3404,-86.9746 37.3319,-86.998 37.3257,-87.0295 37.3181,-87.0484 37.3105,-87.0686 37.2986,-87.0885 37.2855,-87.1061 37.2745,-87.1153 37.2745,-87.1244 37.2745,-87.1335 37.2745,-87.1426 37.2745,-87.1616 37.2645,-87.1816 37.2585,-87.2025 37.2543,-87.2242 37.2498,-87.2353 37.2464,-87.2459 37.2424,-87.2568 37.2388,-87.2689 37.2364,-87.3024 37.2364,-87.3396 37.2377,-87.3734 37.2324,-87.3967 37.2127,-87.4081 37.213,-87.4195 37.2133,-87.431 37.2136,-87.4424 37.2138)
+LINESTRING(-87.5606 37.8122,-87.5583 37.8,-87.5537 37.7868,-87.5458 37.7752,-87.5332 37.7678,-87.5249 37.7473,-87.5184 37.7254,-87.514 37.7031,-87.5122 37.682,-87.5129 37.6681,-87.5141 37.655,-87.5144 37.6417,-87.5119 37.6276,-87.5057 37.612,-87.4974 37.5963,-87.4893 37.5807,-87.4835 37.565,-87.4759 37.5223,-87.4716 37.4667,-87.4737 37.4114,-87.4852 37.3696,-87.4732 37.331,-87.4588 37.2917,-87.4469 37.2524,-87.4424 37.2138)
+LINESTRING(-96.8468 37.9042,-96.8266 37.9206,-96.8039 37.9316,-96.7805 37.9421,-96.7583 37.9568,-96.7419 37.9692,-96.7245 37.9801,-96.7074 37.9911,-96.6917 38.004,-96.6695 38.0233,-96.645 38.0413,-96.6196 38.0586,-96.5946 38.0759,-96.5842 38.0862,-96.5766 38.0977,-96.5691 38.1093,-96.559 38.1198,-96.5436 38.1292,-96.5259 38.1374,-96.5095 38.1447,-96.4979 38.151,-96.4856 38.1605,-96.4733 38.1705,-96.4613 38.1805,-96.4493 38.1906,-96.4431 38.1973,-96.4383 38.2049,-96.4338 38.2125,-96.4286 38.2197,-96.4168 38.2271,-96.4101 38.2304,-96.3877 38.2535,-96.3723 38.2731,-96.356 38.2924,-96.3363 38.311,-96.3242 38.3184,-96.3177 38.3219,-96.292 38.3433,-96.2706 38.3676,-96.251 38.3929,-96.2369 38.414)
+LINESTRING(-84.623 37.0988,-84.6353 37.0955,-84.6511 37.0962,-84.667 37.0989,-84.6801 37.1015,-84.6988 37.0978,-84.7256 37.0979,-84.7537 37.0989,-84.7765 37.098,-84.7855 37.0953,-84.7937 37.0915,-84.8029 37.0887,-84.8153 37.0887,-84.8263 37.0912,-84.8379 37.0948,-84.8497 37.0985,-84.8613 37.1012,-84.8666 37.0998,-84.9081 37.0863,-84.9487 37.0803,-84.99 37.0759,-85.0312 37.0685,-85.0596 37.0594,-85.083 37.0512,-85.1091 37.0465,-85.146 37.0475,-85.1804 37.0556,-85.214 37.0685,-85.2477 37.0808,-85.2826 37.0869,-85.2994 37.0847,-85.3155 37.0793,-85.3301 37.0737,-85.3426 37.0711,-85.3567 37.0709,-85.3709 37.0707,-85.385 37.0705,-85.3991 37.0702,-85.4119 37.0632,-85.4245 37.0555,-85.4371 37.0479,-85.4499 37.0413,-85.4604 37.0371,-85.4713 37.0334,-85.4821 37.0296,-85.4926 37.0249,-85.5072 37.0278,-85.5205 37.0272,-85.5333 37.0259,-85.5462 37.0268,-85.5904 37.0051,-85.621 36.996,-85.6566 36.9944,-85.7161 36.9951,-85.7562 36.9952,-85.7962 36.9952,-85.8363 36.9957,-85.8763 36.9972,-85.8916 36.9868,-85.9004 36.9816,-8
5.9107 36.9785,-85.9303 36.9743,-85.9494 36.9813,-85.9699 36.9882,-85.9883 36.9945,-86.0008 36.9999,-86.0169 37.0105,-86.0332 37.0225,-86.0494 37.0342,-86.0656 37.0436,-86.0775 37.0473,-86.0906 37.05,-86.1031 37.0537,-86.1131 37.0606)
+LINESTRING(-78.6456 35.7735,-78.6251 35.7559,-78.6119 35.7381,-78.6025 35.7188,-78.5932 35.6969)
+LINESTRING(-113.606 37.0015,-113.607 37.0104,-113.605 37.0216,-113.601 37.0288,-113.6 37.0375,-113.6 37.0465,-113.599 37.0551,-113.594 37.0649,-113.584 37.0769,-113.573 37.0886,-113.564 37.0978,-113.555 37.1015,-113.546 37.1062,-113.529 37.1252,-113.501 37.1449,-113.473 37.1602,-113.455 37.166)
+LINESTRING(-84.1126 37.1503,-84.1106 37.1436,-84.1075 37.1315,-84.1051 37.1202,-84.1022 37.109,-84.0974 37.0972,-84.0946 37.0916,-84.0966 37.0463,-84.1093 36.9901,-84.1283 36.934,-84.1496 36.8891,-84.1489 36.8674,-84.1547 36.8527,-84.1638 36.8393,-84.1733 36.8218,-84.1765 36.8064,-84.1753 36.7908,-84.1721 36.7751,-84.1692 36.7596,-84.1719 36.7556,-84.1745 36.7515,-84.1681 36.7259,-84.1562 36.7019,-84.1451 36.6777,-84.1413 36.6514,-84.1306 36.6413,-84.1231 36.6354,-84.1181 36.6322,-84.1123 36.6268,-84.1101 36.621,-84.1072 36.6105,-84.1028 36.5935)
+LINESTRING(-86.4313 36.9139,-86.4142 36.9359,-86.4025 36.9598,-86.3899 36.9837,-86.3702 37.0055,-86.3446 37.0089,-86.3181 37.0099,-86.2917 37.0114,-86.2666 37.0162,-86.2587 37.0203,-86.2499 37.0271,-86.2412 37.0345,-86.2334 37.0404,-86.2064 37.0433,-86.1692 37.0475,-86.134 37.0532,-86.1131 37.0606)
+LINESTRING(-86.8004 37.3866,-86.7956 37.379,-86.7905 37.3707,-86.7862 37.3623,-86.7836 37.3541,-86.7752 37.3487,-86.7661 37.3441,-86.757 37.3395,-86.7485 37.3341,-86.7139 37.2997,-86.7097 37.2768,-86.7179 37.2543,-86.7206 37.221,-86.6939 37.1929,-86.6645 37.1661,-86.6414 37.1362,-86.6333 37.099,-86.617 37.0847,-86.6005 37.0688,-86.5836 37.0533,-86.5661 37.0406,-86.5522 37.0335,-86.5377 37.027,-86.5231 37.0202,-86.5092 37.0121,-86.5039 36.9998,-86.5019 36.9851,-86.5019 36.9702,-86.5027 36.9573,-86.4836 36.9474,-86.465 36.9377,-86.4474 36.9269,-86.4313 36.9139)
+LINESTRING(-87.4424 37.2138,-87.4571 37.2147,-87.4721 37.2133,-87.4869 37.2106,-87.501 37.2078,-87.5212 37.2046,-87.5564 37.1996,-87.5914 37.1948,-87.6105 37.1924,-87.6337 37.1931,-87.6574 37.1959,-87.6837 37.1974,-87.7146 37.1938,-87.7356 37.1782,-87.7713 37.1603,-87.8087 37.1447,-87.8347 37.1362,-87.8447 37.1349,-87.8552 37.1344,-87.8656 37.1339,-87.8756 37.1327,-87.8876 37.1285,-87.8998 37.1225,-87.9121 37.1166,-87.9246 37.1126,-87.9487 37.1095,-87.9824 37.1065,-88.0163 37.1047,-88.0409 37.1051)
+LINESTRING(-114.049 36.8405,-114.006 36.8454,-113.975 36.8497,-113.939 36.8589,-113.877 36.8789,-113.866 36.8881,-113.86 36.8923,-113.846 36.8972,-113.836 36.896,-113.827 36.8949,-113.82 36.8948,-113.812 36.9002,-113.807 36.9078,-113.802 36.9158,-113.796 36.9223,-113.78 36.9296,-113.76 36.9344,-113.742 36.9402,-113.729 36.9501,-113.719 36.9501,-113.708 36.9492,-113.697 36.9482,-113.687 36.9479,-113.671 36.9505,-113.645 36.956,-113.62 36.9622,-113.607 36.9667,-113.604 36.9776,-113.606 36.994,-113.606 37.0015)
+LINESTRING(-78.2672 35.4891,-78.2367 35.503,-78.198 35.5181,-78.1617 35.533,-78.1388 35.5464,-78.1298 35.5595,-78.1186 35.5802,-78.108 35.601,-78.1008 35.6145,-78.078 35.6469,-78.054 35.679,-78.0317 35.7106,-78.0143 35.7417,-78.0042 35.7699,-77.996 35.7993,-77.9862 35.8283,-77.971 35.8549,-77.9462 35.8837,-77.9176 35.9153,-77.8923 35.9479,-77.8773 35.9798)
+LINESTRING(-78.2874 35.4802,-78.2831 35.4831,-78.2785 35.4856,-78.2732 35.4876,-78.2672 35.4891)
+LINESTRING(-88.6859 37.1288,-88.6828 37.1535,-88.6804 37.18,-88.6979 37.2143,-88.7295 37.2687,-88.7625 37.3225,-88.7845 37.3547,-88.8037 37.3717,-88.827 37.3862,-88.8496 37.4006,-88.8667 37.4173,-88.8787 37.4401,-88.8835 37.4592,-88.8866 37.4773,-88.8933 37.4968,-88.9107 37.5225,-88.938 37.5536,-88.9685 37.5834,-88.9958 37.6051)
+LINESTRING(-104.614 38.3075,-104.609 38.2928,-104.605 38.2759,-104.605 38.2597,-104.615 38.2468,-104.614 38.239,-104.615 38.2315,-104.617 38.2244,-104.621 38.2174,-104.625 38.2172,-104.628 38.217,-104.63 38.2073,-104.632 38.1974,-104.632 38.1875,-104.632 38.1777,-104.643 38.1642,-104.654 38.1441,-104.664 38.1232,-104.674 38.1079,-104.685 38.0942,-104.699 38.081,-104.712 38.0677,-104.724 38.054,-104.731 38.0438,-104.736 38.0323,-104.741 38.0208,-104.747 38.0103,-104.766 37.9855,-104.785 37.9625,-104.805 37.9403,-104.827 37.9181,-104.831 37.8793,-104.829 37.8395,-104.828 37.7995,-104.835 37.76,-104.825 37.7391,-104.814 37.7093,-104.804 37.6813,-104.794 37.6658,-104.792 37.6587,-104.786 37.6521,-104.779 37.6462,-104.771 37.6415,-104.77 37.6381,-104.768 37.6337,-104.766 37.6293,-104.763 37.626)
+LINESTRING(-97.3109 37.6793,-97.3127 37.7046,-97.3167 37.7324,-97.3214 37.7594,-97.326 37.7864,-97.3291 37.8185,-97.3292 37.8516,-97.328 37.8848,-97.3271 37.9167,-97.3255 37.9546,-97.3239 37.9926,-97.3221 38.0412,-97.3222 38.0656,-97.3614 38.0996,-97.4472 38.1709,-97.5345 38.2427,-97.5779 38.2781,-97.5889 38.287,-97.6 38.2959,-97.6108 38.3049,-97.6214 38.3142,-97.6212 38.3296,-97.6209 38.3451,-97.6208 38.3605,-97.6207 38.3759)
+LINESTRING(-121.846 37.3423,-121.829 37.3193,-121.814 37.3053,-121.803 37.2899,-121.791 37.2677,-121.78 37.2593,-121.768 37.2495,-121.757 37.2397,-121.745 37.2313,-121.71 37.2068,-121.678 37.1785,-121.649 37.1481,-121.624 37.1171,-121.618 37.1106,-121.611 37.1046,-121.605 37.0984,-121.6 37.0911,-121.579 37.0463,-121.567 37.024,-121.555 37.0021,-121.558 36.9875,-121.555 36.9728,-121.551 36.9579,-121.555 36.9427,-121.545 36.9215,-121.552 36.9055,-121.558 36.8896,-121.566 36.8742,-121.578 36.8598,-121.59 36.857,-121.601 36.8578,-121.613 36.8589,-121.625 36.8571,-121.633 36.8493,-121.631 36.8437,-121.628 36.8379,-121.626 36.832,-121.624 36.8263,-121.632 36.8162,-121.644 36.8092,-121.656 36.8033,-121.665 36.7965,-121.667 36.7795,-121.659 36.7556,-121.639 36.7283,-121.602 36.7009,-121.592 36.6911,-121.579 36.6832,-121.566 36.6758,-121.553 36.6676,-121.542 36.6578,-121.521 36.6382,-121.51 36.6285,-121.482 36.6019,-121.457 36.5739,-121.429 36.5482,-121.393 36.5285,-121.377 36.5052,-121.351 36.4845,-121.322 36.4663,
-121.294 36.4502,-121.282 36.4149,-121.265 36.3751,-121.247 36.3371,-121.233 36.3071,-121.212 36.2883,-121.196 36.2695,-121.188 36.2474,-121.19 36.2186,-121.184 36.2096,-121.178 36.2006,-121.171 36.1919,-121.164 36.184,-121.127 36.1779,-121.099 36.1727,-121.081 36.1684,-121.071 36.1512,-121.059 36.1357,-121.047 36.1207,-121.036 36.1045,-121.039 36.0951,-121.042 36.0859,-120.992 36.0444,-120.948 36.0048,-120.912 35.9615,-120.884 35.9086,-120.863 35.8984,-120.859 35.8892,-120.857 35.8799,-120.856 35.8706,-120.853 35.8613,-120.844 35.856,-120.835 35.8514,-120.827 35.8463,-120.82 35.8394,-120.812 35.8341,-120.804 35.8295,-120.793 35.8073,-120.78 35.7866,-120.759 35.7691,-120.727 35.7568,-120.725 35.7504,-120.725 35.7421,-120.726 35.7337,-120.727 35.7268,-120.727 35.7201,-120.726 35.7137,-120.723 35.7077,-120.719 35.702,-120.721 35.6876,-120.726 35.6734,-120.73 35.6593,-120.729 35.6452,-120.678 35.6435)
+LINESTRING(-88.6613 37.0593,-88.668 37.0649,-88.6751 37.0699,-88.686 37.093,-88.6866 37.1227,-88.6859 37.1288)
+LINESTRING(-77.0725 35.1133,-77.0863 35.128,-77.1019 35.1406,-77.1201 35.1499,-77.1418 35.1549,-77.1466 35.1534,-77.1515 35.1518,-77.1563 35.1502,-77.1612 35.1486,-77.2265 35.1654,-77.3215 35.19,-77.4095 35.2115,-77.4536 35.2189)
+LINESTRING(-80.3373 35.7951,-80.3006 35.7935,-80.2585 35.7889,-80.2176 35.7879,-80.1846 35.7971,-80.1727 35.8064,-80.1606 35.8177,-80.1479 35.8286,-80.134 35.8365,-80.1102 35.8439,-80.0863 35.8489,-80.0621 35.8532,-80.0372 35.8581,-80.0087 35.8708,-79.9691 35.8942,-79.9318 35.9187,-79.9103 35.9348,-79.9032 35.9443,-79.8943 35.96,-79.8866 35.9764,-79.8835 35.9878,-79.8669 35.9963,-79.8464 36.0082,-79.8265 36.0208,-79.8118 36.0313)
+LINESTRING(-80.234 36.0965,-80.2348 36.0762,-80.2395 36.0534,-80.245 36.0306,-80.2482 36.0104,-80.2518 35.9936,-80.2573 35.9768,-80.2601 35.9605,-80.2559 35.9451,-80.2503 35.9264,-80.2539 35.9089,-80.2615 35.8936,-80.2682 35.8817,-80.274 35.869,-80.2805 35.8553,-80.2875 35.8418,-80.2946 35.8302,-80.3039 35.8211,-80.3157 35.8134,-80.3276 35.8053,-80.3373 35.7951)
+LINESTRING(-89.1868 37.0976,-89.1795 37.1173,-89.1698 37.1371,-89.1608 37.1568,-89.1558 37.1764,-89.1528 37.2269,-89.1524 37.278,-89.1529 37.3292,-89.1526 37.3799,-89.1529 37.394,-89.1537 37.4087,-89.1537 37.4232,-89.1517 37.437,-89.1255 37.48,-89.0814 37.5166,-89.0345 37.5495,-89 37.5816,-88.9983 37.5863,-88.9972 37.593,-88.9965 37.5991,-88.9958 37.6051)
+LINESTRING(-97.3108 37.6086,-97.3081 37.6143,-97.3048 37.6198,-97.2941 37.6267,-97.2803 37.6391,-97.2639 37.6533,-97.2454 37.6655,-97.2313 37.6705,-97.2167 37.6731,-97.2021 37.6755,-97.1876 37.6798,-97.1601 37.6936,-97.1332 37.7091,-97.106 37.7241,-97.0777 37.7362,-97.0487 37.7448,-97.0186 37.753,-96.9893 37.7626,-96.9629 37.7751,-96.9421 37.7923,-96.9148 37.8195,-96.8895 37.8471,-96.8747 37.8651,-96.8672 37.8759,-96.8596 37.8868,-96.8517 37.8978,-96.8468 37.9042)
+LINESTRING(-97.3109 37.6793,-97.3108 37.6086)
+LINESTRING(-88.3368 36.9912,-88.317 37.0263,-88.2851 37.0513,-88.2433 37.0695,-88.195 37.0847,-88.17 37.0941,-88.1482 37.104,-88.1258 37.111,-88.0995 37.1118,-88.0409 37.1051)
+LINESTRING(-88.6613 37.0593,-88.5885 37.0197,-88.5096 37.0015,-88.4254 36.9951,-88.3368 36.9912)
+LINESTRING(-78.2874 35.4802,-78.2917 35.4768,-78.2958 35.4732,-78.3002 35.4695,-78.3049 35.4657,-78.3141 35.4604,-78.3234 35.4568,-78.3326 35.4531,-78.3411 35.4472,-78.3472 35.4388,-78.3507 35.43,-78.3546 35.4218,-78.3622 35.4147,-78.394 35.4006,-78.4247 35.3915,-78.454 35.3814,-78.4818 35.3644)
+LINESTRING(-78.4818 35.3644,-78.4896 35.3727,-78.497 35.3805,-78.5044 35.3884,-78.5119 35.3963,-78.5125 35.3988,-78.5132 35.4013,-78.5138 35.4038,-78.5145 35.4063,-78.5186 35.4205,-78.5231 35.435,-78.5271 35.4495,-78.5303 35.4637,-78.5306 35.4707,-78.53 35.4781,-78.5293 35.4854,-78.5298 35.4923,-78.5368 35.5108,-78.5475 35.528,-78.5581 35.5452,-78.5646 35.564,-78.5678 35.5991,-78.5697 35.6311,-78.5761 35.6628,-78.5932 35.6969)
+LINESTRING(-87.4424 37.2138,-87.4409 37.2084,-87.4396 37.2028,-87.4389 37.1972,-87.4389 37.1917,-87.4456 37.1834,-87.4515 37.1747,-87.4569 37.1658,-87.4623 37.1568,-87.4568 37.1256,-87.4604 37.1018,-87.4667 37.0802,-87.4694 37.0561,-87.4675 37.0467,-87.4637 37.0368,-87.4596 37.0268,-87.4569 37.0173,-87.4573 37.0067,-87.4605 36.9948,-87.4644 36.9827,-87.4672 36.9717,-87.4693 36.9463,-87.4707 36.9074,-87.4707 36.8703,-87.4686 36.8502,-87.4713 36.8472,-87.4739 36.8442,-87.4766 36.8412,-87.4792 36.8382)
+LINESTRING(-79.8269 35.6171,-79.8292 35.6192,-79.8314 35.6214,-79.8337 35.6235,-79.836 35.6257,-79.841 35.6522,-79.8384 35.6792,-79.8338 35.7064,-79.8329 35.7332,-79.8342 35.7704,-79.8319 35.8071,-79.8288 35.8439,-79.8275 35.8811,-79.8278 35.8958,-79.8282 35.9105,-79.8288 35.9253,-79.8294 35.94,-79.827 35.9615,-79.8207 35.9857,-79.8142 36.0098,-79.8118 36.0313)
+LINESTRING(-80.8435 35.8106,-80.8287 35.8132,-80.8178 35.8166,-80.8075 35.8211,-80.7943 35.8273,-80.78 35.8358,-80.7661 35.8461,-80.7518 35.856,-80.7362 35.8636,-80.7059 35.873,-80.675 35.8822,-80.6449 35.893,-80.6174 35.9069,-80.5928 35.922,-80.5683 35.9371,-80.5438 35.9524,-80.5201 35.9681,-80.5098 35.9761,-80.4999 35.9846,-80.4897 35.9927,-80.4782 35.9996,-80.4697 36.0032,-80.4615 36.0057,-80.4531 36.0078,-80.4442 36.0102,-80.4214 36.0185,-80.3964 36.03,-80.372 36.0426,-80.3511 36.0545,-80.3415 36.0615,-80.3323 36.0697,-80.3231 36.0777,-80.3131 36.0841,-80.2897 36.0924,-80.2706 36.0944,-80.253 36.0944,-80.234 36.0965)
+LINESTRING(-80.8435 35.8106,-80.8406 35.8274,-80.8407 35.8428,-80.842 35.8581,-80.8425 35.8747,-80.8427 35.885,-80.8434 35.8947,-80.8437 35.9043,-80.8427 35.9142,-80.8423 35.9195,-80.8427 35.9248,-80.8431 35.9302,-80.8429 35.9355,-80.8394 35.9588,-80.8358 35.9821,-80.8318 36.0052,-80.8266 36.0281,-80.8227 36.0491,-80.8189 36.0791,-80.8156 36.1096,-80.8135 36.1325,-80.8136 36.1513,-80.8149 36.1731,-80.8143 36.1938,-80.8091 36.2092,-80.8125 36.2268,-80.8181 36.2432,-80.8226 36.2601,-80.8225 36.2794,-80.8189 36.291,-80.813 36.3014,-80.806 36.3114,-80.7989 36.3218,-80.7941 36.3354,-80.794 36.3495,-80.7951 36.3637,-80.7944 36.3776,-80.7906 36.3891,-80.7851 36.4,-80.7797 36.4109,-80.776 36.4222,-80.7681 36.4479,-80.7575 36.4731,-80.7481 36.4974,-80.7438 36.5203,-80.7431 36.5485,-80.7425 36.559)
+LINESTRING(-89.1868 37.0976,-89.1884 37.0907,-89.1897 37.08,-89.1906 37.0691,-89.1909 37.0618,-89.1944 37.0586,-89.1979 37.0554,-89.1999 37.0465,-89.2019 37.0375,-89.2045 37.0273,-89.2064 37.0216,-89.2084 37.0195)
+LINESTRING(-86.4313 36.9139,-86.4425 36.8952,-86.4535 36.8744,-86.4628 36.853,-86.4688 36.8329,-86.4699 36.8238,-86.4703 36.8144,-86.4708 36.8051,-86.4724 36.7961,-86.486 36.7667,-86.5118 36.7238,-86.5416 36.683,-86.567 36.6597,-86.5688 36.6554,-86.571 36.6511,-86.5731 36.6467,-86.5746 36.6427)
+LINESTRING(-121.565 37.7428,-121.539 37.723,-121.488 37.6911,-121.434 37.6587,-121.399 37.6376,-121.353 37.6055,-121.285 37.5561,-121.22 37.5054,-121.181 37.4694,-121.136 37.3906,-121.108 37.3088,-121.085 37.231,-121.055 37.1642,-121.018 37.1139,-120.978 37.0655,-120.935 37.0187,-120.89 36.973,-120.868 36.9532,-120.846 36.9338,-120.825 36.9139,-120.805 36.8928,-120.757 36.8263,-120.706 36.7489,-120.654 36.6741,-120.604 36.6155,-120.572 36.5894,-120.536 36.5651,-120.5 36.5408,-120.467 36.5151,-120.447 36.4957,-120.429 36.4742,-120.411 36.4522,-120.393 36.4313,-120.362 36.3966,-120.33 36.362,-120.299 36.3274,-120.268 36.2925,-120.261 36.2828,-120.255 36.2721,-120.25 36.2611,-120.244 36.2509,-120.214 36.2046,-120.181 36.1591,-120.144 36.1157,-120.103 36.0757,-120.07 36.052,-120.028 36.026,-119.982 35.9967,-119.939 35.963,-119.908 35.9333,-119.877 35.9024,-119.846 35.8711,-119.817 35.84,-119.773 35.786,-119.733 35.7292,-119.694 35.6719,-119.651 35.6166)
+LINESTRING(-93.2406 37.2461,-93.2049 37.2492,-93.1758 37.256,-93.1478 37.2644,-93.1154 37.2721,-93.1001 37.274,-93.0848 37.2746,-93.0695 37.2753,-93.0541 37.2774,-93.0289 37.2945,-93.0082 37.2997,-92.9906 37.3005,-92.9745 37.3045,-92.9631 37.3113,-92.9476 37.3216,-92.9343 37.3308,-92.9209 37.3401,-92.8964 37.3734,-92.8725 37.4282,-92.8495 37.487,-92.8279 37.5326,-92.8006 37.563,-92.7741 37.5738,-92.7455 37.5818,-92.7121 37.6035,-92.6789 37.6358,-92.6472 37.6685,-92.6159 37.7015,-92.5838 37.7347,-92.5558 37.7549,-92.5294 37.7604,-92.5006 37.7597,-92.4657 37.7615,-92.4533 37.764,-92.4413 37.7674,-92.4292 37.7708,-92.4168 37.7732,-92.3928 37.7749,-92.3691 37.775,-92.3454 37.7755,-92.3213 37.7786,-92.309 37.7808,-92.2967 37.7829,-92.2844 37.7853,-92.2723 37.7884,-92.2524 37.7957,-92.2319 37.8043,-92.2114 37.8124,-92.1913 37.8182,-92.1805 37.82,-92.1709 37.824,-92.1548 37.8239,-92.1341 37.825,-92.1135 37.8274,-92.098 37.8311,-92.0477 37.8484,-92.0155 37.8631,-91.9984 37.8733,-91.983 37.8848,-91.9726 37.8925,-91.
9622 37.9001,-91.9518 37.9078,-91.9434 37.9128,-91.9349 37.9177,-91.9271 37.9217,-91.9196 37.9244,-91.9048 37.9301,-91.8895 37.9375,-91.8737 37.9437,-91.8575 37.9459,-91.8438 37.9505,-91.8176 37.9645,-91.7902 37.9815,-91.7727 37.9951,-91.7339 37.9964,-91.6964 38.0039,-91.6604 38.0155,-91.6263 38.0295,-91.6181 38.0338,-91.6103 38.0386,-91.6022 38.0431,-91.5928 38.0465,-91.5805 38.0479,-91.5682 38.0495,-91.5608 38.0522,-91.5465 38.0593,-91.5388 38.0619,-91.5237 38.0642,-91.508 38.065,-91.4925 38.066,-91.4779 38.0687,-91.445 38.0832,-91.4007 38.1073,-91.3563 38.1326,-91.3234 38.1502,-91.3133 38.1546,-91.3027 38.1585,-91.2921 38.1625,-91.2822 38.1671,-91.2572 38.1821,-91.2296 38.2016,-91.2029 38.2223,-91.1808 38.2408,-91.1719 38.2509,-91.1646 38.262,-91.1564 38.2724,-91.1449 38.2808,-91.1412 38.2901,-91.1392 38.2997,-91.1299 38.3088,-91.1262 38.3139,-91.123 38.3191,-91.1107 38.3223,-91.0982 38.3241,-91.0858 38.3257,-91.0736 38.328,-91.0616 38.3345,-91.05 38.3446,-91.0352 38.3542,-91.0137 38.3592,-90.9993 38.3719
,-90.9794 38.3849,-90.9622 38.3969,-90.9557 38.4068,-90.9478 38.4114,-90.9378 38.4153,-90.9292 38.4196,-90.9257 38.4258,-90.9142 38.4337,-90.8981 38.4406,-90.879 38.4517,-90.8588 38.4725,-90.8646 38.4642,-90.8446 38.486,-90.8194 38.5014,-90.7894 38.5097,-90.7552 38.5105,-90.7453 38.5086,-90.7353 38.5068,-90.7254 38.5049,-90.7154 38.503,-90.6969 38.5048,-90.6812 38.511,-90.6655 38.5172,-90.647 38.519,-90.6262 38.5143,-90.6091 38.5066,-90.5921 38.4989,-90.5713 38.4943,-90.5354 38.4983,-90.505 38.5113,-90.4747 38.5244,-90.4388 38.5283,-90.4314 38.5276,-90.424 38.5269,-90.4166 38.5263,-90.4092 38.5256,-90.4 38.5266,-90.3859 38.5354,-90.3775 38.5397,-90.3573 38.5489,-90.3413 38.5593,-90.3262 38.5707,-90.3089 38.5833,-90.2942 38.5919,-90.2795 38.5981,-90.2647 38.6025,-90.2495 38.6058,-90.2372 38.6095,-90.224 38.6152,-90.2103 38.6212,-90.1962 38.6256)
+LINESTRING(-87.4591 36.707,-87.5252 36.751,-87.5877 36.7948,-87.6496 36.8397,-87.7139 36.887,-87.7444 36.9088,-87.7951 36.9439,-87.8455 36.9763,-87.8749 36.99,-87.906 36.9954,-87.9337 37.0112,-87.9561 37.0297,-87.971 37.0431,-87.9923 37.059,-88.0124 37.0739,-88.0293 37.0888,-88.0409 37.1051)
+LINESTRING(-114.9 36.3922,-114.878 36.4033,-114.851 36.4166,-114.823 36.4327,-114.795 36.4527,-114.777 36.4673,-114.759 36.4816,-114.74 36.4958,-114.723 36.5105,-114.716 36.5195,-114.711 36.5309,-114.706 36.5421,-114.699 36.5503,-114.688 36.5567,-114.677 36.5628,-114.666 36.569,-114.656 36.576,-114.637 36.5934,-114.618 36.6146,-114.598 36.6352,-114.576 36.6508,-114.565 36.6545,-114.547 36.6597,-114.528 36.6643,-114.518 36.6661,-114.512 36.6742,-114.506 36.6823,-114.5 36.6903,-114.494 36.6977,-114.485 36.7022,-114.474 36.712,-114.463 36.7226,-114.454 36.7299,-114.416 36.7461,-114.355 36.7676,-114.294 36.786,-114.252 36.7928,-114.244 36.7877,-114.237 36.7856,-114.229 36.7854,-114.219 36.7858,-114.189 36.788,-114.173 36.7929,-114.159 36.8015,-114.133 36.8144,-114.119 36.8193,-114.107 36.8223,-114.094 36.8249,-114.081 36.8284,-114.075 36.8315,-114.068 36.8349,-114.062 36.8381,-114.054 36.84,-114.049 36.8405)
+LINESTRING(-82.3701 36.3542,-82.3614 36.3388,-82.3565 36.3278,-82.3537 36.3223,-82.3505 36.3172,-82.3428 36.3082,-82.3342 36.2993,-82.3262 36.2902,-82.3203 36.2804,-82.3202 36.2599,-82.3306 36.2365,-82.3437 36.213,-82.352 36.1924,-82.3657 36.1818,-82.3805 36.17,-82.396 36.1593,-82.4121 36.1516,-82.4146 36.1353,-82.4252 36.13,-82.4363 36.1253,-82.4459 36.1196,-82.4516 36.111,-82.4664 36.102,-82.4777 36.0932,-82.4881 36.0837,-82.5001 36.0725,-82.5051 36.072,-82.5102 36.0723,-82.5152 36.0725,-82.5201 36.0717,-82.5224 36.068,-82.5271 36.0622,-82.5358 36.0517,-82.5408 36.0496,-82.5442 36.0465,-82.547 36.0429,-82.5506 36.0394,-82.5512 36.0267,-82.559 36.017,-82.5552 36.0011,-82.5547 35.9864,-82.5562 35.9717,-82.5583 35.9561)
+LINESTRING(-82.5583 35.9561,-82.5583 35.9561)
+LINESTRING(-87.3366 36.6425,-87.3652 36.6647,-87.3918 36.6806,-87.4214 36.6936,-87.4591 36.707)
+LINESTRING(-82.2571 36.5963,-82.2622 36.5938,-82.3028 36.5684,-82.3361 36.5432,-82.3582 36.5405,-82.3821 36.5345,-82.4036 36.5251,-82.4189 36.5121,-82.4458 36.5025,-82.4881 36.4794,-82.5303 36.4538,-82.557 36.4363,-82.5659 36.429,-82.5739 36.4213,-82.5827 36.4139,-82.5938 36.4074,-82.6053 36.4039,-82.6189 36.4022,-82.6327 36.4022,-82.6449 36.4039,-82.6586 36.3946,-82.6708 36.3832,-82.6823 36.3711,-82.6937 36.3598,-82.7099 36.3576,-82.7268 36.3561,-82.7437 36.3556,-82.7602 36.3562,-82.8174 36.3278,-82.8728 36.2993,-82.9295 36.2725,-82.9902 36.2492,-83.015 36.2413,-83.0416 36.2333,-83.0683 36.2257,-83.0932 36.2193,-83.1309 36.2122,-83.1574 36.2089,-83.1825 36.2028,-83.2162 36.1868,-83.2281 36.1798,-83.2406 36.1723,-83.2534 36.1653,-83.2662 36.1598,-83.2806 36.153,-83.2951 36.1437,-83.3094 36.1338,-83.3234 36.1246,-83.3391 36.1128,-83.3542 36.0979,-83.3692 36.0826,-83.3846 36.0693)
+LINESTRING(-89.2084 37.0195,-89.2231 37.0037,-89.2589 36.9667,-89.2972 36.9284,-89.321 36.9068,-89.3823 36.9013,-89.4264 36.9007,-89.4728 36.8944,-89.5406 36.872)
+LINESTRING(-89.5406 36.872,-89.5454 36.9319,-89.5451 37.0274,-89.5427 37.1257,-89.5411 37.194,-89.5455 37.2065,-89.5555 37.2169,-89.5663 37.2272,-89.5729 37.2397,-89.5728 37.2477,-89.5714 37.2592,-89.5698 37.2697,-89.587 37.3122,-89.6074 37.3494,-89.6291 37.3861,-89.6509 37.4225,-89.6603 37.4413,-89.6684 37.4608,-89.677 37.4799,-89.688 37.4978,-89.7082 37.5223,-89.7298 37.5464,-89.7509 37.5708,-89.7697 37.5958,-89.8351 37.631,-89.8842 37.6891,-89.9247 37.7537,-89.9641 37.8086,-90.0019 37.8435,-90.0454 37.8755,-90.0915 37.9055,-90.1372 37.934,-90.1452 37.9387,-90.2151 37.9864,-90.2544 38.0265,-90.286 38.0708,-90.3328 38.1308,-90.3534 38.1445,-90.3848 38.1582)
+LINESTRING(-121.189 37.798,-121.185 37.784,-121.144 37.756,-121.103 37.7297,-121.064 37.7015,-121.028 37.6678,-121.027 37.6515,-121.016 37.6443,-121.006 37.6377,-120.999 37.63,-120.994 37.6192,-120.965 37.6036,-120.931 37.5768,-120.899 37.5471,-120.874 37.5232,-120.874 37.5102,-120.868 37.4963,-120.859 37.4839,-120.847 37.4754,-120.813 37.4568,-120.786 37.4344,-120.761 37.4104,-120.733 37.3869,-120.724 37.3866,-120.716 37.3889,-120.687 37.3778,-120.625 37.3554,-120.556 37.331,-120.509 37.3141,-120.504 37.3028,-120.494 37.299,-120.482 37.2948,-120.469 37.2921,-120.459 37.2928,-120.451 37.2882,-120.444 37.2834,-120.39 37.2427,-120.335 37.2012,-120.281 37.1586,-120.231 37.1148,-120.222 37.1039,-120.218 37.095,-120.216 37.0879,-120.213 37.0828,-120.185 37.0562,-120.154 37.0312,-120.121 37.007,-120.09 36.9823,-120.053 36.9489,-120.017 36.9142,-119.982 36.8797,-119.945 36.8469,-119.918 36.8282,-119.889 36.81,-119.86 36.791,-119.837 36.7702,-119.829 36.7591,-119.822 36.7479,-119.813 36.738,-119.799 36.7308,-119.74
3 36.6791,-119.7 36.642,-119.657 36.6048,-119.617 36.5665,-119.605 36.554,-119.593 36.5411,-119.581 36.5284,-119.568 36.5162,-119.555 36.5065,-119.541 36.4979,-119.527 36.4894,-119.515 36.4804,-119.487 36.4476,-119.464 36.4085,-119.441 36.3683,-119.417 36.3321,-119.412 36.3309,-119.408 36.3293,-119.398 36.3257,-119.383 36.2997,-119.365 36.2745,-119.347 36.2492,-119.331 36.2231,-119.326 36.2052,-119.327 36.1875,-119.33 36.17,-119.33 36.1528,-119.324 36.112,-119.315 36.0703,-119.305 36.0287,-119.295 35.9881,-119.283 35.9386,-119.271 35.8891,-119.259 35.8396,-119.249 35.7898,-119.263 35.7771,-119.247 35.7345,-119.235 35.6906,-119.226 35.6462,-119.219 35.6018)
+LINESTRING(-88.3368 36.9912,-88.3386 36.9852,-88.3414 36.9791,-88.3441 36.9732,-88.3457 36.9678,-88.3488 36.9469,-88.3519 36.926,-88.3546 36.9051,-88.3563 36.8841,-88.3775 36.8629,-88.4067 36.8488,-88.4379 36.8381,-88.4652 36.8271,-88.4739 36.8215,-88.4821 36.815,-88.4902 36.8085,-88.4987 36.8026,-88.5247 36.7929,-88.5627 36.7837,-88.6019 36.7764,-88.6314 36.772,-88.6345 36.7705,-88.6376 36.7687)
+LINESTRING(-93.2446 37.1218,-93.2449 37.1516,-93.2471 37.185,-93.247 37.2178,-93.2406 37.2461)
+LINESTRING(-114.9 36.3922,-114.933 36.3476,-114.974 36.3129,-115.021 36.2858,-115.071 36.2644,-115.091 36.2516,-115.118 36.229,-115.143 36.2051,-115.158 36.1887,-115.165 36.1739)
+LINESTRING(-115.165 36.1739,-115.172 36.1736,-115.195 36.1735,-115.217 36.1736,-115.24 36.1738,-115.24 36.1931,-115.241 36.2124,-115.241 36.2316,-115.241 36.2509)
+LINESTRING(-79.7798 35.4681,-79.7664 35.4265,-79.7444 35.3517,-79.7268 35.2775,-79.7265 35.2379)
+LINESTRING(-83.3846 36.0693,-83.4065 36.0554,-83.4305 36.0415,-83.4555 36.0291,-83.4802 36.0196,-83.4939 36.0171,-83.5081 36.0162,-83.5221 36.015,-83.5351 36.0112,-83.5598 35.999,-83.5783 35.9908,-83.5989 35.9863,-83.6297 35.985,-83.6326 35.9855,-83.6354 35.986,-83.6474 35.9901,-83.6603 35.9947,-83.6732 35.9988,-83.6855 36.0015,-83.6902 36.0017,-83.6948 36.0019,-83.6995 36.002,-83.7041 36.0022,-83.7206 36.0022,-83.7373 36.0017,-83.7539 36.0014,-83.7703 36.0022,-83.7919 36.0052,-83.8142 36.0087,-83.8366 36.0116,-83.8583 36.0126,-83.8717 36.0055,-83.8867 35.9987,-83.902 35.992,-83.9164 35.9849,-83.9168 35.9812,-83.9178 35.9766,-83.9196 35.9723,-83.9225 35.9696,-83.9259 35.9699,-83.9293 35.9702,-83.9447 35.9668)
+LINESTRING(-84.1028 36.5935,-84.1028 36.5934,-84.1081 36.5883,-84.1123 36.5824,-84.1162 36.5764,-84.1207 36.5708,-84.1473 36.545,-84.1784 36.5156,-84.2099 36.4875,-84.2378 36.4656,-84.2475 36.4587,-84.2579 36.4516,-84.2686 36.445,-84.2796 36.4397,-84.288 36.4365,-84.2947 36.4315,-84.2839 36.416,-84.2702 36.4047,-84.2555 36.3939,-84.2415 36.3799,-84.2341 36.3633,-84.2332 36.3464,-84.2337 36.3297,-84.2305 36.3135,-84.2253 36.3066,-84.22 36.2997,-84.2188 36.2949,-84.2184 36.2895,-84.218 36.284,-84.2171 36.2788,-84.2114 36.2748,-84.2048 36.2715,-84.1978 36.2686,-84.1911 36.2657,-84.1756 36.2481,-84.1454 36.2201,-84.1136 36.1921,-84.093 36.1748,-84.0786 36.1649,-84.0632 36.1559,-84.048 36.1467,-84.0341 36.1362,-84.0331 36.1226,-84.0278 36.1125,-84.0201 36.1036,-84.0119 36.0932,-84.014 36.0873,-84.0162 36.0815,-84.0116 36.0703,-84.0077 36.0487,-84.0064 36.0264,-84.0095 36.0129,-84.0057 36.0056,-83.9946 35.9997,-83.9842 35.9933,-83.9739 35.987,-83.9631 35.9813,-83.9544 35.975,-83.9464 35.9708,-83.9447 35.9668)
+LINESTRING(-93.2406 37.2461,-93.2493 37.2466,-93.258 37.2471,-93.2666 37.2473,-93.2753 37.2472,-93.336 37.2442,-93.356 37.2386,-93.3678 37.2279,-93.4038 37.2096,-93.4278 37.2019,-93.4538 37.1957,-93.4802 37.1902,-93.5052 37.1848,-93.5501 37.1798,-93.5956 37.1804,-93.6405 37.1779,-93.6833 37.1632,-93.7086 37.1486,-93.7512 37.1243,-93.7938 37.1008,-93.8194 37.0888,-93.8386 37.0853,-93.8527 37.0841,-93.8667 37.0815,-93.8855 37.074,-94.0024 37.0754,-94.119 37.0774,-94.2357 37.0797,-94.3524 37.0818,-94.3815 37.076,-94.4139 37.0623,-94.4476 37.0473,-94.4805 37.0376)
+LINESTRING(-83.0379 35.7866,-83.0359 35.7864,-83.0353 35.7863)
+LINESTRING(-83.3846 36.0693,-83.3608 36.0553,-83.3384 36.0431,-83.3233 36.0358,-83.3171 36.0316,-83.3123 36.0257,-83.3081 36.0163,-83.3061 36.0074,-83.3051 35.9982,-83.3034 35.988,-83.3015 35.9802,-83.2987 35.9729,-83.2939 35.9673,-83.286 35.9641,-83.2577 35.9595,-83.2185 35.9488,-83.1868 35.9307,-83.1645 35.9057,-83.1537 35.874,-83.1494 35.856,-83.1412 35.8408,-83.1285 35.8279,-83.1107 35.8166,-83.094 35.8072,-83.079 35.799,-83.0633 35.7922,-83.0443 35.7875,-83.0379 35.7866)
+LINESTRING(-83.0353 35.7863,-83.021 35.7853,-83.0126 35.7842,-82.9968 35.7783,-82.9922 35.7738)
+LINESTRING(-94.4805 37.0376,-94.4879 37.0377,-94.4953 37.0369,-94.5025 37.0357,-94.5098 37.0344,-94.5281 37.0275,-94.5416 37.0171,-94.5555 37.0067,-94.5751 36.9997,-94.5848 36.999,-94.5953 36.9993,-94.6059 36.9997,-94.616 36.9995,-94.6188 36.9975)
+LINESTRING(-97.3108 37.6086,-97.3131 37.605,-97.3158 37.6013,-97.319 37.5979,-97.3227 37.5951,-97.3268 37.5339,-97.3257 37.4707,-97.3214 37.4076,-97.3162 37.3466,-97.3184 37.3416,-97.324 37.3361,-97.3304 37.3308,-97.335 37.3264,-97.3372 37.3172,-97.3378 37.3019,-97.3376 37.2861,-97.3376 37.2756,-97.3385 37.248,-97.3389 37.2206,-97.3388 37.1932,-97.3387 37.1659,-97.3379 37.1286,-97.3369 37.0908)
+LINESTRING(-88.8909 36.5241,-88.8841 36.5235,-88.8762 36.5238,-88.8686 36.5251,-88.8624 36.5276,-88.8593 36.5304,-88.8495 36.5414,-88.8433 36.5524,-88.8383 36.564,-88.8325 36.5765,-88.8153 36.5987,-88.7932 36.6179,-88.7713 36.6368,-88.7546 36.6581,-88.752 36.6645,-88.7483 36.6746,-88.7445 36.6843,-88.7417 36.6897,-88.7293 36.7,-88.7155 36.7098,-88.7013 36.7194,-88.6876 36.7288,-88.6828 36.7294,-88.6779 36.73,-88.6731 36.7306,-88.6682 36.7311,-88.6636 36.7432,-88.6604 36.7529,-88.6534 36.7611,-88.6376 36.7687)
+LINESTRING(-119.219 35.6018,-119.213 35.5923,-119.198 35.5873,-119.193 35.5603,-119.184 35.5355,-119.169 35.5131,-119.148 35.4932,-119.129 35.4776,-119.107 35.4604,-119.084 35.4441,-119.061 35.4316,-119.058 35.4251,-119.055 35.4183,-119.053 35.4118,-119.048 35.4057,-119.046 35.3923,-119.043 35.3786,-119.041 35.365,-119.041 35.3508)
+LINESTRING(-104.763 37.626,-104.761 37.6214,-104.758 37.6159,-104.755 37.6108,-104.752 37.6073,-104.752 37.6046,-104.735 37.5844,-104.721 37.5614,-104.708 37.5384,-104.692 37.5183,-104.656 37.4784,-104.623 37.432,-104.594 37.3836,-104.567 37.3374,-104.563 37.3296,-104.559 37.3219,-104.555 37.3141,-104.55 37.3068,-104.539 37.2959,-104.523 37.2844,-104.509 37.2728,-104.501 37.2613,-104.498 37.2424,-104.498 37.2246,-104.5 37.2069,-104.502 37.188,-104.503 37.1842,-104.503 37.1804,-104.504 37.1764,-104.503 37.1729,-104.501 37.1693,-104.506 37.1608,-104.511 37.1523,-104.516 37.1441,-104.522 37.136,-104.523 37.1114,-104.521 37.0838,-104.515 37.0574,-104.503 37.0364,-104.5 37.0355,-104.497 37.0345,-104.494 37.0313,-104.493 37.0277,-104.486 37.027,-104.481 37.0241,-104.477 37.0216,-104.474 37.018,-104.472 37.0143,-104.475 36.9934)
+LINESTRING(-86.5746 36.6427,-86.5747 36.6424,-86.577 36.6348,-86.5795 36.6276,-86.5825 36.6206,-86.5865 36.6133,-86.5992 36.5952,-86.6139 36.578,-86.6285 36.5606,-86.6409 36.5421,-86.6498 36.5261,-86.6587 36.5101,-86.6678 36.4924,-86.673 36.4793,-86.6741 36.4761,-86.6753 36.4728,-86.6769 36.4689,-86.678 36.4666,-86.6826 36.4627,-86.6883 36.4593,-86.6941 36.4557,-86.6985 36.4515,-86.7054 36.4396,-86.7133 36.4231,-86.7204 36.4065,-86.7248 36.3942,-86.7393 36.3809,-86.7484 36.3701,-86.7539 36.3579,-86.7579 36.3407,-86.7596 36.3259,-86.7598 36.313,-86.76 36.3002,-86.7617 36.2853,-86.7652 36.276,-86.7719 36.2644,-86.7801 36.2541,-86.7875 36.249)
+LINESTRING(-86.7875 36.249,-86.7954 36.2627,-86.8035 36.2768,-86.8117 36.2918,-86.8182 36.3056,-86.8347 36.3112,-86.8517 36.3161,-86.8686 36.321,-86.8846 36.3265,-86.9006 36.3338,-86.9158 36.3423,-86.9306 36.3511,-86.9456 36.3591,-86.9961 36.3855,-87.0418 36.4129,-87.0861 36.4419,-87.1324 36.4727,-87.1511 36.4831,-87.1747 36.4947,-87.1971 36.5061,-87.2127 36.5164,-87.2201 36.5228,-87.2282 36.5297,-87.236 36.5366,-87.2423 36.5433,-87.2451 36.5506,-87.2462 36.5548,-87.2576 36.5724,-87.2689 36.5877,-87.2812 36.6026,-87.2939 36.6153,-87.3042 36.6227,-87.3154 36.6291,-87.3266 36.6354,-87.3366 36.6425,-87.3366 36.6425)
+LINESTRING(-115.165 36.1739,-115.149 36.1743,-115.136 36.1734,-115.122 36.171,-115.108 36.1686,-115.094 36.1673,-115.092 36.1658,-115.089 36.1635,-115.087 36.1608,-115.085 36.1585,-115.085 36.1518,-115.084 36.1451,-115.084 36.1384,-115.084 36.1317,-115.081 36.12,-115.076 36.1052,-115.07 36.0909,-115.065 36.081,-115.061 36.0764,-115.057 36.0727,-115.051 36.0695,-115.045 36.0665,-115.022 36.0507,-115 36.0328,-114.978 36.0149,-114.955 35.9992,-114.951 35.998,-114.946 35.9973,-114.941 35.9971,-114.937 35.997,-114.934 35.9952,-114.932 35.9933)
+LINESTRING(-83.9447 35.9668,-83.954 35.9648,-84.0127 35.9511,-84.0791 35.9352,-84.127 35.9231,-84.1537 35.914,-84.1911 35.8993,-84.2281 35.8835,-84.2539 35.871)
+LINESTRING(-80.3373 35.7951,-80.3754 35.7764,-80.4132 35.7633,-80.4434 35.7461,-80.461 35.7176,-80.4635 35.6964,-80.4629 35.6765,-80.4651 35.6587,-80.4758 35.6436,-80.4789 35.6399,-80.5042 35.6209,-80.5283 35.5995,-80.5493 35.5756,-80.5653 35.5491,-80.5703 35.5344,-80.5702 35.5248,-80.5684 35.5157,-80.5683 35.5024,-80.5723 35.4926,-80.5806 35.4766,-80.5945 35.4514,-80.6034 35.4478,-80.6124 35.4452,-80.6215 35.4428,-80.6305 35.4399,-80.644 35.4379,-80.664 35.428,-80.6841 35.4159,-80.698 35.4073,-80.7119 35.382,-80.7371 35.3437,-80.7638 35.3075,-80.7825 35.2883,-80.7975 35.2824,-80.8158 35.2775,-80.8348 35.2742,-80.8516 35.2733)
+LINESTRING(-80.8516 35.2733,-80.8545 35.2729)
+LINESTRING(-80.8435 35.8106,-80.8441 35.7891,-80.843 35.7698,-80.8401 35.7508,-80.8352 35.73,-80.8276 35.6984,-80.8238 35.6734,-80.8216 35.6484,-80.8191 35.6166,-80.8168 35.5942,-80.815 35.5708,-80.815 35.5474,-80.8184 35.5252,-80.821 35.5154,-80.8235 35.5055,-80.8261 35.4956,-80.8287 35.4857,-80.8316 35.4655,-80.8327 35.4413,-80.8338 35.4171,-80.8367 35.3968,-80.8414 35.3643,-80.8461 35.3319,-80.8507 35.2994,-80.8545 35.2729)
+LINESTRING(-97.3369 37.0908,-97.3371 37.0531,-97.3399 37.0159,-97.3422 36.9999)
+LINESTRING(-89.0027 36.4441,-88.9893 36.4501,-88.9652 36.4625,-88.9458 36.4729,-88.9264 36.4832,-88.9159 36.4928,-88.8976 36.51,-88.8909 36.5241)
+LINESTRING(-82.6087 35.5567,-82.5969 35.5563,-82.5856 35.5578,-82.5745 35.5597,-82.563 35.5604,-82.5507 35.5592,-82.5383 35.5572,-82.5259 35.556,-82.5137 35.5569,-82.4967 35.5625,-82.4799 35.5705,-82.4629 35.5788,-82.4456 35.5851,-82.41 35.5911,-82.3695 35.5959,-82.3313 35.6047,-82.3025 35.6225,-82.2901 35.6247,-82.2751 35.6268,-82.2608 35.6265,-82.2508 35.6215,-82.2418 35.6235,-82.2328 35.6255,-82.2165 35.6273,-82.2007 35.6266,-82.1851 35.6258,-82.169 35.6268,-82.1567 35.6312,-82.1438 35.6355,-82.1282 35.6364,-82.1126 35.6358,-82.097 35.6349,-82.0815 35.6352,-82.0719 35.6374,-82.063 35.6412,-82.0543 35.6448,-82.0451 35.6467,-82.0365 35.6438,-82.0244 35.6368,-82.0125 35.6293,-82.0045 35.625,-81.984 35.63,-81.969 35.639,-81.9571 35.6511,-81.946 35.6651,-81.9276 35.6687,-81.9094 35.6754,-81.8912 35.682,-81.8729 35.6853,-81.8327 35.6818,-81.8163 35.6746,-81.8016 35.6739,-81.7667 35.69,-81.729 35.6885,-81.6976 35.6907,-81.6668 35.6948,-81.6309 35.6987,-81.602 35.7005,-81.5707 35.7028,-81.5404 35.7073,-81.5144 3
5.7159,-81.4711 35.7008,-81.4415 35.6921,-81.4095 35.6893,-81.3587 35.6922,-81.3492 35.6929,-81.3387 35.6939,-81.3285 35.6957,-81.3198 35.6991,-81.3063 35.6972,-81.2934 35.6937,-81.2803 35.6903,-81.2658 35.6888,-81.2504 35.6906,-81.2376 35.6946,-81.2255 35.6991,-81.2118 35.7024,-81.1844 35.7079,-81.1572 35.7155,-81.1303 35.7239,-81.1033 35.7319,-81.0677 35.7442,-81.0248 35.7619,-80.9804 35.7806,-80.9403 35.7959,-80.9175 35.8011,-80.8917 35.8042,-80.866 35.8069,-80.8435 35.8106)
+LINESTRING(-82.5319 35.7994,-82.5332 35.7955,-82.5354 35.791,-82.5382 35.7867,-82.5416 35.7837,-82.5412 35.7576,-82.5563 35.7283,-82.5748 35.6992,-82.5849 35.6739,-82.5833 35.6591,-82.5785 35.6357,-82.5728 35.6119,-82.5681 35.5957,-82.5705 35.5938,-82.5728 35.592,-82.5752 35.5901,-82.5775 35.5882,-82.5792 35.588,-82.5809 35.5877,-82.5826 35.5874,-82.5843 35.5872,-82.5858 35.5809,-82.5884 35.5737,-82.592 35.5668,-82.5964 35.5615,-82.5996 35.5605,-82.6029 35.5596,-82.6059 35.5583,-82.6087 35.5567)
+LINESTRING(-86.7861 36.1639,-86.786 36.2301,-86.7875 36.2356,-86.7868 36.2396,-86.7862 36.2435,-86.7875 36.249)
+LINESTRING(-80.8516 35.2733,-80.8524 35.2582,-80.8551 35.2444,-80.8592 35.2317,-80.864 35.2201)
+LINESTRING(-86.7278 36.1476,-86.7552 36.1512,-86.7861 36.1639)
+LINESTRING(-84.2539 35.871,-84.2659 35.8693,-84.2791 35.8632,-84.2924 35.8566,-84.3044 35.853,-84.3163 35.8546,-84.3279 35.8594,-84.3394 35.8651,-84.3511 35.8696,-84.3608 35.8671,-84.3777 35.8599,-84.3952 35.8516,-84.4067 35.8458,-84.4312 35.8533,-84.4564 35.8618,-84.4817 35.87,-84.5064 35.8767,-84.5128 35.8823,-84.5193 35.8877,-84.5262 35.8929,-84.5332 35.8979,-84.5409 35.8987,-84.5486 35.8995,-84.5562 35.9003,-84.5639 35.901,-84.5819 35.9055,-84.5892 35.9102,-84.6016 35.9104,-84.6348 35.9014,-84.642 35.8999,-84.6493 35.899,-84.6565 35.898,-84.6633 35.8958,-84.6696 35.893,-84.6759 35.8901,-84.6822 35.8872,-84.6885 35.8843,-84.6957 35.8877,-84.7029 35.8911,-84.7101 35.8944,-84.7173 35.8978,-84.7466 35.8916,-84.762 35.8948,-84.7735 35.9005,-84.791 35.902,-84.7989 35.8988,-84.806 35.8934,-84.8142 35.8893,-84.8253 35.8898,-84.8402 35.8948,-84.8511 35.8982,-84.8624 35.9004,-84.8785 35.9012,-84.897 35.9136,-84.9118 35.9272,-84.9259 35.9411,-84.9425 35.954,-84.9546 35.9594,-84.9678 35.9623,-84.9813 35.9647,-84.99
4 35.9685,-85.0069 35.9743,-85.0222 35.9818,-85.0375 35.9899,-85.0503 35.9972,-85.0693 36.008,-85.0895 36.018,-85.1101 36.0275,-85.1301 36.0369,-85.1431 36.0382,-85.1558 36.0401,-85.1684 36.0424,-85.1813 36.0445,-85.2025 36.0582,-85.2236 36.0721,-85.2414 36.0874,-85.2529 36.1058,-85.2546 36.1082,-85.2562 36.1106,-85.2578 36.1131,-85.2595 36.1155,-85.2655 36.12,-85.27 36.1258,-85.2745 36.1319,-85.2808 36.1373,-85.2909 36.1389,-85.3013 36.1408,-85.3113 36.1413,-85.3205 36.1387,-85.3237 36.139,-85.327 36.1392,-85.3303 36.1394,-85.3335 36.1401,-85.3378 36.1388,-85.3421 36.1374,-85.3438 36.1351,-85.3468 36.1333,-85.3503 36.132,-85.3536 36.1311,-85.3564 36.1316,-85.3592 36.1321,-85.363 36.1347,-85.3674 36.1372,-85.3716 36.1397,-85.3745 36.1426,-85.3809 36.1439,-85.3873 36.1452,-85.3944 36.1463,-85.3996 36.1464,-85.4448 36.141,-85.4889 36.1392,-85.5333 36.14,-85.5791 36.1426,-85.6099 36.1428,-85.6328 36.1388,-85.6526 36.1309,-85.6743 36.1197,-85.6943 36.1135,-85.7134 36.1114,-85.7331 36.1122,-85.755 36.1148,-85.768
36.1165,-85.7793 36.1177,-85.7907 36.1189,-85.8037 36.1206,-85.8111 36.1216,-85.8186 36.1226,-85.826 36.1236,-85.8334 36.1247,-85.8486 36.1249,-85.862 36.1226,-85.8754 36.1203,-85.8906 36.1205,-85.9034 36.1253,-85.9129 36.1342,-85.9205 36.1453,-85.9275 36.1566,-85.9381 36.1671,-85.9515 36.1733,-85.9673 36.177,-85.9848 36.1795,-86.0002 36.1794,-86.0134 36.176,-86.0268 36.1718,-86.0422 36.1692,-86.0538 36.1699,-86.0639 36.1723,-86.0741 36.1749,-86.0858 36.1761,-86.0925 36.1753,-86.0981 36.1733,-86.1037 36.1711,-86.1104 36.1696,-86.1129 36.1697,-86.1154 36.1699,-86.1181 36.1702,-86.1207 36.1705,-86.1431 36.1761,-86.1622 36.1837,-86.1826 36.1906,-86.2087 36.1944,-86.2302 36.194,-86.2492 36.1913,-86.2676 36.1872,-86.2873 36.1824,-86.3112 36.1808,-86.3437 36.1821,-86.3781 36.184,-86.4076 36.1839,-86.4321 36.1821,-86.4586 36.1797,-86.4852 36.1765,-86.5095 36.1722,-86.517 36.1702,-86.5243 36.1679,-86.5318 36.1659,-86.5397 36.1648,-86.5568 36.1651,-86.5744 36.1665,-86.592 36.1671,-86.609 36.165,-86.6226 36.1611,-86.
6346 36.1565,-86.6467 36.1518,-86.6604 36.1472,-86.6847 36.1463,-86.7187 36.1464,-86.7278 36.1476)
+LINESTRING(-104.475 36.9934,-104.475 36.993,-104.476 36.9787,-104.472 36.9636,-104.459 36.9402,-104.452 36.9368,-104.447 36.9317,-104.441 36.9263,-104.435 36.9217,-104.426 36.9186,-104.418 36.917,-104.412 36.9127,-104.408 36.9014,-104.411 36.8969,-104.414 36.892,-104.416 36.887,-104.418 36.8821)
+LINESTRING(-82.6087 35.5567,-82.6595 35.559,-82.7085 35.5544,-82.7572 35.5476,-82.8073 35.5435,-82.8126 35.5462,-82.8179 35.5489,-82.8233 35.5516,-82.8286 35.5544,-82.8519 35.5521,-82.875 35.5485,-82.898 35.5442,-82.9208 35.5399)
+LINESTRING(-82.9922 35.7738,-82.986 35.7678,-82.9806 35.7545,-82.9809 35.7399,-82.9831 35.7317,-82.9889 35.7123,-82.9911 35.7041,-82.9897 35.6974,-82.9829 35.6945,-82.9735 35.6923,-82.9643 35.6876,-82.9579 35.6793,-82.9559 35.6704,-82.9569 35.6608,-82.9592 35.6505,-82.9616 35.6382,-82.9632 35.6324,-82.966 35.6264,-82.9699 35.6212,-82.9723 35.6154,-82.9723 35.6047,-82.9678 35.5956,-82.9602 35.5871,-82.9508 35.5786,-82.9417 35.5691,-82.9345 35.5601,-82.9269 35.5513,-82.9208 35.5399)
+LINESTRING(-104.418 36.8821,-104.415 36.8629,-104.412 36.8433,-104.41 36.8242,-104.41 36.8069)
+LINESTRING(-80.864 35.2201,-80.8671 35.2127,-80.8709 35.2059,-80.8744 35.1998,-80.8773 35.1942,-80.882 35.1833,-80.8865 35.1718,-80.8914 35.1607,-80.8969 35.1508,-80.9127 35.1259,-80.9272 35.1007,-80.9275 35.1003)
+LINESTRING(-80.8545 35.2729,-80.8706 35.2706,-80.8836 35.2652,-80.8957 35.2591,-80.9118 35.2544,-80.9353 35.2544,-80.9604 35.2594,-80.9876 35.2652,-81.0168 35.2676,-81.0285 35.2691,-81.0389 35.2711,-81.0486 35.2733,-81.0585 35.2754,-81.072 35.2757,-81.0861 35.2735,-81.1005 35.2709,-81.1145 35.2704,-81.1209 35.2707,-81.1271 35.2715,-81.134 35.2731,-81.142 35.2745,-81.1492 35.2758,-81.1564 35.277,-81.1889 35.2805,-81.2259 35.279,-81.2615 35.2721,-81.2902 35.2593,-81.2989 35.2512,-81.3064 35.2418,-81.3143 35.2326,-81.3245 35.2253,-81.3524 35.2115,-81.3801 35.1972,-81.4076 35.1827,-81.435 35.1681)
+LINESTRING(-82.3994 35.2855,-82.4207 35.3104,-82.442 35.3395,-82.4622 35.3673,-82.4805 35.3883,-82.4915 35.3958,-82.5044 35.402,-82.5165 35.4081,-82.5248 35.415,-82.537 35.4363,-82.5455 35.4571,-82.5547 35.4778,-82.5688 35.4985,-82.5798 35.5104,-82.5941 35.5266,-82.6058 35.5433,-82.6087 35.5567)
+LINESTRING(-119.041 35.3508,-119.037 35.3199,-119.026 35.2637,-119.016 35.2088,-119.01 35.1822,-118.996 35.1425,-118.981 35.1026,-118.967 35.0625,-118.956 35.0222)
+LINESTRING(-119.651 35.6166,-119.644 35.6072,-119.637 35.5974,-119.63 35.5876,-119.622 35.5785,-119.584 35.5406,-119.543 35.5038,-119.498 35.4689,-119.453 35.4365,-119.402 35.4024,-119.349 35.3674,-119.298 35.3311,-119.251 35.2928,-119.178 35.2246,-119.106 35.1558,-119.032 35.0878,-118.956 35.0222)
+LINESTRING(-115.393 35.6114,-115.384 35.6367,-115.376 35.6629,-115.368 35.6892,-115.362 35.715,-115.36 35.7252,-115.36 35.7356,-115.358 35.7459,-115.355 35.7557,-115.313 35.8106,-115.262 35.8565,-115.213 35.9003,-115.181 35.949,-115.18 35.9743,-115.179 36.0219,-115.179 36.0711,-115.18 36.1014,-115.178 36.1229,-115.174 36.1463,-115.167 36.169,-115.165 36.1739)
+LINESTRING(-82.1709 35.1946,-82.1807 35.2044,-82.187 35.2144,-82.1928 35.2257,-82.1991 35.2366,-82.2067 35.2452,-82.2334 35.2532,-82.2708 35.2519,-82.31 35.2489,-82.342 35.2517,-82.356 35.258,-82.3715 35.2673,-82.3865 35.2772,-82.3994 35.2855)
+LINESTRING(-78.4818 35.3644,-78.5052 35.3522,-78.5134 35.3423,-78.5177 35.331,-78.5286 35.3142,-78.5373 35.3056,-78.5472 35.2979,-78.5571 35.2902,-78.5661 35.2819,-78.5801 35.2645,-78.5929 35.2461,-78.6059 35.228,-78.6206 35.2112,-78.6566 35.1793,-78.6958 35.1473,-78.7337 35.1142,-78.7652 35.0792,-78.7744 35.0631,-78.7881 35.037,-78.8016 35.0114,-78.8103 34.997,-78.841 34.9748,-78.8783 34.9591,-78.9154 34.9437,-78.9455 34.9221,-78.9512 34.9135,-78.9562 34.9025,-78.9602 34.892,-78.9641 34.8816,-78.985 34.82,-78.9942 34.7712,-78.9995 34.7233,-79.0088 34.6646,-79.0223 34.6415,-79.0471 34.6254,-79.0767 34.6132,-79.1045 34.6018)
+LINESTRING(-89.5406 36.872,-89.54 36.8403,-89.5401 36.8086,-89.5402 36.777,-89.5399 36.7454,-89.5391 36.6891,-89.5431 36.6531,-89.5563 36.6189,-89.583 36.5677,-89.5896 36.5537,-89.5964 36.5378,-89.6032 36.5225,-89.6098 36.5103,-89.6314 36.4842,-89.6568 36.4592,-89.6809 36.4334,-89.6985 36.4048,-89.7048 36.3793,-89.7058 36.3527,-89.7054 36.326,-89.7076 36.2998,-89.7133 36.2807,-89.7191 36.2615,-89.7273 36.2355,-89.7321 36.2219,-89.7359 36.2169,-89.7408 36.212,-89.7458 36.2071,-89.75 36.2019)
+LINESTRING(-119.041 35.3508,-119.009 35.351,-118.977 35.3512,-118.946 35.3514,-118.914 35.3516,-118.892 35.3485,-118.858 35.3413,-118.824 35.3328,-118.802 35.326,-118.792 35.3196,-118.784 35.3116,-118.775 35.3036,-118.766 35.2972,-118.744 35.2882,-118.721 35.2807,-118.697 35.2744,-118.673 35.2693,-118.664 35.2674,-118.655 35.2656,-118.63 35.2602,-118.608 35.2534,-118.588 35.2427,-118.571 35.2259,-118.562 35.2226,-118.554 35.2171,-118.548 35.2166,-118.523 35.2,-118.501 35.1933,-118.481 35.1828,-118.462 35.155,-118.453 35.1457,-118.44 35.1406,-118.424 35.1371,-118.41 35.1328,-118.406 35.1275,-118.401 35.1223,-118.379 35.1165,-118.359 35.1126,-118.339 35.1099,-118.316 35.1078,-118.311 35.1032,-118.306 35.0986,-118.284 35.1031,-118.252 35.1116,-118.223 35.1189,-118.205 35.1198,-118.197 35.122,-118.183 35.1125,-118.174 35.0942,-118.169 35.0756)
+LINESTRING(-94.6188 36.9975,-94.6268 36.9918,-94.637 36.9827,-94.6482 36.9731,-94.6593 36.9635,-94.671 36.954,-94.683 36.9453,-94.7194 36.9312,-94.7693 36.918,-94.8166 36.9022,-94.8451 36.8802,-94.8613 36.8476,-94.8765 36.8144,-94.8913 36.781,-94.9065 36.748,-94.9101 36.7419,-94.9153 36.7355,-94.9216 36.7299,-94.9284 36.7261,-94.9551 36.7161,-94.9818 36.7061,-95.0084 36.6961,-95.0351 36.686,-95.0582 36.6771,-95.0817 36.6672,-95.1042 36.656,-95.1246 36.6436,-95.131 36.6387,-95.1371 36.6338,-95.1508 36.6249,-95.1628 36.6209,-95.1742 36.6166,-95.1881 36.6055,-95.2001 36.5914,-95.2103 36.5762,-95.2188 36.5617)
+LINESTRING(-118.169 35.0756,-118.168 35.0737,-118.168 35.0591,-118.163 35.0461)
+LINESTRING(-89.331 36.0905,-89.3094 36.1063,-89.2884 36.1212,-89.2686 36.1372,-89.2507 36.1562,-89.231 36.195,-89.2231 36.2354,-89.2183 36.2721,-89.2078 36.2999,-89.1971 36.3102,-89.1811 36.3225,-89.1643 36.3341,-89.1513 36.3427)
+LINESTRING(-78.4818 35.3644,-78.4632 35.3446,-78.4443 35.3245,-78.4253 35.3043,-78.4064 35.2842,-78.3985 35.2717,-78.3901 35.254,-78.3819 35.2373,-78.3744 35.2275,-78.3635 35.2221,-78.3519 35.2182,-78.34 35.2148,-78.3286 35.2109,-78.3025 35.199,-78.2778 35.1852,-78.2546 35.1697,-78.2331 35.1528,-78.1848 35.1032,-78.145 35.0491,-78.1086 34.9931,-78.0673 34.9351,-78.0599 34.9284,-78.0417 34.9002,-78.0224 34.8709,-78.0042 34.8412,-77.9895 34.8119,-77.9768 34.7726,-77.9671 34.7326,-77.9541 34.6934,-77.9315 34.6569,-77.9324 34.6505,-77.9333 34.6442,-77.9341 34.6378,-77.935 34.6315,-77.9272 34.6193,-77.9202 34.6046,-77.9144 34.5894,-77.9102 34.5761,-77.8899 34.4975,-77.8798 34.4399,-77.8767 34.3808,-77.8776 34.3058,-77.8777 34.2983,-77.8851 34.2887,-77.8889 34.2802,-77.892 34.2696,-77.8998 34.2559,-77.8758 34.2441)
+LINESTRING(-89.75 36.2019,-89.7209 36.1777,-89.6907 36.1549,-89.6594 36.133,-89.6336 36.1159)
+LINESTRING(-89.6336 36.1159,-89.6273 36.1117,-89.6215 36.1081,-89.6157 36.1044,-89.6101 36.1006,-89.6048 36.0961,-89.5616 36.0888,-89.5005 36.0782,-89.4404 36.0699,-89.4002 36.0695,-89.3829 36.0739,-89.3654 36.0793,-89.348 36.085,-89.331 36.0905)
+LINESTRING(-79.1045 34.6018,-79.1209 34.5886,-79.1337 34.583,-79.1481 34.5795,-79.169 34.5727,-79.1825 34.5659,-79.1959 34.5572,-79.2093 34.5483,-79.2229 34.5408,-79.2354 34.5368,-79.2495 34.5339,-79.2637 34.5309,-79.2766 34.5267,-79.2911 34.5193,-79.3063 34.5103,-79.3121 34.5068)
+LINESTRING(-81.435 35.1681,-81.435 35.1681,-81.4463 35.1636,-81.4573 35.1584,-81.4685 35.1602,-81.4935 35.1502,-81.5328 35.1345,-81.5704 35.1187,-81.5902 35.1083,-81.6042 35.1079,-81.6163 35.1052,-81.6282 35.1024,-81.6418 35.1017,-81.6501 35.0976,-81.6594 35.0954,-81.6692 35.0941,-81.6788 35.0928,-81.6898 35.0895,-81.7009 35.0844,-81.7123 35.079,-81.724 35.0749,-81.7363 35.0743,-81.7482 35.0734,-81.7596 35.0714,-81.7702 35.0678,-81.799 35.0544,-81.8215 35.0451,-81.8449 35.0372,-81.8764 35.028,-81.9094 35.0162,-81.9418 35.0013,-81.9735 34.9853,-82.0048 34.9702)
+LINESTRING(-82.0048 34.9702,-82.0193 34.9905,-82.0361 35.0213,-82.0507 35.0531,-82.0584 35.0764,-82.0738 35.0898,-82.0897 35.1134,-82.1053 35.1388,-82.1197 35.1576,-82.1348 35.1693,-82.1512 35.1797,-82.167 35.1908,-82.1709 35.1946)
+LINESTRING(-89.75 36.2019,-89.7521 36.198,-89.7542 36.1942,-89.7512 36.1781,-89.7498 36.1612,-89.7496 36.1443,-89.7504 36.1279,-89.7827 36.1036,-89.8241 36.0689,-89.8596 36.032,-89.8744 36.0014)
+LINESTRING(-97.3172 36.3949,-97.2535 36.3972,-97.1893 36.3956,-97.1252 36.3919,-97.0618 36.3884)
+LINESTRING(-97.3422 36.9999,-97.3432 36.9935,-97.3469 36.971,-97.3496 36.9483,-97.3502 36.9256,-97.3481 36.9114,-97.3442 36.8971,-97.3406 36.8831,-97.3393 36.8696,-97.3417 36.8152,-97.3442 36.7608,-97.3461 36.7064,-97.348 36.6519,-97.3494 36.631,-97.3515 36.608,-97.3524 36.5852,-97.3507 36.5646,-97.345 36.5436,-97.3371 36.5222,-97.3284 36.5008,-97.3205 36.4803,-97.3165 36.4602,-97.316 36.4378,-97.3169 36.4154,-97.3172 36.3949)
+LINESTRING(-116.986 34.9135,-116.978 34.9207,-116.905 34.9228,-116.839 34.9283,-116.773 34.9412,-116.707 34.9597,-116.676 34.9712,-116.646 34.9852,-116.615 34.9997,-116.585 35.0129,-116.558 35.0228,-116.53 35.032,-116.502 35.0413,-116.476 35.0517,-116.466 35.0571,-116.456 35.064,-116.446 35.0711,-116.437 35.0774,-116.406 35.0945,-116.387 35.1013,-116.365 35.1039,-116.33 35.1079,-116.318 35.1111,-116.308 35.1151,-116.297 35.1181,-116.281 35.1183,-116.246 35.1327,-116.212 35.148,-116.181 35.1663,-116.156 35.1898,-116.131 35.1977,-116.121 35.201,-116.114 35.2088,-116.098 35.2352,-116.091 35.2448,-116.088 35.251,-116.045 35.2805,-116.001 35.312,-115.956 35.3423,-115.91 35.3683,-115.845 35.3921,-115.736 35.4273,-115.633 35.4591,-115.586 35.473,-115.557 35.4719,-115.528 35.4689,-115.499 35.4648,-115.47 35.4604,-115.451 35.468,-115.433 35.5007,-115.418 35.5381,-115.405 35.5763,-115.393 35.6114,-115.393 35.6114)
+LINESTRING(-84.2539 35.871,-84.2604 35.8634,-84.2648 35.857,-84.2682 35.8506,-84.2721 35.8427,-84.2842 35.8313,-84.3021 35.8235,-84.3204 35.8158,-84.3336 35.8046,-84.3412 35.8014,-84.3488 35.7983,-84.3566 35.7955,-84.3645 35.7928,-84.3851 35.7666,-84.408 35.7431,-84.4318 35.7204,-84.4549 35.6964,-84.4955 35.6507,-84.5346 35.6074,-84.5743 35.5644,-84.6168 35.5198,-84.6592 35.4775,-84.7004 35.4363,-84.7383 35.393,-84.7705 35.345,-84.7808 35.3421,-84.791 35.3401,-84.8007 35.3372,-84.8096 35.3313,-84.8141 35.3247,-84.8183 35.3153,-84.8223 35.3054,-84.8259 35.2974,-84.8387 35.2725,-84.8529 35.2442,-84.8689 35.217,-84.8871 35.1951)
+LINESTRING(-97.0618 36.3884,-97.0282 36.3749,-97.0118 36.3577,-97.0012 36.3371,-96.9849 36.3136,-96.9697 36.2978,-96.9533 36.2821,-96.9363 36.2668,-96.9192 36.2521)
+LINESTRING(-117.008 34.8862,-117 34.8935,-116.993 34.9037,-116.986 34.9135)
+LINESTRING(-88.8569 35.662,-88.8288 35.6688,-88.8018 35.6732,-88.7745 35.6764,-88.7454 35.6796,-88.7113 35.6897,-88.6572 35.7097,-88.6033 35.7307,-88.5697 35.744,-88.5476 35.7503,-88.5218 35.7551,-88.4955 35.7596,-88.4718 35.7646,-88.4343 35.7753,-88.3971 35.7863,-88.3597 35.7966,-88.3216 35.8053,-88.3065 35.8082,-88.2919 35.8112,-88.2776 35.8149,-88.2631 35.8201,-88.2063 35.8153,-88.1569 35.8195,-88.1104 35.8332,-88.0626 35.8569,-88.0393 35.8668,-88.0151 35.871,-87.9896 35.8714,-87.9625 35.8695,-87.9548 35.8688,-87.9471 35.8681,-87.9394 35.8675,-87.9318 35.8668,-87.8961 35.8664,-87.8773 35.8713,-87.8639 35.8779,-87.8441 35.8827,-87.8103 35.8822,-87.7731 35.8774,-87.7361 35.8726,-87.7025 35.8721,-87.6904 35.8827,-87.6711 35.8894,-87.6506 35.8943,-87.6344 35.8998,-87.615 35.9113,-87.5958 35.9238,-87.5769 35.9366,-87.5582 35.949,-87.5531 35.9566,-87.5493 35.9621,-87.5393 35.9693,-87.5303 35.9714,-87.521 35.973,-87.5127 35.975,-87.4956 35.9832,-87.4783 35.9928,-87.4599 35.9986,-87.4397 35.9958,-87.409 36.0082,
-87.3658 36.0182,-87.3206 36.0246,-87.2839 36.0262,-87.2742 36.0249,-87.2645 36.0226,-87.2549 36.0204,-87.2451 36.0193,-87.231 36.0213,-87.2179 36.0252,-87.2043 36.027,-87.1888 36.0231,-87.1554 36.0409,-87.1343 36.0609,-87.1104 36.0784,-87.0686 36.0886,-87.0359 36.0798,-87.0177 36.0759,-87.0006 36.0738,-86.9711 36.0705,-86.962 36.0741,-86.9347 36.089,-86.913 36.1051,-86.8916 36.1215,-86.8698 36.1367,-86.8569 36.1391,-86.8444 36.1428,-86.832 36.1467,-86.8193 36.1498,-86.8029 36.1585,-86.7916 36.1623,-86.7861 36.1639)
+LINESTRING(-95.9755 36.1612,-95.9528 36.163,-95.9299 36.1638,-95.9071 36.164,-95.8842 36.1643,-95.856 36.1644,-95.8169 36.1644,-95.7808 36.1649,-95.7621 36.1665,-95.7463 36.1752,-95.732 36.1862,-95.7185 36.1982,-95.7054 36.2098,-95.6532 36.2542,-95.5989 36.2953,-95.5384 36.3289,-95.4672 36.3505,-95.4396 36.3755,-95.4154 36.4043,-95.3904 36.4327,-95.3603 36.4567,-95.316 36.4844,-95.2836 36.5072,-95.2541 36.5311,-95.2188 36.5617)
+LINESTRING(-95.9246 36.2771,-95.9276 36.2549,-95.9342 36.2335,-95.9401 36.2122,-95.9407 36.1907,-95.9494 36.1833,-95.9581 36.1759,-95.9668 36.1686,-95.9755 36.1612)
+LINESTRING(-95.9864 36.1453,-95.9837 36.1492,-95.9755 36.1612)
+LINESTRING(-95.9755 36.1612,-95.9886 36.1619,-96.0012 36.1621,-96.0138 36.1615,-96.0269 36.1602,-96.0378 36.155,-96.0603 36.1476,-96.0848 36.1409,-96.1018 36.1375,-96.1144 36.1401,-96.1353 36.1465,-96.1556 36.1535,-96.166 36.1581,-96.1766 36.1553,-96.188 36.1532,-96.1996 36.1519,-96.2107 36.1515,-96.2166 36.1557,-96.2225 36.16,-96.2287 36.164,-96.2352 36.1675,-96.2393 36.1669,-96.2433 36.1663,-96.2473 36.1657,-96.2513 36.1651,-96.262 36.1786,-96.2726 36.1921,-96.2832 36.2055,-96.2944 36.2187,-96.3216 36.2197,-96.3487 36.221,-96.3754 36.2222,-96.4021 36.2234,-96.4504 36.2233,-96.4889 36.2202,-96.5265 36.2156,-96.5719 36.2111,-96.6298 36.2097,-96.7235 36.2101,-96.8155 36.2126,-96.8683 36.2181,-96.8808 36.2243,-96.8948 36.2337,-96.9083 36.2438,-96.9192 36.2521)
+LINESTRING(-96.9192 36.2521,-96.95 36.2229,-96.9835 36.194,-97.0209 36.1691,-97.0633 36.152)
+LINESTRING(-96.0082 36.1134,-96 36.1254,-95.9919 36.1373,-95.9864 36.1453)
+LINESTRING(-79.3121 34.5068,-79.3215 34.501,-79.3357 34.4925,-79.3701 34.451,-79.4242 34.4105,-79.4844 34.3738,-79.5371 34.3439,-79.5571 34.3353,-79.5797 34.3285,-79.6023 34.3215,-79.6222 34.3122,-79.6418 34.2995,-79.6571 34.2901,-79.6738 34.2821,-79.698 34.2736,-79.7119 34.2693,-79.7259 34.265,-79.7399 34.2608,-79.7538 34.2565,-79.7824 34.2446,-79.8051 34.2304,-79.8259 34.2142,-79.8481 34.1961)
+LINESTRING(-81.8723 34.5134,-81.8894 34.5369,-81.8929 34.5565,-81.8917 34.5762,-81.8945 34.6,-81.9008 34.6162,-81.9098 34.6327,-81.9197 34.6489,-81.9287 34.6643,-81.9299 34.6667,-81.931 34.6692,-81.9417 34.7023,-81.9474 34.7365,-81.952 34.7709,-81.959 34.8048,-81.9659 34.8226,-81.9752 34.8395,-81.985 34.8561,-81.9934 34.8731,-81.9962 34.8842,-81.9963 34.8959,-81.9952 34.9077,-81.994 34.919,-81.9936 34.9222,-81.9932 34.9253,-81.9932 34.9285,-81.9942 34.9317,-82.0024 34.9391,-82.0057 34.9493,-82.0059 34.9603,-82.0048 34.9702)
+LINESTRING(-82.0048 34.9702,-82.0176 34.9676,-82.0303 34.9656,-82.0428 34.9635,-82.0552 34.9611,-82.1155 34.9126,-82.1651 34.8926,-82.2162 34.8798,-82.2806 34.8531,-82.2834 34.8487,-82.2863 34.8444,-82.2892 34.84,-82.292 34.8357,-82.2957 34.8345,-82.2993 34.8333,-82.3029 34.8322,-82.3065 34.831,-82.3028 34.8289,-82.2992 34.8267,-82.2955 34.8246,-82.2918 34.8225,-82.2863 34.8065,-82.2839 34.7877,-82.2851 34.7689,-82.2906 34.753,-82.2736 34.7362,-82.2561 34.7175,-82.2376 34.7,-82.2174 34.687,-82.1934 34.6746,-82.1746 34.6627,-82.1599 34.6526,-82.1481 34.6455,-82.1406 34.6425,-82.1325 34.64,-82.1243 34.6376,-82.1166 34.6349,-82.0864 34.619,-82.0618 34.6003,-82.0395 34.5795,-82.0162 34.5572,-81.9904 34.5521,-81.9583 34.5412,-81.9269 34.5283,-81.9035 34.5168,-81.8959 34.5172,-81.8877 34.5165,-81.8796 34.5152,-81.8723 34.5134)
+LINESTRING(-96.0119 36.0106,-96.0116 36.0363,-96.0093 36.062,-96.0074 36.0877,-96.0082 36.1134)
+LINESTRING(-114.09 35.2076,-114.049 35.2222,-114.003 35.2196,-113.957 35.2089,-113.914 35.1997,-113.893 35.1981,-113.873 35.1976,-113.852 35.1968,-113.831 35.1942,-113.816 35.1897,-113.802 35.1836,-113.788 35.1775,-113.774 35.1729,-113.754 35.1691,-113.732 35.1658,-113.711 35.163,-113.691 35.1609)
+LINESTRING(-84.8871 35.1951,-84.9016 35.1892,-84.9186 35.1762,-84.9351 35.1616,-84.9479 35.1507,-84.9668 35.1456,-84.9995 35.1358,-85.0307 35.126,-85.045 35.1211,-85.0502 35.1139,-85.0545 35.1049,-85.0587 35.0966,-85.0634 35.0913,-85.0684 35.0892,-85.0738 35.088,-85.0794 35.0871,-85.0848 35.0861,-85.1087 35.0776,-85.1274 35.0665,-85.1442 35.0529,-85.1623 35.0367,-85.1741 35.0264,-85.1836 35.0191,-85.1939 35.0129,-85.2074 35.0049)
+LINESTRING(-85.1976 34.9867,-85.1981 34.9874,-85.2074 35.0049)
+LINESTRING(-86.7278 36.1476,-86.7302 36.1363,-86.7307 36.1297,-86.7303 36.1231,-86.729 36.1157,-86.7178 36.1013,-86.7059 36.0857,-86.6936 36.0705,-86.6812 36.057,-86.6694 36.0479,-86.6558 36.0399,-86.642 36.0319,-86.6297 36.0228,-86.62 36.0126,-86.6102 36.0025,-86.6025 35.9976,-86.5937 35.9941,-86.5852 35.9909,-86.5782 35.9872,-86.5542 35.9663,-86.5247 35.9374,-86.4942 35.9069,-86.4673 35.8816,-86.4411 35.8595,-86.4132 35.8357,-86.3872 35.8108,-86.3663 35.7853,-86.3606 35.7771,-86.3545 35.7688,-86.3487 35.7606,-86.3435 35.7522,-86.3323 35.7395,-86.3115 35.7122,-86.2912 35.684,-86.2814 35.6684,-86.2752 35.6621,-86.2625 35.6483,-86.2499 35.6342,-86.2439 35.6272,-86.2419 35.6213,-86.2402 35.6151,-86.2371 35.6027,-86.2361 35.5971,-86.2357 35.5913,-86.2345 35.5856,-86.1983 35.5564,-86.1522 35.5364,-86.1072 35.518,-86.0774 35.499,-86.0706 35.4913,-86.0345 35.4404,-85.9918 35.3935,-85.947 35.3478,-85.9043 35.3007,-85.8969 35.2907,-85.8905 35.2808,-85.8843 35.2706,-85.8773 35.2602,-85.8753 35.2489,-85.8753 35.2428,
-85.8734 35.2371,-85.8582 35.243,-85.8489 35.2404,-85.8409 35.2374,-85.8331 35.2342,-85.8244 35.2311,-85.8212 35.2145,-85.8163 35.1973,-85.8071 35.1824,-85.7908 35.1725,-85.7784 35.1568,-85.7657 35.1406,-85.7537 35.1241,-85.7432 35.1075,-85.7389 35.0907,-85.7411 35.0801,-85.7356 35.0689,-85.708 35.0507)
+LINESTRING(-85.2074 35.0049,-85.2119 35.0012,-85.2182 34.9994,-85.2253 34.999,-85.233 34.9993,-85.31 35.0207,-85.319 35.0206,-85.327 35.0192,-85.335 35.0179,-85.344 35.0181,-85.3485 35.0191,-85.3527 35.0208,-85.3692 35.02,-85.3845 35.0178,-85.3972 35.0125,-85.4063 35.0028,-85.4122 34.9925,-85.4185 34.9844)
+LINESTRING(-118.163 35.0461,-118.16 35.0378,-118.156 35.0245,-118.154 35.0175,-118.156 34.9987,-118.16 34.9611,-118.165 34.9208,-118.168 34.8937,-118.17 34.8406,-118.172 34.788,-118.172 34.7362,-118.17 34.6853,-118.165 34.6815,-118.161 34.6777,-118.157 34.6739,-118.153 34.6701,-118.153 34.6534,-118.152 34.6367,-118.152 34.62,-118.152 34.6033,-118.143 34.5973,-118.134 34.5913,-118.134 34.5657,-118.128 34.5503,-118.119 34.5376,-118.11 34.5201,-118.113 34.512,-118.119 34.5083,-118.123 34.5038,-118.126 34.4988,-118.13 34.4935,-118.141 34.4878,-118.152 34.4878,-118.163 34.4907,-118.174 34.4936,-118.181 34.4938,-118.189 34.4929,-118.196 34.492,-118.203 34.4921,-118.215 34.4959,-118.222 34.5011,-118.231 34.5051,-118.248 34.5053,-118.254 34.5003,-118.261 34.4946,-118.268 34.4928,-118.276 34.4911,-118.286 34.481,-118.302 34.4724,-118.321 34.4664,-118.336 34.464,-118.359 34.4451,-118.381 34.4359,-118.406 34.4317,-118.437 34.4277,-118.445 34.4229,-118.451 34.4138,-118.456 34.4039,-118.463 34.3966,-118.489 34.3811,-118
.5 34.3701,-118.504 34.3567,-118.508 34.3338)
+LINESTRING(-118.956 35.0222,-118.943 34.9955,-118.935 34.9588,-118.928 34.9219,-118.918 34.8944,-118.898 34.8822,-118.886 34.8703,-118.875 34.8571,-118.861 34.8405,-118.866 34.8341,-118.871 34.8279,-118.877 34.822,-118.884 34.8166,-118.883 34.8132,-118.883 34.8097,-118.881 34.8076,-118.88 34.8054,-118.878 34.8032,-118.876 34.8011,-118.867 34.7987,-118.857 34.7969,-118.847 34.7952,-118.838 34.7927,-118.8 34.7693,-118.797 34.7424,-118.793 34.7083,-118.755 34.6632,-118.75 34.6491,-118.74 34.641,-118.728 34.6341,-118.716 34.6239,-118.711 34.6149,-118.709 34.6048,-118.708 34.5944,-118.706 34.5843,-118.68 34.5682,-118.651 34.541,-118.627 34.5107,-118.613 34.4855,-118.611 34.4773,-118.611 34.467,-118.611 34.4575,-118.61 34.4519,-118.607 34.4482,-118.604 34.4445,-118.601 34.4438,-118.598 34.4431,-118.594 34.4424,-118.591 34.4417,-118.582 34.4276,-118.57 34.4016,-118.558 34.3729,-118.547 34.3505,-118.537 34.3462,-118.527 34.3422,-118.518 34.3382,-118.508 34.3338)
+LINESTRING(-85.708 35.0507,-85.7035 35.055,-85.6911 35.0644,-85.6724 35.0731,-85.6492 35.0756,-85.6226 35.0656,-85.5833 35.0445,-85.5447 35.0216,-85.5202 35.006,-85.5194 35.0038,-85.5177 34.9988,-85.5142 34.9925,-85.508 34.9864,-85.5015 34.9856,-85.4949 34.9866,-85.4884 34.9885,-85.4821 34.9899,-85.4717 34.9853,-85.4707 34.9847)
+LINESTRING(-85.4185 34.9844,-85.4189 34.9839,-85.4276 34.9769,-85.4418 34.9709)
+LINESTRING(-85.4707 34.9847,-85.462 34.98,-85.4523 34.975,-85.4418 34.9709)
+LINESTRING(-95.9864 36.1453,-95.9222 36.127,-95.871 36.1057,-95.8205 36.0828,-95.7699 36.0623,-95.7578 36.0585,-95.7452 36.055,-95.7328 36.0513,-95.7211 36.0469,-95.6969 36.0344,-95.6716 36.0189,-95.6471 36.0023,-95.6258 35.9866,-95.5997 35.9608,-95.5924 35.9456,-95.5748 35.9296,-95.4918 35.8891,-95.4669 35.8759,-95.4412 35.8642,-95.4132 35.8559)
+LINESTRING(-114.753 34.8797,-114.76 34.8759,-114.794 34.8793,-114.834 34.8701,-114.877 34.8596,-114.923 34.8592,-114.948 34.8506,-114.976 34.8414,-115.004 34.8333,-115.03 34.8279,-115.037 34.8275,-115.044 34.8278,-115.051 34.8282,-115.058 34.828,-115.141 34.8194,-115.224 34.8111,-115.307 34.8031,-115.39 34.7951,-115.428 34.7869,-115.464 34.7722,-115.499 34.7555,-115.535 34.741,-115.588 34.7296,-115.662 34.7204,-115.737 34.7153,-115.791 34.7163,-115.814 34.7201,-115.838 34.7256,-115.861 34.7317,-115.883 34.7378,-115.921 34.7292,-115.966 34.7247,-116.006 34.7204,-116.031 34.7127,-116.044 34.7162,-116.058 34.7219,-116.07 34.7273,-116.078 34.7295,-116.129 34.7277,-116.193 34.727,-116.256 34.7302,-116.306 34.7401,-116.322 34.748,-116.336 34.7571,-116.351 34.7662,-116.366 34.774,-116.417 34.7823,-116.513 34.7941,-116.609 34.8049,-116.659 34.8105,-116.683 34.8129,-116.708 34.8146,-116.733 34.8162,-116.758 34.8183,-116.793 34.8231,-116.833 34.8301,-116.873 34.8382,-116.908 34.8462,-116.933 34.8553,-116.958 34.8674,
-116.983 34.8789,-117.008 34.8862)
+LINESTRING(-82.3076 34.8304,-82.3324 34.8175,-82.3598 34.8046,-82.3885 34.7946,-82.4172 34.7906,-82.4293 34.7909,-82.4403 34.7907,-82.4507 34.7885,-82.4607 34.7828,-82.4762 34.7642,-82.4873 34.7403,-82.4965 34.7153,-82.5066 34.6937,-82.5111 34.6884,-82.5235 34.6818,-82.5585 34.6644,-82.5859 34.646,-82.6123 34.6266,-82.6373 34.6088,-82.6768 34.5897,-82.7219 34.5769,-82.768 34.5655,-82.8107 34.5508,-82.82 34.5457,-82.8286 34.5397,-82.837 34.5336,-82.8459 34.528,-82.8723 34.5192,-82.9089 34.5128,-82.9469 34.508,-82.9775 34.5045,-82.9902 34.5021,-83.0005 34.4993)
+LINESTRING(-79.8481 34.1961,-79.8824 34.2018,-79.9394 34.2073,-79.9979 34.2109,-80.0368 34.211,-80.0528 34.2084,-80.0684 34.2045,-80.084 34.2005,-80.0997 34.1974,-80.1131 34.1964,-80.1272 34.1963,-80.1415 34.1963,-80.1553 34.1956,-80.1699 34.1932,-80.1838 34.1898,-80.1975 34.1863,-80.2115 34.1832,-80.2465 34.1908,-80.2962 34.1955,-80.348 34.1995,-80.3894 34.2047,-80.4002 34.2055,-80.4117 34.2044,-80.4231 34.2026,-80.4339 34.2013,-80.4522 34.202,-80.4708 34.2054,-80.4895 34.2088,-80.5082 34.2098,-80.5189 34.2092,-80.5296 34.2085,-80.5403 34.2079,-80.551 34.2072,-80.5672 34.2062,-80.5854 34.2044,-80.6059 34.2013,-80.6286 34.1959,-80.6356 34.193,-80.6422 34.189,-80.6487 34.1849,-80.6553 34.1815,-80.6606 34.1799,-80.6665 34.1789,-80.6725 34.1779,-80.6781 34.1765,-80.6898 34.1698,-80.7091 34.1569,-80.7293 34.1431,-80.7435 34.1336,-80.7727 34.113,-80.8016 34.0943,-80.8428 34.0802,-80.9085 34.0736,-80.9268 34.073,-80.9425 34.0726)
+LINESTRING(-80.9275 35.1003,-80.942 35.0756,-80.9585 35.0508,-80.9608 35.0483,-80.963 35.0458,-80.9713 35.0323,-80.9796 35.0189,-80.9889 35.0029,-80.9928 34.994,-80.9913 34.9883,-80.9891 34.9824,-80.9871 34.9765,-80.986 34.9708,-80.9867 34.9661,-80.9884 34.9614,-80.9899 34.9562,-80.99 34.9504,-80.9879 34.9429,-80.9848 34.9333,-80.9822 34.924,-80.9815 34.9173,-80.9893 34.897,-81.0025 34.8769,-81.0165 34.857,-81.0269 34.8373,-81.0411 34.7793,-81.0424 34.7226,-81.0342 34.666,-81.0196 34.608,-81.0136 34.5891,-81.007 34.5695,-81.0013 34.5499,-80.9978 34.5308,-80.9992 34.4668,-81.0064 34.374,-81.0136 34.2877,-81.0147 34.2434,-81.0086 34.2259,-81.0013 34.2082,-80.9916 34.1918,-80.9784 34.1779,-80.9751 34.1657,-80.9704 34.1508,-80.9664 34.136,-80.9651 34.1238,-80.9616 34.1139,-80.9535 34.0969,-80.9453 34.0798,-80.9425 34.0726)
+LINESTRING(-89.8744 36.0014,-89.8744 36.0013,-89.8741 35.9831,-89.8737 35.9649,-89.8734 35.9467,-89.873 35.9285,-89.8783 35.9141,-89.8916 35.9035,-89.908 35.894,-89.9226 35.8831,-89.9313 35.8728,-89.9392 35.8617,-89.9466 35.8502,-89.9538 35.8392,-90.027 35.7338,-90.0998 35.6289,-90.1705 35.5232,-90.2372 35.4153,-90.2392 35.4119,-90.2481 35.4063,-90.257 35.4008,-90.2649 35.3967,-90.2727 35.3926)
+LINESTRING(-113.691 35.1609,-113.657 35.1609,-113.62 35.1587,-113.585 35.1575,-113.553 35.1605,-113.536 35.1654,-113.52 35.1717,-113.503 35.1784,-113.486 35.1841,-113.464 35.1895,-113.442 35.1941,-113.42 35.1981,-113.398 35.202,-113.377 35.2039,-113.356 35.2042,-113.335 35.2048,-113.315 35.2079,-113.3 35.2136,-113.284 35.221,-113.268 35.2279,-113.253 35.2322,-113.239 35.2337,-113.226 35.2346,-113.212 35.2357,-113.198 35.2378,-113.177 35.244,-113.156 35.2522,-113.136 35.2607,-113.115 35.2677,-113.093 35.2726,-113.07 35.277,-113.048 35.2816,-113.026 35.2875,-113.004 35.2959,-112.984 35.3057,-112.964 35.3148,-112.942 35.3214,-112.919 35.3232,-112.899 35.3211,-112.879 35.3184,-112.859 35.3179,-112.829 35.2981,-112.798 35.2867,-112.764 35.279,-112.729 35.2707,-112.705 35.2628,-112.681 35.254,-112.656 35.2454,-112.632 35.2381,-112.612 35.235,-112.591 35.2319,-112.571 35.2289,-112.551 35.2258,-112.534 35.2245,-112.517 35.2247,-112.5 35.2252,-112.484 35.2247,-112.452 35.2211,-112.419 35.217,-112.385 35.2144,-112.35
3 35.2152,-112.338 35.2175,-112.328 35.2198,-112.316 35.2214,-112.294 35.2213,-112.282 35.22,-112.268 35.2222,-112.254 35.2249,-112.241 35.225,-112.235 35.2282,-112.23 35.2323,-112.216 35.2405,-112.202 35.2471,-112.187 35.2528,-112.171 35.2583,-112.153 35.2608,-112.127 35.2607,-112.1 35.2599,-112.079 35.2606,-112.071 35.2626,-112.063 35.2649,-112.055 35.2665,-112.046 35.2661,-112.028 35.262,-112.01 35.257,-111.991 35.2523,-111.972 35.2493,-111.968 35.251,-111.962 35.2528,-111.956 35.254,-111.951 35.2543,-111.95 35.2575,-111.95 35.2607,-111.925 35.2561,-111.895 35.2538,-111.864 35.2516,-111.837 35.2469,-111.819 35.2396,-111.801 35.2299,-111.785 35.2192,-111.769 35.2091,-111.746 35.1984,-111.72 35.1897,-111.693 35.1824,-111.668 35.1758,-111.663 35.1739)
+LINESTRING(-120.678 35.6435,-120.677 35.6372,-120.678 35.6278,-120.679 35.6186,-120.688 35.6119,-120.698 35.6007,-120.698 35.5884,-120.698 35.5752,-120.7 35.563,-120.716 35.5431,-120.705 35.5211,-120.682 35.5003,-120.662 35.4844,-120.652 35.472,-120.644 35.4581,-120.639 35.4436,-120.633 35.4297,-120.628 35.4206,-120.624 35.4112,-120.622 35.4016,-120.622 35.3917,-120.634 35.3804,-120.64 35.3747,-120.64 35.3651,-120.639 35.3595,-120.635 35.3537,-120.626 35.3481,-120.622 35.3348,-120.618 35.3249,-120.618 35.3143,-120.624 35.2991,-120.645 35.29,-120.654 35.2899,-120.667 35.2636,-120.671 35.2543,-120.675 35.2452,-120.68 35.236,-120.684 35.2262,-120.683 35.2151,-120.671 35.203,-120.652 35.1898,-120.624 35.1756,-120.614 35.1673,-120.609 35.1621,-120.589 35.1469,-120.577 35.1325,-120.565 35.1176,-120.551 35.1045,-120.533 35.09,-120.516 35.0736,-120.501 35.0565,-120.486 35.0397,-120.463 35.0191,-120.441 35.0016,-120.424 34.9814,-120.417 34.9526,-120.417 34.9386,-120.417 34.9242,-120.417 34.9098,-120.416 34.8959,-120
.403 34.8704,-120.378 34.8451,-120.353 34.8212,-120.341 34.8002,-120.323 34.7874,-120.308 34.7731,-120.294 34.7584,-120.278 34.7448,-120.248 34.733,-120.205 34.7202,-120.169 34.7037,-120.155 34.6806,-120.163 34.6703,-120.168 34.6651,-120.173 34.6582,-120.175 34.6477,-120.176 34.6355,-120.177 34.624,-120.18 34.6152,-120.178 34.6036,-120.179 34.5966,-120.18 34.5901,-120.181 34.5802,-120.185 34.5709,-120.189 34.5617,-120.195 34.5549,-120.202 34.549,-120.204 34.5431,-120.203 34.5371,-120.203 34.5298,-120.2 34.5239,-120.191 34.5237,-120.181 34.5236,-120.171 34.523,-120.161 34.5225,-120.152 34.5231,-120.143 34.5238,-120.135 34.524,-120.128 34.5242,-120.12 34.5244,-120.113 34.5246,-120.102 34.5215,-120.092 34.5185,-120.081 34.5136,-120.074 34.5139,-120.066 34.5142,-120.057 34.5145,-120.048 34.5148,-120.04 34.5156,-120.033 34.5164,-120.021 34.5156,-120.01 34.5147,-119.998 34.5127,-119.987 34.5106,-119.979 34.5083,-119.971 34.506,-119.964 34.5037,-119.956 34.5014,-119.943 34.4958,-119.93 34.4901,-119.92 34.488,-119.9
11 34.4858,-119.902 34.4841,-119.894 34.4825,-119.886 34.4817,-119.874 34.4838,-119.867 34.4847,-119.86 34.4855,-119.853 34.4864,-119.846 34.4873,-119.839 34.4877,-119.832 34.488,-119.826 34.4884,-119.819 34.4888,-119.808 34.4893,-119.796 34.4898,-119.787 34.4902,-119.778 34.4906,-119.769 34.491,-119.76 34.4914,-119.749 34.4893,-119.738 34.4871,-119.731 34.4833,-119.723 34.4795,-119.713 34.4738,-119.7 34.4676,-119.691 34.466,-119.682 34.4677,-119.673 34.4694,-119.663 34.4694,-119.653 34.4695,-119.642 34.4679,-119.631 34.4663,-119.624 34.4663,-119.612 34.4667,-119.604 34.4667,-119.596 34.4667,-119.584 34.4648,-119.571 34.4628,-119.563 34.4616,-119.555 34.4604,-119.545 34.4585,-119.536 34.4567,-119.526 34.4495,-119.515 34.4462,-119.504 34.443,-119.498 34.4382,-119.492 34.4334,-119.481 34.431,-119.469 34.4287,-119.466 34.4214,-119.463 34.4141,-119.459 34.4068,-119.456 34.3995,-119.443 34.3932,-119.43 34.3877,-119.417 34.3821,-119.409 34.3791,-119.401 34.3762,-119.392 34.3686,-119.383 34.3611,-119.375 34.3536,-1
19.367 34.3462,-119.359 34.3458,-119.352 34.3454,-119.34 34.3384,-119.327 34.3314,-119.316 34.3228,-119.305 34.3151,-119.295 34.3116,-119.287 34.3088,-119.277 34.3049,-119.266 34.3034,-119.259 34.3034,-119.253 34.3034,-119.243 34.2968,-119.233 34.2902,-119.222 34.2907,-119.209 34.2859,-119.195 34.281,-119.188 34.2775,-119.18 34.2741,-119.17 34.2695,-119.161 34.2648,-119.151 34.2571,-119.139 34.2501,-119.13 34.2434,-119.121 34.2367,-119.112 34.2329,-119.103 34.2291,-119.095 34.2253,-119.086 34.2215,-119.079 34.2211,-119.071 34.2207,-119.063 34.2204,-119.055 34.22,-119.049 34.2194,-119.042 34.2188,-119.035 34.2182,-119.028 34.2177,-119.02 34.2176,-119.013 34.2176,-119.005 34.2176,-118.998 34.2175,-118.984 34.2121,-118.97 34.2066,-118.956 34.2012,-118.942 34.1957,-118.919 34.1876,-118.9 34.183,-118.882 34.1798,-118.86 34.1759,-118.844 34.1697,-118.83 34.1602,-118.815 34.1509,-118.8 34.1455,-118.782 34.1433,-118.76 34.1408,-118.739 34.1388,-118.721 34.1377,-118.714 34.1392,-118.706 34.143,-118.699 34.1477,-118.6
93 34.1521,-118.669 34.1535,-118.66 34.1523,-118.648 34.1554,-118.615 34.1697,-118.594 34.1705,-118.574 34.1731,-118.554 34.1753,-118.534 34.175,-118.516 34.171,-118.501 34.1653,-118.485 34.1606,-118.466 34.1598)
+LINESTRING(-86.7861 36.1639,-86.7779 36.1332,-86.7746 36.1189,-86.7669 36.0905,-86.7695 36.0812,-86.7764 36.0644,-86.7835 36.0467,-86.7868 36.0346,-86.7904 36.0103,-86.7994 35.9862,-86.8102 35.9621,-86.8193 35.9377,-86.8253 35.9083,-86.8314 35.849,-86.8373 35.8201,-86.842 35.8116,-86.849 35.8046,-86.8562 35.7978,-86.8614 35.79,-86.8662 35.7737,-86.8753 35.7411,-86.8842 35.7079,-86.8886 35.6895,-86.8892 35.6751,-86.8892 35.6603,-86.8897 35.6456,-86.8918 35.6314,-86.8968 35.6126,-86.9019 35.5941,-86.9058 35.5753,-86.9074 35.5559,-86.9032 35.534,-86.894 35.4939,-86.8841 35.4521,-86.8781 35.425,-86.8775 35.4105,-86.8795 35.3966,-86.8824 35.3828,-86.8843 35.3684,-86.8856 35.331,-86.8861 35.2951,-86.8871 35.2588,-86.8899 35.2206,-86.8733 35.2012,-86.873 35.1787,-86.8764 35.153,-86.8808 35.1272,-86.8835 35.104,-86.8827 35.0743,-86.8801 35.0513,-86.8797 35.0268,-86.8856 34.9923)
+LINESTRING(-114.753 34.8797,-114.728 34.8836,-114.721 34.8851,-114.709 34.889,-114.702 34.8905,-114.686 34.8903,-114.672 34.8854,-114.662 34.8766,-114.656 34.8645,-114.646 34.8138,-114.631 34.7726)
+LINESTRING(-118.508 34.3338,-118.483 34.3112,-118.457 34.2809,-118.432 34.2518,-118.409 34.2329,-118.401 34.2127,-118.392 34.1929,-118.382 34.1733,-118.375 34.1535)
+LINESTRING(-118.375 34.1535,-118.398 34.1543,-118.421 34.1551,-118.444 34.1567,-118.466 34.1598)
+LINESTRING(-81.1092 34.0368,-81.0697 34.0565,-81.0302 34.0686,-80.9907 34.0733,-80.9693 34.0717,-80.9634 34.0719,-80.9451 34.0725,-80.9425 34.0726)
+LINESTRING(-81.1092 34.0368,-81.1341 34.0599,-81.158 34.0844,-81.1825 34.1081,-81.2093 34.1289,-81.2355 34.1429,-81.2638 34.154,-81.2928 34.1641,-81.321 34.175,-81.3343 34.1816,-81.3471 34.189,-81.3597 34.1965,-81.3728 34.2035,-81.3921 34.2119,-81.412 34.219,-81.432 34.2258,-81.4518 34.2332,-81.4902 34.2546,-81.5593 34.2957,-81.6268 34.3366,-81.6601 34.3576,-81.6732 34.3709,-81.6844 34.3859,-81.6933 34.3988,-81.699 34.406,-81.7166 34.4192,-81.727 34.4242,-81.736 34.4269,-81.7499 34.4329,-81.7639 34.4412,-81.7778 34.4505,-81.7916 34.4602,-81.8049 34.4694,-81.8218 34.4803,-81.8389 34.491,-81.8558 34.5019,-81.8723 34.5134)
+LINESTRING(-109.045 35.36,-109.035 35.3609,-109.026 35.3625,-109.01 35.3654,-108.999 35.3675,-108.988 35.3696,-108.961 35.3962,-108.939 35.4185,-108.914 35.4393,-108.881 35.4617,-108.856 35.4733,-108.835 35.4786,-108.819 35.4805,-108.81 35.482,-108.796 35.488,-108.779 35.4932,-108.761 35.4979,-108.741 35.5018)
+LINESTRING(-114.631 34.7726,-114.602 34.7386,-114.562 34.7173,-114.513 34.714,-114.474 34.7193)
+LINESTRING(-85.554 34.7145,-85.5493 34.7224,-85.5444 34.7343,-85.5406 34.7467,-85.539 34.7558,-85.5407 34.768,-85.5443 34.7803,-85.5475 34.7926,-85.5479 34.8047,-85.5343 34.8488,-85.5086 34.8929,-85.4761 34.9345,-85.4418 34.9709)
+LINESTRING(-114.474 34.7193,-114.457 34.7217,-114.44 34.7237,-114.423 34.726,-114.406 34.728,-114.389 34.7296,-114.358 34.7307,-114.315 34.7323,-114.272 34.7349,-114.243 34.7397,-114.217 34.7524,-114.186 34.7728,-114.16 34.7961,-114.146 34.817,-114.144 34.8431,-114.148 34.8692,-114.153 34.8951,-114.153 34.9204,-114.144 34.9624,-114.134 35.0047,-114.125 35.047,-114.118 35.0891,-114.115 35.1101,-114.11 35.1227,-114.103 35.1336,-114.092 35.1499,-114.1 35.1634,-114.102 35.1787,-114.098 35.194,-114.09 35.2076)
+LINESTRING(-105.923 35.6298,-105.911 35.6108,-105.9 35.5924,-105.889 35.574,-105.877 35.5556)
+LINESTRING(-118.375 34.1535,-118.352 34.1536,-118.326 34.1526,-118.303 34.1516,-118.284 34.1517,-118.276 34.1528,-118.268 34.1542,-118.259 34.1553,-118.25 34.1554,-118.243 34.1542,-118.237 34.1519,-118.232 34.1493,-118.226 34.147,-118.215 34.1454,-118.203 34.1455,-118.192 34.1448,-118.181 34.1406,-118.172 34.1424,-118.155 34.147,-118.137 34.1518,-118.124 34.1545,-118.11 34.154,-118.085 34.1522,-118.059 34.1499,-118.045 34.1481,-118.038 34.1462,-118.032 34.1437,-118.026 34.1412,-118.02 34.1396,-118.007 34.1382,-117.993 34.1376,-117.978 34.1373,-117.964 34.1366,-117.962 34.1344,-117.958 34.1324,-117.955 34.1308,-117.952 34.1291)
+LINESTRING(-94.2245 36.4213,-94.1776 36.3752,-94.1741 36.3547,-94.1851 36.3361,-94.182 36.296,-94.1766 36.2913,-94.1696 36.2878,-94.162 36.2845,-94.1553 36.2806,-94.1531 36.2737,-94.1521 36.2626,-94.1526 36.2513,-94.1548 36.2438,-94.1603 36.242,-94.1656 36.2396,-94.1706 36.2367,-94.175 36.2335,-94.1773 36.2221,-94.1803 36.1983,-94.1829 36.1727,-94.1842 36.1562,-94.1826 36.1533,-94.181 36.1504,-94.1787 36.1457,-94.1775 36.1418,-94.1785 36.1402,-94.1794 36.1386,-94.1804 36.137,-94.1813 36.1354,-94.18 36.1289,-94.1774 36.1224,-94.1736 36.1163,-94.1687 36.1111,-94.1913 36.0981,-94.2003 36.0785,-94.1981 36.0565,-94.187 36.0368,-94.1834 36.0349,-94.1793 36.0324,-94.1752 36.0303,-94.1715 36.0298,-94.1693 36.0168,-94.1688 36.0048,-94.1689 35.9928,-94.1683 35.98,-94.1669 35.9784,-94.1654 35.9768,-94.1683 35.965,-94.1725 35.9548,-94.1767 35.9447,-94.1795 35.9335,-94.1792 35.9292,-94.1777 35.925,-94.1759 35.921,-94.1745 35.9168,-94.1695 35.8982,-94.1609 35.884,-94.1512 35.8709,-94.1403 35.8077,-94.1472 35.7745,-94.153
2 35.7254,-94.1612 35.6782,-94.1645 35.636,-94.1687 35.6126,-94.1783 35.5948,-94.1886 35.5796,-94.1963 35.5701,-94.2107 35.5555,-94.2172 35.549,-94.2199 35.5416,-94.2232 35.5244)
+LINESTRING(-88.8569 35.662,-88.8905 35.6516,-88.9239 35.6409,-88.9573 35.6301,-88.9906 35.6192,-88.9996 35.6169,-89.0087 35.6152,-89.018 35.6134,-89.0276 35.6106,-89.0833 35.5902,-89.1407 35.5698,-89.1989 35.5513,-89.2571 35.5368,-89.2641 35.5224,-89.2698 35.5064,-89.2749 35.4901,-89.2799 35.4749,-89.316 35.4512,-89.354 35.4267,-89.3929 35.4033,-89.4317 35.3829,-89.4447 35.379,-89.4579 35.3758,-89.4794 35.3678,-89.5009 35.3587,-89.5219 35.3489,-89.542 35.3388,-89.5621 35.3271,-89.5809 35.3143,-89.5993 35.301,-89.618 35.2879,-89.6615 35.2619,-89.7196 35.231,-89.7785 35.2019,-89.8246 35.181,-89.8409 35.1745,-89.8578 35.1681,-89.8748 35.1616,-89.8914 35.1547,-89.9023 35.1636,-89.9127 35.1739,-89.9218 35.185,-89.929 35.1961,-89.9409 35.1965,-89.953 35.1971,-89.9651 35.1977,-89.9769 35.1977,-89.9891 35.1967,-90.0042 35.1955,-90.0187 35.1957,-90.0292 35.1989)
+LINESTRING(-90.2727 35.3926,-90.2756 35.3914,-90.2776 35.3896,-90.2788 35.3873,-90.2791 35.3846,-90.2725 35.3499,-90.2573 35.3168,-90.2385 35.2843,-90.2207 35.2516,-90.2135 35.2345,-90.2072 35.2167,-90.2012 35.1987,-90.1953 35.1813,-90.1946 35.1791,-90.1938 35.1768,-90.1929 35.1747,-90.1916 35.1726)
+LINESTRING(-96.0082 36.1134,-96.0212 36.1057,-96.0393 36.0927,-96.0568 36.0791,-96.068 36.07,-96.0775 36.0588,-96.0854 36.045,-96.0931 36.0308,-96.1018 36.0182,-96.122 36.0121,-96.1475 36.0052,-96.172 35.9979,-96.1894 35.9903,-96.2281 35.9649,-96.267 35.9383,-96.305 35.9108,-96.341 35.8831,-96.3517 35.8724,-96.357 35.8669,-96.413 35.8428,-96.5066 35.8119,-96.5998 35.7822,-96.649 35.7666,-96.7085 35.752,-96.7869 35.7386,-96.8685 35.7254,-96.938 35.7116,-96.9695 35.7039,-97.0128 35.6931,-97.0565 35.6813,-97.0892 35.6705,-97.1065 35.6606,-97.1178 35.6505,-97.131 35.6419,-97.154 35.6366,-97.2168 35.632,-97.2927 35.6264,-97.3675 35.6167,-97.427 35.5992)
+LINESTRING(-97.3172 36.3949,-97.3217 36.3448,-97.3225 36.293,-97.3219 36.241,-97.3223 36.1904,-97.324 36.1732,-97.3274 36.1594,-97.332 36.1459,-97.3374 36.1294,-97.34 36.1037,-97.3433 36.0542,-97.3458 36.0049,-97.3458 35.9798,-97.3526 35.9713,-97.36 35.9626,-97.3671 35.9538,-97.3732 35.9452,-97.3833 35.9124,-97.3863 35.8724,-97.3935 35.8342,-97.4159 35.8065,-97.416 35.7748,-97.415 35.7418,-97.415 35.7091,-97.418 35.6781,-97.4212 35.6581,-97.4236 35.6388,-97.4255 35.6194,-97.427 35.5992)
+LINESTRING(-94.3249 35.4716,-94.3207 35.4709,-94.3165 35.4704,-94.3028 35.4701,-94.2971 35.4711,-94.2925 35.4731,-94.2885 35.476,-94.2847 35.4797,-94.2817 35.4824,-94.2788 35.4847,-94.2724 35.4892,-94.2587 35.4987,-94.2559 35.5013,-94.254 35.5039,-94.2522 35.5066,-94.2496 35.5093,-94.2418 35.5162,-94.2388 35.5186,-94.235 35.5209,-94.2313 35.5224,-94.2274 35.5236,-94.2232 35.5244)
+LINESTRING(-86.8856 34.9923,-86.8856 34.9923,-86.8915 34.9715,-86.8996 34.9441,-86.9061 34.9183,-86.9075 34.9019,-86.921 34.8753,-86.9257 34.8474,-86.9244 34.8184,-86.9198 34.7883)
+LINESTRING(-94.4445 35.4684,-94.4369 35.4786,-94.4264 35.4872,-94.4135 35.4892,-94.4023 35.4904,-94.3912 35.4902,-94.3788 35.4876,-94.3729 35.4869,-94.3677 35.4857,-94.3627 35.4841,-94.357 35.4825,-94.3523 35.4815,-94.3481 35.4808,-94.3439 35.4801,-94.3394 35.4788,-94.3355 35.477,-94.329 35.4733,-94.3249 35.4716)
+LINESTRING(-90.1916 35.1726,-90.1515 35.1564,-90.1112 35.1442,-90.0728 35.1365)
+LINESTRING(-90.0292 35.1989,-90.0293 35.1821,-90.0295 35.1654,-90.0296 35.1486,-90.0298 35.1319)
+LINESTRING(-90.0728 35.1365,-90.0706 35.136,-90.0298 35.1319)
+LINESTRING(-86.5985 34.7336,-86.5643 34.759)
+LINESTRING(-95.4132 35.8559,-95.3888 35.8399,-95.3674 35.8184,-95.3506 35.7934,-95.3395 35.7669,-95.3312 35.7467,-95.323 35.7335,-95.3167 35.7201,-95.3144 35.6995,-95.3142 35.6887,-95.3136 35.6773,-95.3125 35.666,-95.3108 35.6553,-95.2845 35.6256,-95.2391 35.5699,-95.1959 35.5144,-95.176 35.4857)
+LINESTRING(-97.4649 35.5448,-97.4593 35.5524,-97.4494 35.5682,-97.4378 35.586,-97.427 35.5992)
+LINESTRING(-95.176 35.4857,-95.2196 35.4835,-95.262 35.48,-95.304 35.4739,-95.3461 35.4643,-95.3904 35.4563,-95.4386 35.4536,-95.487 35.4537,-95.5319 35.454)
+LINESTRING(-95.3953 35.7269,-95.4066 35.6975,-95.4331 35.6537,-95.4609 35.6131,-95.4763 35.5931,-95.4872 35.5845,-95.4993 35.5751,-95.5108 35.5651,-95.5199 35.5549,-95.5204 35.5332,-95.5208 35.5116,-95.5209 35.4899,-95.5205 35.4682,-95.5233 35.4646,-95.5262 35.4611,-95.529 35.4575,-95.5319 35.454)
+LINESTRING(-117.952 34.1291,-117.958 34.1147,-117.963 34.1002,-117.968 34.0855,-117.973 34.0708,-117.992 34.0494,-118.023 34.034,-118.056 34.0089,-118.085 33.9582,-118.087 33.9544,-118.09 33.9497,-118.093 33.9454,-118.094 33.9427)
+LINESTRING(-118.375 34.1535,-118.363 34.1436,-118.35 34.1335,-118.339 34.1227,-118.332 34.1104,-118.314 34.1011,-118.301 34.0906,-118.285 34.0805,-118.263 34.0724,-118.254 34.0689,-118.244 34.0633,-118.233 34.0574,-118.224 34.0529,-118.222 34.0484,-118.221 34.0437,-118.221 34.039,-118.221 34.0342,-118.187 34.0259,-118.159 34.0075,-118.136 33.984,-118.117 33.9607,-118.112 33.9562,-118.106 33.9523,-118.099 33.9481,-118.094 33.9427)
+LINESTRING(-104.41 36.8069,-104.408 36.7789,-104.41 36.7582,-104.415 36.7403,-104.423 36.7225,-104.432 36.7025,-104.44 36.6844,-104.45 36.6691,-104.464 36.6567,-104.484 36.6476,-104.495 36.6439,-104.504 36.6403,-104.513 36.6369,-104.524 36.6339,-104.533 36.6323,-104.541 36.631,-104.549 36.6287,-104.556 36.6246,-104.571 36.6069,-104.578 36.5881,-104.58 36.5677,-104.579 36.5452,-104.578 36.5248,-104.58 36.5136,-104.587 36.5045,-104.596 36.4957,-104.604 36.4851,-104.61 36.4715,-104.613 36.4588,-104.613 36.4459,-104.613 36.4313,-104.61 36.4172,-104.609 36.3961,-104.608 36.3782,-104.607 36.3624,-104.608 36.3468,-104.612 36.3295,-104.617 36.3193,-104.621 36.3103,-104.626 36.3013,-104.63 36.2909,-104.635 36.2703,-104.648 36.2233,-104.666 36.1719,-104.682 36.1382,-104.682 36.1162,-104.684 36.0803,-104.688 36.045,-104.691 36.0249,-104.721 35.9932,-104.78 35.9391,-104.839 35.8873,-104.867 35.8625,-104.936 35.8459,-104.963 35.8215,-104.981 35.7898,-105.019 35.7518,-105.053 35.7278,-105.079 35.7107,-105.108 35.697,-105
.148 35.6833,-105.17 35.6758,-105.177 35.6696,-105.18 35.6615,-105.185 35.6482,-105.201 35.6174,-105.216 35.5863,-105.23 35.5551,-105.246 35.5238,-105.258 35.4931,-105.274 35.4506,-105.294 35.4128,-105.319 35.3967,-105.359 35.3971,-105.399 35.3978,-105.44 35.3997,-105.48 35.4034,-105.496 35.4073,-105.533 35.4199,-105.55 35.4241,-105.558 35.4247,-105.565 35.4249,-105.573 35.4254,-105.58 35.427,-105.594 35.4322,-105.617 35.4414,-105.64 35.4515,-105.654 35.4593,-105.662 35.4641,-105.67 35.4689,-105.677 35.4743,-105.682 35.4812,-105.69 35.5088,-105.692 35.5255,-105.696 35.5388,-105.709 35.5563,-105.728 35.5592,-105.743 35.5664,-105.756 35.5769,-105.766 35.59,-105.774 35.5922,-105.784 35.5886,-105.787 35.5801,-105.788 35.5714,-105.814 35.5601,-105.819 35.5528,-105.835 35.5484,-105.844 35.5464,-105.852 35.5447,-105.865 35.5501,-105.877 35.5556)
+LINESTRING(-117.008 34.8862,-117.027 34.8856,-117.048 34.8845,-117.067 34.8797,-117.077 34.8676,-117.081 34.8552,-117.085 34.8428,-117.089 34.8304,-117.092 34.818,-117.105 34.8035,-117.13 34.7814,-117.156 34.7599,-117.171 34.7469,-117.198 34.7123,-117.207 34.6858,-117.21 34.6621,-117.223 34.6357,-117.239 34.6153,-117.255 34.5949,-117.272 34.5749,-117.289 34.5556,-117.303 34.5428,-117.312 34.5346,-117.318 34.5246,-117.321 34.5067,-117.341 34.477,-117.375 34.4275,-117.412 34.3803,-117.441 34.3574,-117.448 34.3553,-117.455 34.3532,-117.462 34.3511,-117.469 34.3489,-117.477 34.3464,-117.482 34.3378,-117.482 34.3327,-117.481 34.3268,-117.48 34.321,-117.478 34.3164,-117.465 34.3082,-117.454 34.2908,-117.447 34.2716,-117.449 34.2577,-117.441 34.252,-117.434 34.2456,-117.428 34.2392,-117.421 34.2337,-117.39 34.2116,-117.36 34.1897,-117.333 34.1654,-117.31 34.1365,-117.306 34.1307,-117.301 34.1254,-117.299 34.1095,-117.298 34.0936,-117.296 34.0732,-117.295 34.0635)
+LINESTRING(-117.952 34.1291,-117.925 34.1215,-117.893 34.1174,-117.86 34.1163,-117.832 34.1179,-117.829 34.104,-117.824 34.0904,-117.817 34.0775,-117.807 34.0657,-117.794 34.0687,-117.783 34.0707,-117.772 34.0714,-117.758 34.07,-117.733 34.0781,-117.697 34.084,-117.662 34.0866,-117.636 34.0849,-117.592 34.0701,-117.513 34.0668,-117.431 34.0691,-117.378 34.0709,-117.357 34.0703,-117.336 34.0688,-117.316 34.0665,-117.295 34.0635)
+LINESTRING(-97.938 35.5005,-97.9574 35.5015,-97.9738 35.5096,-97.9886 35.5207,-98.0032 35.5306,-98.0287 35.5298,-98.0551 35.5311,-98.0814 35.533,-98.1071 35.5342,-98.1301 35.5341,-98.1532 35.5336,-98.1762 35.5331,-98.1993 35.5326,-98.216 35.534,-98.234 35.5379,-98.2518 35.5428,-98.2675 35.5471,-98.2838 35.548,-98.2998 35.5445,-98.3155 35.5392,-98.3309 35.5347)
+LINESTRING(-95.176 35.4857,-95.1622 35.4889,-95.1468 35.4932,-95.1309 35.497,-95.1156 35.4988,-95.0897 35.501,-95.0246 35.5092,-94.9962 35.5116,-94.9917 35.5116,-94.9865 35.511,-94.9813 35.5099,-94.9772 35.5083,-94.9179 35.4749,-94.9128 35.4739,-94.9041 35.473,-94.8905 35.4721,-94.8657 35.4658,-94.8414 35.4527,-94.8172 35.4396,-94.7927 35.433,-94.7694 35.4316,-94.7571 35.4307,-94.7494 35.4298,-94.7224 35.4213,-94.6925 35.4082,-94.6636 35.3942,-94.6399 35.3832,-94.6164 35.3804,-94.5853 35.3841,-94.5536 35.3909,-94.5284 35.3975,-94.5144 35.4024,-94.4968 35.4103,-94.4799 35.4191,-94.4679 35.4271,-94.4577 35.4468,-94.4473 35.4645,-94.4445 35.4684)
+LINESTRING(-117.31 34.0432,-117.295 34.0635)
+LINESTRING(-95.5319 35.454,-95.568 35.455,-95.6328 35.4541,-95.7003 35.4516,-95.7445 35.4478,-95.7583 35.4443,-95.7715 35.4397,-95.7845 35.4349,-95.7978 35.4311,-95.8049 35.4304,-95.812 35.4309,-95.819 35.432,-95.8259 35.4327,-95.8394 35.4324,-95.8537 35.4307,-95.868 35.4287,-95.8815 35.4269,-95.9023 35.4263,-95.9247 35.4274,-95.947 35.4292,-95.9677 35.4306)
+LINESTRING(-97.4649 35.5448,-97.464 35.5284,-97.4648 35.508,-97.4679 35.4882,-97.4742 35.4732)
+LINESTRING(-97.4649 35.5448,-97.4903 35.5403,-97.5261 35.5302,-97.5594 35.5175,-97.5775 35.5049,-97.5797 35.4961,-97.5806 35.4833,-97.5807 35.4704,-97.5806 35.4614,-97.6064 35.4602,-97.6351 35.459,-97.6636 35.4587,-97.689 35.4604,-97.7187 35.4683,-97.749 35.4809,-97.7793 35.4934,-97.8087 35.5007,-97.8401 35.5025,-97.8731 35.5023,-97.9063 35.5012,-97.938 35.5005)
+LINESTRING(-90.0298 35.1319,-90.0292 35.1118,-90.0209 35.0833,-90.011 35.0572,-90.0055 35.0441,-90.0043 35.0376,-90.0046 35.0296,-90.0054 35.0223,-90.0062 35.015,-90.0058 34.9964)
+LINESTRING(-86.8899 34.6293,-86.8797 34.63,-86.8477 34.6392,-86.8155 34.6512,-86.7923 34.6611,-86.7643 34.6622,-86.7326 34.6712,-86.7029 34.6839,-86.6812 34.6963,-86.6807 34.6982,-86.6803 34.7001,-86.6799 34.7021,-86.6795 34.704,-86.6599 34.7119,-86.6392 34.7183,-86.6184 34.7249,-86.5985 34.7336)
+LINESTRING(-86.9198 34.7883,-86.9146 34.7503,-86.9045 34.7013,-86.8948 34.6569,-86.8899 34.6293)
+LINESTRING(-118.094 33.9427,-118.077 33.9179,-118.043 33.8939,-118.004 33.8728,-117.973 33.8566)
+LINESTRING(-110.18 34.9319,-110.175 34.9376,-110.17 34.9432,-110.149 34.9648,-110.127 34.982,-110.104 34.9953,-110.078 35.0051,-110.066 35.0087,-110.053 35.0116,-110.04 35.0139,-110.027 35.0157,-110.014 35.0172,-110 35.0184,-109.985 35.0196,-109.97 35.0207,-109.96 35.0214,-109.949 35.0221,-109.938 35.023,-109.927 35.0238,-109.917 35.025,-109.907 35.0264,-109.899 35.028,-109.892 35.03,-109.886 35.0323,-109.88 35.035,-109.874 35.0381,-109.868 35.0416,-109.861 35.046,-109.853 35.0505,-109.846 35.0552,-109.838 35.06,-109.82 35.071,-109.798 35.0821,-109.772 35.0928,-109.741 35.1024,-109.719 35.1113,-109.697 35.1233,-109.675 35.1352,-109.652 35.1439,-109.629 35.1497,-109.607 35.1561,-109.586 35.1633,-109.566 35.1714,-109.553 35.1773,-109.543 35.1827,-109.534 35.1876,-109.527 35.1921,-109.52 35.1969,-109.513 35.2017,-109.507 35.2061,-109.501 35.2105,-109.483 35.2208,-109.46 35.2304,-109.43 35.2399,-109.39 35.2497,-109.368 35.2558,-109.353 35.262,-109.343 35.2681,-109.336 35.2738,-109.328 35.283,-109.319 35.2924,-1
09.313 35.2986,-109.306 35.3048,-109.297 35.311,-109.287 35.3172,-109.272 35.324,-109.258 35.3278,-109.244 35.3294,-109.232 35.3297,-109.223 35.3293,-109.214 35.3287,-109.204 35.3282,-109.193 35.3286,-109.184 35.3295,-109.174 35.3304,-109.164 35.3312,-109.154 35.3321,-109.134 35.3368,-109.117 35.3446,-109.1 35.3524,-109.079 35.357,-109.068 35.358,-109.057 35.359,-109.046 35.36,-109.045 35.36)
+LINESTRING(-110.18 34.9319,-110.199 34.9253,-110.221 34.9342,-110.243 34.951,-110.263 34.9684,-110.279 34.9779,-110.296 34.9824,-110.314 34.9848,-110.334 34.9877,-110.357 34.9912,-110.377 34.9926,-110.398 34.9932,-110.421 34.9939,-110.445 34.9952,-110.467 34.9971,-110.489 35.0003,-110.514 35.0056,-110.527 35.0085,-110.538 35.0109,-110.549 35.0137,-110.562 35.0175,-110.575 35.0232,-110.585 35.03,-110.594 35.0378,-110.604 35.0466,-110.623 35.0602,-110.643 35.0703,-110.664 35.076,-110.688 35.0763,-110.7 35.0766,-110.729 35.0808,-110.741 35.0811,-111.082 35.1168,-111.101 35.1176,-111.12 35.1179,-111.14 35.1191,-111.159 35.1224,-111.176 35.1275,-111.193 35.1335,-111.209 35.1398,-111.226 35.146,-111.239 35.1497,-111.253 35.1534,-111.267 35.1574,-111.279 35.1622,-111.284 35.1613,-111.295 35.1615,-111.3 35.1605,-111.33 35.1724,-111.359 35.185,-111.39 35.1962,-111.422 35.2034,-111.441 35.2045,-111.459 35.2041,-111.477 35.2039,-111.495 35.2056,-111.515 35.2096,-111.54 35.2145,-111.578 35.2155,-111.663 35.1739)
+LINESTRING(-97.4742 35.4732,-97.4537 35.4663,-97.436 35.4552,-97.4192 35.4434,-97.401 35.4341,-97.3883 35.4306,-97.3751 35.4282,-97.3618 35.4263,-97.3488 35.4239,-97.3224 35.4169,-97.2983 35.4086,-97.275 35.3994,-97.2508 35.3893,-97.2429 35.3871,-97.2349 35.3863,-97.2269 35.3864,-97.2187 35.3866,-97.1633 35.3866,-97.1073 35.387,-97.0514 35.3871,-96.9964 35.3862,-96.9727 35.3856,-96.9487 35.3854,-96.9247 35.3857,-96.9011 35.3868,-96.885 35.3885,-96.869 35.3909,-96.8529 35.393,-96.8365 35.3938,-96.8104 35.3917,-96.7846 35.3875,-96.7587 35.3834,-96.7325 35.3819,-96.6625 35.3819,-96.5717 35.3811,-96.485 35.3814,-96.4278 35.3847,-96.385 35.3941,-96.3463 35.4054,-96.3035 35.4164,-96.2486 35.4247,-96.191 35.4274,-96.0988 35.4296,-96.0112 35.4309,-95.9677 35.4306)
+LINESTRING(-97.4742 35.4732,-97.4772 35.4729,-97.4801 35.4726,-97.4831 35.4723,-97.4861 35.472,-97.4911 35.4532,-97.4933 35.4324,-97.4943 35.4115,-97.4956 35.3922)
+LINESTRING(-94.2232 35.5244,-94.2165 35.5256,-94.2106 35.527,-94.2051 35.5284,-94.1996 35.5297,-94.1933 35.5307,-94.1827 35.5332,-94.1739 35.5344,-94.1651 35.5346,-94.1539 35.5337,-94.1448 35.5375,-94.1372 35.5386,-94.1304 35.539,-94.1236 35.5406,-94.0745 35.5598,-94.0441 35.5681,-94.0102 35.5694,-93.9507 35.5677,-93.9408 35.5688,-93.9267 35.5715,-93.9114 35.5738,-93.8977 35.574,-93.8885 35.5687,-93.872 35.5679,-93.848 35.5666,-93.825 35.5638,-93.8114 35.5585,-93.7852 35.5567,-93.749 35.5508,-93.7117 35.5443,-93.6821 35.5409,-93.6269 35.5402,-93.5991 35.5383,-93.5723 35.5333,-93.5587 35.53,-93.5316 35.5238,-93.5183 35.5204,-93.5013 35.5146,-93.4877 35.5091,-93.4727 35.5055,-93.4517 35.505,-93.4369 35.5041,-93.4199 35.5012,-93.4058 35.4981,-93.3995 35.4966,-93.3486 35.4787,-93.3086 35.4522,-93.2766 35.4263,-93.2497 35.41,-93.2406 35.4074,-93.2306 35.4059,-93.2206 35.4047,-93.2116 35.4031,-93.1899 35.3978,-93.1664 35.3916,-93.143 35.3848,-93.1221 35.3779,-93.0923 35.3597,-93.0577 35.3314,-93.0246 35.3043,-92.
9992 35.2901,-92.9813 35.2845,-92.9611 35.2765,-92.9408 35.2698,-92.9227 35.2678,-92.8985 35.2687,-92.8702 35.2673,-92.8439 35.263,-92.8256 35.2552,-92.8035 35.2379,-92.7812 35.2225,-92.7566 35.2097,-92.7276 35.2006,-92.7174 35.1992,-92.6962 35.1981,-92.6861 35.1966,-92.677 35.1936,-92.6693 35.1897,-92.6609 35.1863,-92.6493 35.1843,-92.6261 35.1849,-92.6018 35.1877,-92.5777 35.1894,-92.5549 35.1872,-92.5254 35.1763,-92.505 35.1632,-92.4919 35.1518,-92.4843 35.1462,-92.4669 35.1432,-92.4488 35.1413,-92.4311 35.1384,-92.4093 35.1185)
+LINESTRING(-117.564 33.8778,-117.514 33.8897,-117.465 33.908,-117.42 33.9312,-117.378 33.9577,-117.378 33.9607,-117.378 33.9637,-117.379 33.9666,-117.379 33.9696,-117.36 33.9886,-117.334 34.0157,-117.31 34.0432)
+LINESTRING(-117.973 33.8566,-117.943 33.8544,-117.914 33.8522,-117.886 33.8494,-117.856 33.8455,-117.852 33.8468,-117.848 33.8481,-117.844 33.8494,-117.839 33.8507,-117.836 33.8492,-117.833 33.8475,-117.83 33.8454,-117.827 33.8432,-117.809 33.8507,-117.792 33.8518,-117.775 33.8551,-117.752 33.8694,-117.744 33.8697,-117.735 33.8687,-117.726 33.8667,-117.719 33.8639,-117.714 33.8644,-117.708 33.8656,-117.702 33.8674,-117.697 33.8699,-117.691 33.8683,-117.684 33.8671,-117.676 33.8666,-117.67 33.8672,-117.648 33.8752,-117.619 33.8793,-117.589 33.88,-117.564 33.8778)
+LINESTRING(-118.092 33.7836,-118.092 33.7867,-118.091 33.7899,-118.09 33.7931,-118.089 33.7963,-118.087 33.7985,-118.085 33.8007,-118.082 33.803,-118.08 33.8052,-118.082 33.8281,-118.095 33.8633,-118.104 33.9039,-118.094 33.9427)
+LINESTRING(-118.466 34.1598,-118.467 34.1476,-118.47 34.1347,-118.474 34.1222,-118.48 34.1109,-118.469 34.0804,-118.451 34.0508,-118.429 34.0229,-118.405 33.9975,-118.396 33.9887,-118.385 33.9796,-118.374 33.9702,-118.367 33.9607,-118.366 33.945,-118.365 33.9292,-118.366 33.9133,-118.366 33.8975,-118.359 33.8897,-118.351 33.8808,-118.342 33.8725,-118.333 33.8663,-118.307 33.858,-118.291 33.8578,-118.274 33.852,-118.247 33.8267,-118.231 33.8256,-118.214 33.8255,-118.198 33.823,-118.185 33.8147,-118.163 33.8121,-118.135 33.8056,-118.109 33.7958,-118.092 33.7836)
+LINESTRING(-105.923 35.6298,-105.928 35.6329,-105.935 35.6357,-105.943 35.6371,-105.95 35.6363,-105.99 35.6222,-106.028 35.6062,-106.063 35.5876,-106.098 35.5655,-106.111 35.5561,-106.125 35.5461,-106.139 35.5366,-106.154 35.5288,-106.172 35.5236,-106.193 35.5209,-106.214 35.5175,-106.234 35.5101,-106.243 35.5045,-106.251 35.498,-106.259 35.4915,-106.268 35.4855,-106.371 35.4139,-106.46 35.3269,-106.532 35.2245,-106.588 35.107)
+LINESTRING(-83.0005 34.4993,-83.0062 34.4978,-83.021 34.492,-83.03 34.4854,-83.0488 34.4779,-83.0677 34.4709,-83.0867 34.4638,-83.1054 34.4563,-83.1439 34.4378,-83.181 34.4174,-83.2179 34.3968,-83.2561 34.3779,-83.2831 34.3667,-83.3112 34.3555,-83.3385 34.3433,-83.3628 34.329,-83.3876 34.3113,-83.4123 34.2933,-83.4368 34.275,-83.4608 34.2564,-83.4912 34.2363,-83.5249 34.2191,-83.5598 34.2033,-83.5937 34.1872,-83.6136 34.1752,-83.6323 34.162,-83.6512 34.149,-83.6716 34.1377,-83.6963 34.1301,-83.7226 34.1263,-83.7505 34.1218,-83.7801 34.112,-83.7978 34.105,-83.8162 34.0996,-83.8351 34.0952,-83.8542 34.0915,-83.8992 34.0812,-83.9454 34.0677,-83.9904 34.0516,-84.0315 34.0337)
+LINESTRING(-83.7964 34.2753,-83.8007 34.2557,-83.811 34.241,-83.8243 34.2275,-83.84 34.2128,-83.8566 34.1976,-83.872 34.1849,-83.8879 34.1727,-83.9062 34.159,-83.9258 34.1451,-83.9435 34.1332,-83.9603 34.1206,-83.9771 34.1049,-83.9862 34.0939,-83.9933 34.0835,-84.0002 34.0729,-84.0092 34.0616,-84.0155 34.055,-84.0213 34.0493,-84.0267 34.0433,-84.0315 34.0337)
+LINESTRING(-89.8351 34.9703,-89.8319 34.9678,-89.8291 34.9646,-89.8262 34.9612,-89.8228 34.9582,-89.8147 34.9512,-89.8074 34.9433,-89.8001 34.9357,-89.792 34.9294,-89.7764 34.9203,-89.762 34.9121,-89.7481 34.9029,-89.7338 34.8911,-89.7274 34.8877,-89.7149 34.8823,-89.7018 34.8771,-89.6936 34.8747,-89.6829 34.8757,-89.6713 34.871,-89.6604 34.8645,-89.6522 34.8596,-89.6092 34.8429,-89.5648 34.8285,-89.5205 34.8135,-89.4778 34.7953,-89.4619 34.7724,-89.4453 34.7495,-89.4251 34.7289,-89.3984 34.7132)
+LINESTRING(-108.741 35.5018,-108.698 35.5078,-108.655 35.5111,-108.615 35.5118,-108.582 35.5099,-108.559 35.5048,-108.535 35.4961,-108.511 35.4867,-108.488 35.4792,-108.476 35.4767,-108.464 35.4746,-108.452 35.472,-108.44 35.468,-108.378 35.4417,-108.335 35.4263,-108.289 35.4143,-108.219 35.3983,-108.166 35.3906,-108.099 35.379,-108.038 35.3623,-108.004 35.3409,-107.998 35.3304,-107.994 35.3208,-107.992 35.3106,-107.99 35.2993,-107.991 35.2825,-107.994 35.2676,-107.997 35.2528,-107.997 35.2359,-107.994 35.2223,-107.986 35.2114,-107.975 35.2013,-107.963 35.1906,-107.946 35.1745,-107.929 35.1583,-107.914 35.143,-107.896 35.1254,-107.87 35.1,-107.845 35.0799,-107.815 35.0648,-107.777 35.0543,-107.762 35.046,-107.748 35.0398,-107.732 35.0362,-107.715 35.0358,-107.69 35.045,-107.671 35.0636,-107.653 35.0849,-107.632 35.102,-107.623 35.1051,-107.614 35.1061,-107.604 35.1061,-107.594 35.1064,-107.572 35.1078,-107.551 35.1075,-107.532 35.1037,-107.513 35.0947,-107.5 35.0772,-107.493 35.0538,-107.487 35.0301,-107.47
4 35.0119,-107.448 34.9993,-107.419 34.9964,-107.386 35.001,-107.35 35.0112,-107.34 35.0022,-107.332 34.997,-107.324 34.9948,-107.311 34.995,-107.285 34.9968,-107.26 34.9986,-107.234 35.0004,-107.209 35.0022,-107.185 34.9999,-107.165 34.9925,-107.145 34.9851,-107.122 34.9827,-107.095 34.9885,-107.073 34.9988,-107.05 35.0097,-107.023 35.0175,-107.011 35.022,-106.999 35.0271,-106.987 35.032,-106.975 35.036,-106.935 35.0439,-106.862 35.0572,-106.811 35.0662,-106.76 35.0753,-106.743 35.087,-106.726 35.0986,-106.708 35.1103,-106.691 35.122,-106.665 35.1235,-106.638 35.1215,-106.612 35.1159,-106.588 35.107)
+LINESTRING(-98.3309 35.5347,-98.3761 35.5298,-98.4278 35.5294,-98.4799 35.531,-98.5265 35.532,-98.5636 35.5341,-98.6046 35.5379,-98.645 35.5397,-98.6802 35.5357,-98.6834 35.5315,-98.6867 35.5274,-98.69 35.5232,-98.6932 35.519,-98.7129 35.519,-98.7306 35.5213,-98.7481 35.5239,-98.7672 35.5251,-98.7927 35.5245,-98.8172 35.5231,-98.8415 35.5208,-98.8667 35.5175,-98.8766 35.5167,-98.8871 35.5166,-98.8976 35.5163,-98.9074 35.5148,-98.9159 35.5118,-98.9242 35.5078,-98.9324 35.5038,-98.9407 35.5008,-98.9513 35.4989,-98.962 35.4982,-98.9727 35.4978,-98.9831 35.4967,-98.9944 35.4935,-99.0057 35.4891,-99.0172 35.4849,-99.0288 35.4822,-99.0539 35.4805,-99.0794 35.4799,-99.1046 35.4782,-99.1286 35.473,-99.1584 35.4546,-99.1897 35.4372,-99.2228 35.4255,-99.2579 35.4242,-99.2625 35.4263,-99.267 35.4283,-99.2715 35.4303,-99.276 35.4324,-99.2857 35.4309,-99.3062 35.4275,-99.3293 35.4239,-99.3471 35.4217,-99.367 35.4151,-99.3847 35.4023,-99.4053 35.3897,-99.4338 35.3838,-99.4513 35.3835,-99.4688 35.3832,-99.4862 35.3829,-99
.5037 35.3826,-99.5179 35.3805,-99.5314 35.3754,-99.544 35.3685,-99.5556 35.3612,-99.5664 35.3544,-99.5771 35.3476,-99.5877 35.3406,-99.5975 35.3331,-99.6109 35.3148,-99.618 35.2939,-99.6273 35.274,-99.6471 35.2584,-99.7091 35.254,-99.747 35.2437,-99.7773 35.2333,-99.8168 35.2288,-99.841 35.2289,-99.8651 35.2291,-99.8893 35.2292,-99.9134 35.2293,-99.997 35.2287,-100.001 35.2287)
+LINESTRING(-100.001 35.2287,-100.08 35.2275,-100.164 35.2275,-100.249 35.2309)
+LINESTRING(-103.042 35.1827,-103.026 35.184,-102.994 35.1867,-102.975 35.1899,-102.94 35.2021,-102.905 35.2142,-102.87 35.2263,-102.834 35.2384,-102.812 35.2455,-102.781 35.2553,-102.751 35.264,-102.735 35.2684,-102.689 35.2739,-102.637 35.2752,-102.585 35.2724,-102.537 35.2656,-102.518 35.2619,-102.499 35.2583,-102.48 35.2544,-102.461 35.2499,-102.455 35.2473,-102.448 35.2436,-102.442 35.2398,-102.435 35.2369,-102.423 35.2347,-102.414 35.2355,-102.405 35.237,-102.396 35.2372,-102.373 35.2334,-102.349 35.2282,-102.326 35.2226,-102.303 35.2177,-102.284 35.215,-102.266 35.2129,-102.247 35.2111,-102.229 35.2092,-102.194 35.2064,-102.171 35.2057,-102.145 35.2025,-102.102 35.1924,-102.065 35.1888,-102.001 35.1863,-101.939 35.1849,-101.904 35.1849,-101.888 35.1871,-101.872 35.1902,-101.856 35.1922,-101.839 35.1909)
+LINESTRING(-101.839 35.1909,-101.806 35.1901,-101.772 35.1883,-101.736 35.1872,-101.699 35.1903)
+LINESTRING(-117.973 33.8566,-117.946 33.8407,-117.929 33.8288,-117.914 33.8147,-117.893 33.7923,-117.889 33.791,-117.886 33.7897,-117.882 33.7884,-117.878 33.7871,-117.872 33.78,-117.866 33.7725,-117.861 33.7649,-117.855 33.7572,-117.849 33.7546,-117.843 33.7494,-117.838 33.7436,-117.832 33.7392,-117.819 33.7329,-117.805 33.7264,-117.793 33.7191,-117.781 33.7102,-117.773 33.701,-117.764 33.6895,-117.757 33.6775,-117.751 33.6666,-117.747 33.6608,-117.742 33.6551,-117.738 33.6493,-117.734 33.6436)
+LINESTRING(-118.092 33.7836,-118.091 33.7812,-118.09 33.7788,-118.088 33.7766,-118.086 33.7744,-118.074 33.7742,-118.062 33.7738,-118.05 33.7736,-118.038 33.7738,-118.013 33.7521,-117.979 33.7251,-117.943 33.7009,-117.912 33.6875,-117.902 33.6867,-117.892 33.6868,-117.882 33.6869,-117.873 33.6856,-117.844 33.6778,-117.815 33.6691,-117.787 33.6597,-117.759 33.6499,-117.753 33.6483,-117.746 33.6467,-117.74 33.6451,-117.734 33.6436)
+LINESTRING(-100.249 35.2309,-100.271 35.229,-100.293 35.2272,-100.315 35.2253,-100.337 35.2234,-100.39 35.2226,-100.453 35.2257,-100.518 35.229,-100.576 35.2288,-100.605 35.227,-100.635 35.2249,-100.664 35.2223,-100.693 35.2191,-100.701 35.2177,-100.708 35.2156,-100.716 35.2135,-100.724 35.2121,-100.734 35.2119,-100.746 35.2126,-100.758 35.2137,-100.769 35.2141,-100.779 35.208,-100.797 35.1979,-100.817 35.1885,-100.832 35.1842,-100.922 35.1838,-100.994 35.1884,-101.066 35.1972,-101.157 35.2091,-101.209 35.2114,-101.261 35.2089,-101.314 35.2064,-101.364 35.2087,-101.371 35.2108,-101.378 35.2141,-101.385 35.2172,-101.394 35.2184,-101.412 35.2177,-101.429 35.217,-101.447 35.2165,-101.464 35.2166,-101.49 35.2186,-101.518 35.2219,-101.546 35.2242,-101.572 35.2234,-101.593 35.2192,-101.602 35.2141,-101.608 35.2091,-101.617 35.2051,-101.636 35.2035,-101.661 35.203,-101.685 35.1999,-101.699 35.1903)
+LINESTRING(-80.548 33.3192,-80.5366 33.3432,-80.5252 33.3671,-80.5138 33.3911,-80.5024 33.415,-80.4928 33.4358,-80.4831 33.4566,-80.4715 33.4811,-80.4656 33.4927,-80.4326 33.5221,-80.4029 33.5477,-80.3709 33.5719,-80.3309 33.5966,-80.3221 33.6041,-80.3059 33.6188,-80.2901 33.6339,-80.282 33.6422,-80.2796 33.65,-80.278 33.6563,-80.2602 33.6808,-80.2387 33.7091,-80.2141 33.7344,-80.1872 33.7498,-80.1583 33.8015,-80.1038 33.881,-80.0477 33.9583,-80.0144 34.0035,-79.9883 34.0345,-79.9567 34.0663,-79.9238 34.0982,-79.8941 34.1293,-79.8821 34.1458,-79.8722 34.163,-79.8618 34.1801,-79.8481 34.1961)
+LINESTRING(-80.548 33.3192,-80.5901 33.3569,-80.6365 33.392,-80.6846 33.4257,-80.7316 33.4595,-80.7568 33.4812,-80.78 33.5061,-80.8024 33.5319,-80.8249 33.5565,-80.8403 33.5747,-80.8526 33.5938,-80.8629 33.6138,-80.8727 33.6348,-80.8859 33.6599,-80.9015 33.6847,-80.9178 33.7094,-80.9332 33.7336,-80.9479 33.7516,-80.9616 33.7604,-80.9746 33.7665,-80.9868 33.7763,-81.0036 33.8007,-81.0164 33.8271,-81.027 33.8542,-81.0371 33.8809,-81.0435 33.8924,-81.051 33.9042,-81.0597 33.9146,-81.0698 33.9218,-81.0703 33.9268,-81.085 33.9432,-81.0966 33.9589,-81.1042 33.9759,-81.107 33.9963,-81.1073 34.0039,-81.1071 34.0122,-81.1048 34.02,-81.0987 34.0263,-81.1037 34.0317,-81.1092 34.0368)
+LINESTRING(-106.588 35.107,-106.547 35.0907,-106.504 35.0734,-106.459 35.0637,-106.416 35.0702,-106.413 35.0723,-106.411 35.0745,-106.408 35.0767,-106.406 35.0788,-106.4 35.079,-106.394 35.0791,-106.388 35.0792,-106.382 35.0794,-106.368 35.0887,-106.353 35.0967,-106.338 35.1052,-106.325 35.1163,-106.314 35.115,-106.304 35.111,-106.295 35.1057,-106.286 35.101,-106.23 35.0785,-106.156 35.0483,-106.085 35.0204,-106.037 35.0051,-105.985 35.0037,-105.883 35.0035,-105.798 35.0037,-105.713 35.0038,-105.711 35.0053,-105.708 35.0068,-105.706 35.0082,-105.703 35.0097,-105.693 35.0093,-105.683 35.009,-105.672 35.0086,-105.662 35.0082)
+LINESTRING(-103.701 35.1577,-103.697 35.1596,-103.686 35.1659,-103.675 35.1724,-103.63 35.1734,-103.585 35.176,-103.54 35.1794,-103.495 35.1828,-103.489 35.1776,-103.484 35.1703,-103.475 35.1617,-103.458 35.1529,-103.429 35.1416,-103.399 35.1303,-103.37 35.1189,-103.34 35.1076,-103.334 35.1061,-103.327 35.1059,-103.32 35.1064,-103.313 35.1073,-103.265 35.1172,-103.218 35.1314,-103.171 35.1476,-103.125 35.1637,-103.115 35.1674,-103.104 35.1719,-103.093 35.176,-103.083 35.1787,-103.059 35.1814,-103.042 35.1827)
+LINESTRING(-81.1092 34.0368,-81.1259 34.0286,-81.1518 34.0142,-81.1769 33.9993,-81.1912 33.9898,-81.1958 33.9852,-81.2002 33.9803,-81.2047 33.9756,-81.2391 33.9536,-81.2701 33.9394,-81.3013 33.9258,-81.3315 33.9104,-81.381 33.8755,-81.4262 33.8354,-81.471 33.7946,-81.5186 33.7574,-81.5475 33.7373,-81.5775 33.716,-81.6081 33.6957,-81.639 33.6781,-81.6546 33.6719,-81.6714 33.6666,-81.688 33.6612,-81.7027 33.6541,-81.7116 33.6489,-81.7205 33.6444,-81.73 33.6407,-81.7406 33.638,-81.7498 33.636,-81.759 33.6338,-81.7682 33.6316,-81.7775 33.6295,-81.7849 33.6286,-81.7925 33.6281,-81.8001 33.6277,-81.8073 33.6266,-81.8286 33.6173,-81.8693 33.5978,-81.9112 33.5773,-81.9361 33.5647,-81.9428 33.5577,-81.9491 33.55,-81.9826 33.5395,-82.0103 33.5293,-82.0129 33.5281)
+LINESTRING(-92.2328 34.7808,-92.1875 34.7814,-92.1431 34.7845,-92.0988 34.7884,-92.0538 34.7914,-92.0438 34.7931,-92.0342 34.7962,-92.0247 34.7993,-92.0152 34.801,-91.9811 34.8033,-91.9419 34.8059,-91.9027 34.8072,-91.8685 34.8059,-91.843 34.803,-91.8184 34.8003,-91.7935 34.7985,-91.7672 34.7985,-91.7529 34.7995,-91.7387 34.8008,-91.7246 34.8019,-91.7101 34.8022,-91.703 34.8015,-91.6961 34.802,-91.684 34.8066,-91.6726 34.8119,-91.6608 34.8163,-91.6479 34.8182,-91.6142 34.8184,-91.5806 34.8186,-91.5367 34.8192,-91.5135 34.8204,-91.491 34.8275,-91.4689 34.8354,-91.4462 34.8424,-91.422 34.8468,-91.4109 34.8472,-91.3992 34.8467,-91.3875 34.846,-91.3761 34.8457,-91.3524 34.8487,-91.328 34.8559,-91.3044 34.8649,-91.2829 34.8733,-91.2369 34.8985,-91.2011 34.9088,-91.1652 34.9152,-91.1186 34.9285,-91.1078 34.9296,-91.0967 34.9301,-91.0596 34.9401,-91.0229 34.9523,-90.9863 34.9644,-90.9492 34.9743,-90.9417 34.9754,-90.934 34.976,-90.9263 34.9766,-90.9189 34.9777,-90.8858 34.9862,-90.8536 34.9964,-90.8221 35.0069,-90
.7916 35.0162,-90.7711 35.0183,-90.7504 35.0164,-90.7323 35.0136,-90.7198 35.0131,-90.6774 35.0382,-90.645 35.0587,-90.6147 35.0756,-90.5786 35.0896,-90.5608 35.0955,-90.5424 35.1018,-90.5238 35.1077,-90.5057 35.1123,-90.4716 35.1215,-90.4387 35.1324,-90.4099 35.1413,-90.3884 35.1443,-90.3518 35.1438,-90.2998 35.1469,-90.2428 35.1557,-90.1916 35.1726)
+LINESTRING(-92.2328 34.7808,-92.2157 34.8014,-92.2069 34.8116,-92.1977 34.8213,-92.191 34.8263,-92.1836 34.83,-92.1758 34.8332,-92.168 34.8368,-92.1501 34.8488,-92.1259 34.8679,-92.1026 34.8884,-92.0875 34.9045,-92.085 34.9107,-92.0829 34.9198,-92.0802 34.9358,-92.0718 34.944,-92.041 34.9712,-92.0222 34.9836,-92.0047 34.9932,-91.9782 35.0117,-91.9707 35.0195,-91.9644 35.0289,-91.9581 35.0385,-91.9512 35.0466,-91.9355 35.0586,-91.9177 35.0696,-91.8993 35.0803,-91.8821 35.0911,-91.8209 35.1346,-91.7732 35.1724,-91.7303 35.2115,-91.6836 35.2591,-91.6599 35.2833,-91.6428 35.2972,-91.6235 35.3076,-91.5932 35.3211,-91.5695 35.3196,-91.5577 35.3191,-91.5458 35.3191,-91.4921 35.3715,-91.4602 35.4018,-91.4431 35.4171,-91.3766 35.4514,-91.3325 35.4675,-91.2972 35.4898,-91.2569 35.5425,-91.2468 35.5831)
+LINESTRING(-92.4093 35.1185,-92.4051 35.1143,-92.4009 35.108,-92.3976 35.1014,-92.394 35.094,-92.3871 35.0813,-92.3818 35.0696,-92.3789 35.0576,-92.3787 35.044,-92.3797 35.0338,-92.3807 35.0237,-92.3817 35.0136,-92.3827 35.0035,-92.3825 34.9986,-92.3814 34.9943,-92.3802 34.99,-92.38 34.9851,-92.3817 34.968,-92.3834 34.951,-92.3851 34.9339,-92.3868 34.9169,-92.3861 34.905,-92.3824 34.8947,-92.377 34.8846,-92.3713 34.8734,-92.3644 34.8618,-92.3561 34.853,-92.3468 34.8447,-92.3367 34.8347,-92.3172 34.821,-92.2946 34.8147,-92.2703 34.8097,-92.2459 34.7999,-92.2426 34.7951,-92.2394 34.7903,-92.2361 34.7856,-92.2328 34.7808)
+LINESTRING(-101.839 35.1909,-101.848 35.185,-101.856 35.1793,-101.863 35.1731,-101.87 35.1659,-101.876 35.1591,-101.881 35.1521,-101.887 35.1451,-101.891 35.1393,-101.892 35.1385,-101.893 35.1378,-101.91 35.1214,-101.926 35.0997,-101.937 35.0762,-101.94 35.0528)
+LINESTRING(-97.4956 35.3922,-97.514 35.3943,-97.5332 35.3951,-97.5525 35.3959,-97.5716 35.3977,-97.577 35.3787,-97.5891 35.3383,-97.6016 35.2979,-97.6082 35.2788,-97.6291 35.2687,-97.6646 35.2505,-97.6998 35.2319,-97.7196 35.2206,-97.7757 35.1805,-97.8343 35.1344,-97.8852 35.0838,-97.9181 35.0305,-97.9229 35.0287,-97.9277 35.027,-97.9325 35.0252,-97.9373 35.0234)
+LINESTRING(-104.664 34.9362,-104.658 34.9381,-104.652 34.9393,-104.645 34.9401,-104.639 34.9404,-104.615 34.9554,-104.57 34.9771,-104.522 34.9982,-104.491 35.0117,-104.482 35.0107,-104.469 35.0094,-104.456 35.0089,-104.447 35.0103,-104.397 35.0315,-104.345 35.0499,-104.29 35.0633,-104.234 35.0695,-104.214 35.0679,-104.196 35.0642,-104.178 35.062,-104.158 35.0647,-104.109 35.0803,-104.054 35.0979,-103.998 35.1133,-103.947 35.1225,-103.926 35.1223,-103.904 35.1193,-103.882 35.1154,-103.861 35.1128,-103.849 35.117,-103.839 35.1239,-103.829 35.1315,-103.819 35.1379,-103.795 35.1454,-103.771 35.1478,-103.746 35.1478,-103.72 35.1478,-103.709 35.1536,-103.701 35.1577)
+LINESTRING(-105.662 35.0082,-105.634 35.0063,-105.606 35.0044,-105.578 35.0025,-105.551 35.0006,-105.548 35.0024,-105.546 35.0042,-105.544 35.006,-105.542 35.0078,-105.512 35.0098,-105.48 35.0071,-105.448 35.0025,-105.416 34.9991,-105.353 34.9958,-105.29 34.9933,-105.227 34.991,-105.163 34.988,-105.066 34.9828,-104.97 34.9783,-104.873 34.9749,-104.775 34.9733,-104.747 34.9698,-104.727 34.9614,-104.71 34.9507,-104.691 34.9401,-104.684 34.9403,-104.677 34.9395,-104.67 34.9381,-104.664 34.9362)
+LINESTRING(-82.0129 33.5281,-82.0365 33.517,-82.0653 33.5006,-82.1106 33.487,-82.1686 33.4852,-82.2279 33.4898,-82.2773 33.4953,-82.2869 33.4958,-82.2966 33.4957,-82.3063 33.4958,-82.3158 33.4965,-82.3246 33.4984,-82.3338 33.5012,-82.343 33.5039,-82.3515 33.5053,-82.3889 33.5071,-82.4272 33.5088,-82.4654 33.5109,-82.5029 33.5138)
+LINESTRING(-84.3783 33.8074,-84.3676 33.8098,-84.3552 33.8142,-84.3419 33.8194,-84.3286 33.8241,-84.3247 33.8281,-84.3209 33.8322,-84.317 33.8362,-84.3132 33.8403,-84.2964 33.8472,-84.2785 33.8572,-84.2615 33.8681,-84.2474 33.8778,-84.2315 33.8893,-84.2144 33.9017,-84.1967 33.9139,-84.1784 33.9245,-84.1551 33.9373,-84.1318 33.951,-84.1085 33.9644,-84.085 33.9763,-84.0784 33.9933,-84.0656 34.0095,-84.0492 34.0234,-84.0315 34.0337)
+LINESTRING(-84.3783 33.8074,-84.3874 33.8191,-84.4036 33.8376,-84.4206 33.8569,-84.4319 33.8711,-84.4461 33.8904,-84.4611 33.9067,-84.4772 33.9222,-84.4949 33.9389,-84.4996 33.9456,-84.5021 33.9531,-84.5042 33.9605,-84.5076 33.9669,-84.5238 33.9834,-84.5415 33.9985,-84.5591 34.014,-84.5747 34.0312,-84.5847 34.047,-84.5945 34.0632,-84.6071 34.0782,-84.6258 34.09,-84.6495 34.0954,-84.6724 34.0938,-84.6951 34.0895,-84.7184 34.0869,-84.7262 34.0908,-84.7418 34.1087,-84.7525 34.1173,-84.7597 34.1236,-84.765 34.1342,-84.7718 34.1473,-84.7707 34.1687,-84.7658 34.1909,-84.7616 34.2062,-84.7455 34.2116,-84.7379 34.2142,-84.7352 34.2219,-84.7439 34.2354,-84.7631 34.2409,-84.7862 34.2452,-84.8065 34.2545,-84.8204 34.2705,-84.8285 34.2874,-84.8356 34.3043,-84.8465 34.3204,-84.8634 34.3361,-84.8843 34.3542,-84.9036 34.3723,-84.9155 34.3879,-84.9176 34.3953,-84.9184 34.404,-84.9185 34.4128,-84.9185 34.4205,-84.9167 34.45,-84.9129 34.4831,-84.9119 34.5155,-84.9182 34.5428,-84.9421 34.5695,-84.9623 34.6085,-84.9798 34.6466
,-84.9957 34.6705,-84.9981 34.7036,-84.9976 34.7364,-84.9972 34.7692,-85.0002 34.8022,-85.0065 34.8061,-85.0128 34.8101,-85.0133 34.8213,-85.0139 34.8324,-85.0152 34.844,-85.0178 34.8536,-85.0434 34.8781,-85.084 34.8952,-85.1229 34.9076,-85.1434 34.9182,-85.1488 34.9279,-85.1541 34.9375,-85.1725 34.9494,-85.1867 34.9673,-85.1976 34.9867)
+LINESTRING(-92.2328 34.7808,-92.2422 34.7631,-92.2515 34.7453,-92.2608 34.7276,-92.2701 34.7099)
+LINESTRING(-86.0739 34.02,-86.0756 34.0241,-86.0772 34.0282,-86.0536 34.0443,-86.0204 34.0669,-85.9925 34.0896,-85.9847 34.1057,-85.9864 34.1141,-85.9882 34.1224,-85.9899 34.1308,-85.9917 34.1392,-85.9763 34.1629,-85.9416 34.2048,-85.9038 34.248,-85.8796 34.2759,-85.8714 34.2869,-85.8638 34.2983,-85.8563 34.3097,-85.8481 34.3207,-85.838 34.3317,-85.8271 34.3423,-85.8162 34.353,-85.8065 34.3641,-85.8003 34.3735,-85.795 34.3837,-85.7898 34.3938,-85.7839 34.4035,-85.7651 34.4257,-85.7433 34.4472,-85.7209 34.4687,-85.7006 34.4906,-85.6942 34.5038,-85.6923 34.5184,-85.6906 34.5331,-85.6849 34.5468,-85.6763 34.5573,-85.6664 34.5675,-85.6561 34.5775,-85.6465 34.5875,-85.6362 34.6031,-85.6284 34.6205,-85.6202 34.6381,-85.6089 34.6544,-85.5952 34.6694,-85.5815 34.6845,-85.5677 34.6995,-85.554 34.7145,-85.554 34.7145)
+LINESTRING(-84.3783 33.8074,-84.3806 33.7984,-84.383 33.7893,-84.3853 33.7803,-84.3877 33.7712)
+LINESTRING(-95.5319 35.454,-95.5429 35.4415,-95.5491 35.4273,-95.5532 35.4123,-95.5581 35.3975,-95.5762 35.361,-95.5903 35.3331,-95.5978 35.3048,-95.596 35.2671,-95.6019 35.2606,-95.6157 35.2514,-95.6298 35.2421,-95.6364 35.2353,-95.6864 35.1809,-95.7212 35.1353,-95.7489 35.0813,-95.7776 35.0019,-95.7807 34.9663,-95.7867 34.9314,-95.7967 34.8974,-95.8118 34.8646)
+LINESTRING(-95.9677 35.4306,-95.9688 35.4261,-95.9698 35.4217,-95.9709 35.4166,-95.9712 35.4134,-95.97 35.4094,-95.9687 35.4055,-95.9675 35.4015,-95.9662 35.3975,-95.9612 35.3758,-95.9579 35.3531,-95.9549 35.3315,-95.9504 35.3134,-95.9432 35.2983,-95.9344 35.2836,-95.9261 35.2687,-95.9207 35.2531,-95.919 35.2366,-95.9191 35.2195,-95.919 35.2024,-95.9166 35.1863,-95.9115 35.173,-95.9046 35.16,-95.8976 35.147,-95.8923 35.1338,-95.8869 35.1093,-95.8843 35.0845,-95.8829 35.0597,-95.8811 35.035,-95.8802 35.0301,-95.8785 35.0249,-95.8768 35.0199,-95.875 35.0148,-95.8624 34.9842,-95.846 34.954,-95.8305 34.9235,-95.8202 34.892,-95.819 34.8849,-95.8178 34.8784,-95.8157 34.8718,-95.8118 34.8646)
+LINESTRING(-84.3877 33.7712,-84.3877 33.7398)
+LINESTRING(-84.4903 33.7636,-84.4715 33.7576,-84.4443 33.7484,-84.4144 33.7409,-84.3877 33.7398)
+LINESTRING(-117.137 33.4823,-117.132 33.5497,-117.149 33.6838,-117.169 33.7753,-117.199 33.857,-117.235 33.9457,-117.31 34.0432)
+LINESTRING(-117.564 33.8778,-117.564 33.872,-117.565 33.8662,-117.566 33.8604,-117.566 33.8546,-117.526 33.8369,-117.509 33.8165,-117.5 33.7963,-117.484 33.7791,-117.484 33.7749,-117.484 33.7707,-117.484 33.7665,-117.483 33.7623,-117.477 33.7626,-117.471 33.7629,-117.465 33.7633,-117.458 33.7636,-117.44 33.7495,-117.417 33.741,-117.394 33.7342,-117.372 33.7252,-117.333 33.6965,-117.3 33.6621,-117.27 33.6255,-117.24 33.5899,-117.227 33.5777,-117.212 33.5664,-117.196 33.5555,-117.181 33.5446,-117.17 33.5322,-117.157 33.5146,-117.146 33.4965,-117.137 33.4823)
+LINESTRING(-89.1189 34.5588,-89.1082 34.549,-89.0894 34.5373,-89.069 34.5266,-89.0536 34.5197,-89.0376 34.4975,-89.0229 34.484,-89.0045 34.4741,-88.9774 34.4627,-88.9587 34.4423,-88.9252 34.4136,-88.8897 34.3868,-88.865 34.3721,-88.8552 34.3595,-88.8345 34.3437,-88.8124 34.3277,-88.798 34.3142,-88.7946 34.3133,-88.7913 34.3123,-88.788 34.3114,-88.7847 34.3104,-88.7796 34.3122,-88.7619 34.3044,-88.7432 34.2976,-88.7244 34.2908,-88.7061 34.2832)
+LINESTRING(-88.7061 34.2832,-88.6631 34.284,-88.5896 34.2831,-88.5143 34.2756,-88.4659 34.2567,-88.3883 34.2502,-88.274 34.2322,-88.1864 34.213)
+LINESTRING(-84.3877 33.7398,-84.3684 33.7357,-84.3446 33.7281,-84.3231 33.7203,-84.3111 33.7153,-84.2978 33.7111,-84.2856 33.7114,-84.2734 33.7138,-84.2603 33.7163,-84.2385 33.716,-84.2155 33.7117,-84.1923 33.7064,-84.1701 33.7031,-84.1563 33.7032,-84.1425 33.7043,-84.1287 33.7055,-84.115 33.706,-84.109 33.7043,-84.0968 33.7005,-84.0868 33.6973,-84.0767 33.6941,-84.0734 33.6896,-84.068 33.6829,-84.0625 33.6767,-84.0588 33.6733,-84.0537 33.6713,-84.0479 33.67,-84.0421 33.6688,-84.0366 33.6676,-84.0207 33.6614,-84.0061 33.6531,-83.9923 33.6439,-83.9788 33.6349,-83.9735 33.6329,-83.9662 33.6316,-83.9588 33.6306,-83.9529 33.6296,-83.9453 33.627,-83.938 33.6236,-83.9308 33.6201,-83.9235 33.6176,-83.9122 33.6148,-83.901 33.612,-83.8896 33.6095,-83.8782 33.6075,-83.845 33.6132,-83.7894 33.6149,-83.7333 33.6142,-83.6991 33.6124,-83.6852 33.6102,-83.6717 33.6072,-83.6583 33.6037,-83.6449 33.6,-83.6101 33.5903,-83.5492 33.5738,-83.4893 33.5581,-83.4578 33.5513,-83.442 33.5516,-83.4261 33.5518,-83.4103 33.5521,-83.394
5 33.5524,-83.3606 33.5493,-83.3331 33.5417,-83.3103 33.534,-83.2903 33.5304,-83.2608 33.5323,-83.2274 33.5367,-83.194 33.5416,-83.1647 33.5452,-83.1401 33.5467,-83.0985 33.5486,-83.058 33.5498,-83.0369 33.5494,-83.0179 33.5437,-82.9984 33.5379,-82.9786 33.5331,-82.9587 33.5303,-82.9296 33.5336,-82.8838 33.525,-82.8402 33.5129,-82.8173 33.5056,-82.8037 33.5031,-82.7887 33.5022,-82.7733 33.5015,-82.7584 33.4996,-82.7422 33.4962,-82.7259 33.4927,-82.7097 33.4893,-82.6935 33.4858,-82.6591 33.4873,-82.6048 33.4961,-82.5472 33.5067,-82.5029 33.5138)
+LINESTRING(-88.1864 34.213,-88.1563 34.2064,-88.0682 34.1765,-88.0581 34.1499,-88.0403 34.1281,-88.0161 34.1106,-87.9867 34.0967)
+LINESTRING(-79.9432 32.795,-79.9489 32.7997,-79.9528 32.8121,-79.9583 32.824,-79.9662 32.8354,-79.9742 32.844,-79.9813 32.8452,-79.9884 32.8464,-79.9929 32.8514,-79.9937 32.8573,-79.998 32.8617,-80.0031 32.8663,-80.0085 32.8706,-80.0137 32.8739,-80.0235 32.8971,-80.0357 32.919,-80.0504 32.9399,-80.0673 32.9604,-80.0678 32.9668,-80.0723 32.976,-80.0731 32.9809,-80.0789 32.9878,-80.0853 32.9924,-80.1092 33.0108,-80.1289 33.0274,-80.1484 33.044,-80.1685 33.06,-80.2131 33.0878,-80.2653 33.1143,-80.3145 33.1385,-80.3505 33.1595,-80.3695 33.1756,-80.3883 33.1938,-80.4074 33.2115,-80.4273 33.2259,-80.4345 33.2289,-80.442 33.2312,-80.4495 33.234,-80.4563 33.2383,-80.4642 33.246,-80.4715 33.2544,-80.4787 33.2628,-80.4863 33.2707,-80.5015 33.2831,-80.5173 33.2942,-80.5331 33.3056,-80.548 33.3192)
+LINESTRING(-97.9373 35.0234,-97.9589 35.0026,-97.9942 34.969,-98.0292 34.9367,-98.0498 34.9195,-98.0817 34.9012,-98.1136 34.883,-98.1454 34.8647,-98.1773 34.8464,-98.1932 34.837,-98.2098 34.8271,-98.2268 34.8179,-98.2437 34.8105,-98.2611 34.8062,-98.2694 34.8063,-98.2812 34.802,-98.3089 34.7846,-98.3313 34.7703)
+LINESTRING(-84.4903 33.7636,-84.5251 33.7715,-84.5593 33.7766,-84.5934 33.7773,-84.628 33.7722,-84.6676 33.76,-84.7157 33.7431,-84.7621 33.7275,-84.7964 33.7192,-84.8152 33.7181,-84.8351 33.7181,-84.8552 33.7186,-84.8743 33.7189,-84.9121 33.7195,-84.9493 33.7205,-84.9864 33.72,-85.0244 33.7159,-85.0377 33.7129,-85.0503 33.7088,-85.0628 33.7042,-85.0753 33.6995,-85.1014 33.692,-85.1284 33.6875,-85.1559 33.6851,-85.1836 33.6839,-85.225 33.6836,-85.2678 33.6837,-85.3104 33.6816,-85.3426 33.6759)
+LINESTRING(-117.734 33.6436,-117.718 33.6286,-117.701 33.6161,-117.683 33.604,-117.668 33.5907,-117.666 33.5784,-117.668 33.5623,-117.672 33.5456,-117.671 33.5316,-117.662 33.5194,-117.649 33.5132,-117.639 33.5066,-117.637 33.4929,-117.635 33.4879,-117.633 33.4828,-117.63 33.4778,-117.628 33.4728,-117.612 33.4554,-117.59 33.4347,-117.567 33.4154,-117.548 33.4018,-117.529 33.3908,-117.509 33.3807,-117.49 33.3701,-117.47 33.3577,-117.467 33.3554,-117.463 33.353,-117.46 33.3507,-117.456 33.3484,-117.443 33.3264,-117.416 33.2933,-117.385 33.2601,-117.362 33.2379,-117.361 33.2342,-117.36 33.2306,-117.359 33.2269,-117.359 33.2232,-117.348 33.2167,-117.342 33.2052,-117.337 33.1921,-117.332 33.1807)
+LINESTRING(-117.295 34.0635,-117.271 34.0636,-117.247 34.066,-117.224 34.0681,-117.199 34.0675,-117.179 34.0578,-117.167 34.0491,-117.157 34.0414,-117.147 34.0347,-117.132 34.0291,-117.107 34.0208,-117.083 34.0129,-117.069 34.0089,-117.063 34.0012,-117.058 33.9932,-117.053 33.9852,-117.047 33.9776,-117.036 33.9685,-117.013 33.9531,-116.989 33.9381,-116.976 33.9301,-116.951 33.9313,-116.927 33.9303,-116.903 33.9285,-116.879 33.9275,-116.864 33.9284,-116.849 33.9307,-116.833 33.9334,-116.818 33.9352,-116.81 33.9292,-116.802 33.9225,-116.774 33.9227,-116.747 33.9251,-116.719 33.9276,-116.692 33.9281,-116.669 33.9259,-116.645 33.9218,-116.622 33.9172,-116.6 33.9131,-116.581 33.911,-116.559 33.909,-116.539 33.9053,-116.522 33.8984,-116.515 33.8934,-116.51 33.8878,-116.504 33.8822,-116.498 33.8773,-116.451 33.8477,-116.388 33.8099,-116.323 33.7755,-116.272 33.7561,-116.243 33.7462,-116.226 33.7403,-116.212 33.7324,-116.192 33.7165,-116.168 33.7134,-116.146 33.7068,-116.124 33.6999,-116.102 33.6957,-116.096 33.696
5,-116.09 33.6986,-116.083 33.7005,-116.073 33.7003,-116.047 33.6951,-116.02 33.6887,-115.992 33.6822,-115.964 33.677,-115.821 33.6615,-115.699 33.6617,-115.575 33.6765,-115.427 33.7048,-115.336 33.7027,-115.221 33.6769,-115.109 33.6426,-115.024 33.6152,-114.961 33.606,-114.879 33.6047,-114.796 33.607,-114.726 33.6087,-114.681 33.6086,-114.635 33.6083,-114.589 33.6074)
+LINESTRING(-114.589 33.6074,-114.545 33.6055,-114.538 33.6048,-114.537 33.6047)
+LINESTRING(-114.537 33.6047,-114.531 33.6038,-114.525 33.6028,-114.518 33.6025,-114.498 33.607,-114.461 33.6168,-114.424 33.6273,-114.401 33.6337,-114.393 33.6361,-114.386 33.6395,-114.368 33.6455,-114.351 33.6469,-114.335 33.6466,-114.319 33.6472,-114.299 33.6498,-114.28 33.653,-114.261 33.6564,-114.241 33.6594,-114.235 33.6602,-114.229 33.6611,-114.222 33.662,-114.216 33.6629)
+LINESTRING(-114.216 33.6629,-114.187 33.6668,-114.153 33.6732,-114.12 33.6783,-114.095 33.6783,-114.094 33.679,-114.093 33.6797,-114.092 33.6804,-114.091 33.6811,-114.084 33.6807,-114.076 33.6803,-114.068 33.6793,-114.063 33.6775,-114.062 33.6778,-114.06 33.678,-114.051 33.6736,-114.041 33.6695,-114.031 33.6657,-114.02 33.6624)
+LINESTRING(-85.3426 33.6759,-85.3508 33.6745,-85.3717 33.6685,-85.3988 33.6607,-85.4256 33.6538,-85.4456 33.6505,-85.4582 33.6528,-85.4726 33.6583,-85.487 33.6638,-85.4996 33.6657,-85.5232 33.6606,-85.5464 33.6517,-85.5694 33.6427,-85.5926 33.6374,-85.5975 33.6375,-85.6026 33.6383,-85.6077 33.6391,-85.6125 33.6393,-85.6306 33.6362,-85.6468 33.6308,-85.6628 33.6248,-85.6803 33.6202,-85.7171 33.6244,-85.7546 33.6176,-85.7921 33.6085,-85.8292 33.606)
+LINESTRING(-117.137 33.4823,-117.133 33.4568,-117.146 33.4315,-117.163 33.4065,-117.174 33.382,-117.161 33.3625,-117.157 33.3519,-117.157 33.3402,-117.156 33.3175,-117.15 33.3101,-117.147 33.2996,-117.145 33.2885,-117.145 33.2795,-117.149 33.2761,-117.152 33.2716,-117.155 33.2667,-117.156 33.2624,-117.148 33.2422,-117.129 33.2064,-117.107 33.17,-117.092 33.1482,-117.093 33.1432,-117.094 33.1382,-117.092 33.1337,-117.09 33.1292,-117.088 33.1247,-117.085 33.1203)
+LINESTRING(-117.332 33.1807,-117.312 33.1835,-117.291 33.1876,-117.27 33.1918,-117.25 33.1946,-117.23 33.1806,-117.206 33.1556,-117.178 33.1353,-117.145 33.1352,-117.132 33.1317,-117.12 33.1287,-117.108 33.1249,-117.096 33.1191,-117.093 33.1194,-117.091 33.1197,-117.088 33.12,-117.085 33.1203)
+LINESTRING(-97.4956 35.3922,-97.4948 35.3708,-97.4949 35.3493,-97.4948 35.3278,-97.4939 35.3064,-97.489 35.2786,-97.4813 35.252,-97.4754 35.225,-97.4758 35.1959,-97.4773 35.1876,-97.478 35.1807,-97.4771 35.1737,-97.4736 35.1654,-97.4694 35.1507,-97.4596 35.137,-97.4489 35.1256,-97.4422 35.1177,-97.4416 35.0927,-97.4366 35.0832,-97.4254 35.0709,-97.413 35.0583,-97.4043 35.0477,-97.3968 35.0245,-97.395 34.9981,-97.3924 34.9696,-97.3824 34.9402,-97.3 34.7865,-97.2912 34.7634,-97.2874 34.7409,-97.2853 34.7198,-97.2818 34.7008,-97.2661 34.6488,-97.2483 34.5988,-97.2232 34.5512,-97.1862 34.5062)
+LINESTRING(-92.2701 34.7099,-92.2696 34.6988,-92.2678 34.6881,-92.2656 34.6775,-92.2638 34.6667,-92.2641 34.6585,-92.2659 34.6506,-92.2679 34.6427,-92.2687 34.6349,-92.2685 34.6258,-92.2684 34.6167,-92.2682 34.6077,-92.268 34.5986,-92.2616 34.5658,-92.2468 34.5437,-92.228 34.5232,-92.2097 34.4951,-92.2079 34.4736,-92.1992 34.4422,-92.1886 34.4106,-92.181 34.3884,-92.1783 34.3768,-92.1762 34.3646,-92.1738 34.3527,-92.1698 34.3416,-92.1534 34.3169,-92.1336 34.294,-92.1148 34.2717,-92.1012 34.249,-92.0725 34.2203,-92.0272 34.2011,-91.9854 34.1904,-91.967 34.187)
+LINESTRING(-80.883 32.6304,-80.8827 32.6354,-80.8824 32.6404,-80.8821 32.6454,-80.8819 32.6504,-80.8775 32.6803,-80.8675 32.7053,-80.8512 32.7276,-80.8277 32.7496,-80.814 32.7613,-80.7992 32.7731,-80.7832 32.7835,-80.766 32.791,-80.7567 32.8127,-80.7473 32.8344,-80.738 32.8561,-80.7286 32.8779,-80.7196 32.8934,-80.7076 32.9093,-80.6955 32.926,-80.6857 32.9438,-80.6717 32.9871,-80.6623 33.0316,-80.6537 33.0762,-80.6423 33.1198,-80.6281 33.156,-80.6103 33.1925,-80.5912 33.2285,-80.5731 33.2634,-80.5665 33.2772,-80.5603 33.2912,-80.5542 33.3052,-80.548 33.3192)
+LINESTRING(-86.0739 34.02,-86.0815 34.0032,-86.1017 33.9834,-86.1254 33.9657,-86.1435 33.9548,-86.159 33.9484,-86.1761 33.9422,-86.1926 33.9351,-86.2061 33.9263,-86.2361 33.9019,-86.2669 33.8793,-86.2981 33.8573,-86.3292 33.8342,-86.3519 33.8159,-86.3763 33.7975,-86.4032 33.7825,-86.4338 33.7743,-86.4443 33.7733,-86.4553 33.7715,-86.4654 33.7679,-86.473 33.7616,-86.4895 33.7425,-86.5074 33.7251,-86.5245 33.7075,-86.5385 33.6875,-86.5442 33.6794,-86.5519 33.6725,-86.5663 33.6647,-86.5777 33.6618,-86.5873 33.6605,-86.5966 33.6575,-86.6129 33.6459,-86.6285 33.6303,-86.6428 33.6138,-86.6549 33.5992,-86.6671 33.5898,-86.6801 33.5858,-86.6931 33.5838,-86.7056 33.58,-86.7188 33.5724,-86.7292 33.5645,-86.7387 33.5561,-86.749 33.5472)
+LINESTRING(-86.749 33.5472,-86.7383 33.5433,-86.7257 33.5374,-86.7135 33.5323,-86.7038 33.5309,-86.6763 33.5255,-86.6522 33.5286,-86.6297 33.5362,-86.6069 33.5442,-86.5996 33.5458,-86.5929 33.5468,-86.5866 33.5482,-86.5805 33.551,-86.5539 33.5634,-86.5212 33.5736,-86.4872 33.5829,-86.4565 33.5927,-86.4323 33.6007,-86.4112 33.605,-86.3895 33.6063,-86.3633 33.6053,-86.3606 33.6046,-86.3578 33.6039,-86.3326 33.6077,-86.2945 33.6097,-86.2571 33.6098,-86.2344 33.6081,-86.2196 33.6038,-86.2061 33.5994,-86.1923 33.5956,-86.1765 33.5934,-86.1603 33.5927,-86.1439 33.5924,-86.1276 33.5919,-86.1115 33.5904,-86.078 33.5859,-86.0417 33.5818,-86.0055 33.5794,-85.9721 33.5799,-85.9499 33.5807,-85.9253 33.5808,-85.9012 33.5818,-85.8801 33.5849,-85.867 33.5896,-85.8552 33.5957,-85.8431 33.6017,-85.8292 33.606)
+LINESTRING(-86.826 33.522,-86.8068 33.5283,-86.7875 33.5346,-86.7683 33.5409,-86.749 33.5472)
+LINESTRING(-86.826 33.522,-86.8252 33.5309,-86.8249 33.5379,-86.8263 33.5449,-86.8311 33.5538,-86.8308 33.5564,-86.83 33.5588,-86.8245 33.5833,-86.8264 33.6235,-86.8315 33.6663,-86.8356 33.6984,-86.8347 33.708,-86.8313 33.7167,-86.8274 33.7253,-86.8247 33.7343,-86.825 33.742,-86.8272 33.7499,-86.8297 33.7577,-86.8309 33.7652,-86.8294 33.7836,-86.8261 33.803,-86.8236 33.8224,-86.8246 33.8407,-86.8334 33.8627,-86.847 33.8824,-86.8598 33.8989,-86.8664 33.9115,-86.8691 33.9395,-86.867 33.9554,-86.8632 33.9687,-86.8608 33.9888,-86.8625 33.9994,-86.8666 34.0102,-86.8705 34.0204,-86.8719 34.0293,-86.8698 34.0561,-86.8684 34.0818,-86.8685 34.1076,-86.8708 34.1347,-86.8736 34.1541,-86.8766 34.1737,-86.8783 34.1933,-86.8778 34.2127,-86.8773 34.2167,-86.8769 34.2208,-86.8772 34.2248,-86.8784 34.2288,-86.8868 34.2454,-86.8952 34.2621,-86.904 34.2786,-86.9132 34.295,-86.894 34.3347,-86.8859 34.3659,-86.8858 34.3998,-86.8908 34.4476,-86.891 34.4617,-86.8895 34.4761,-86.8881 34.4906,-86.8883 34.5049,-86.8911 34.518,-86.89
57 34.5354,-86.8999 34.5527,-86.9015 34.5652,-86.8998 34.5811,-86.8981 34.5949,-86.8982 34.6097,-86.9022 34.6285,-86.8899 34.6293)
+LINESTRING(-86.8491 33.5214,-86.8434 33.5216,-86.8376 33.5217,-86.8318 33.5218,-86.826 33.522)
+LINESTRING(-106.588 35.107,-106.593 35.0908,-106.596 35.0748,-106.599 35.059,-106.606 35.0438,-106.624 35.0287,-106.645 35.0199,-106.669 35.0127,-106.692 35.0023,-106.716 34.9848,-106.731 34.9645,-106.74 34.9412,-106.748 34.9149,-106.754 34.8905,-106.76 34.8661,-106.766 34.8431,-106.773 34.8175,-106.781 34.783,-106.787 34.752,-106.794 34.7213,-106.807 34.6876,-106.814 34.6804,-106.817 34.6733,-106.819 34.6659,-106.817 34.6583,-106.815 34.6517,-106.812 34.6451,-106.811 34.6375,-106.814 34.6155,-106.827 34.5975,-106.841 34.5795,-106.852 34.5578,-106.873 34.4888,-106.89 34.4281,-106.908 34.3678,-106.932 34.2997,-106.944 34.2653,-106.954 34.2343,-106.959 34.2028,-106.959 34.167,-106.956 34.1422,-106.953 34.1209,-106.95 34.0998,-106.947 34.0756,-106.947 34.0562,-106.947 34.0392,-106.947 34.0221,-106.945 34.0037)
+LINESTRING(-111.663 35.1739,-111.671 35.1636,-111.68 35.1511,-111.684 35.1381,-111.681 35.1263,-111.682 35.1191,-111.684 35.1118,-111.688 35.0808,-111.688 35.0402,-111.686 34.9991,-111.683 34.9665,-111.655 34.9444,-111.645 34.923,-111.642 34.8997,-111.633 34.8724,-111.626 34.8673,-111.619 34.8623,-111.61 34.8569,-111.603 34.8499,-111.602 34.8412,-111.607 34.8314,-111.61 34.8177,-111.604 34.8097,-111.597 34.803,-111.589 34.7982,-111.59 34.7891,-111.602 34.7874,-111.61 34.7862,-111.641 34.7715,-111.666 34.7567,-111.69 34.7409,-111.714 34.7241,-111.722 34.7164,-111.731 34.7079,-111.74 34.6997,-111.749 34.6928,-111.756 34.6893,-111.763 34.6863,-111.77 34.6833,-111.778 34.6802,-111.786 34.6726,-111.792 34.6647,-111.804 34.6583,-111.815 34.6521,-111.834 34.6361,-111.852 34.6189,-111.868 34.6011,-111.884 34.5831,-111.896 34.5719,-111.902 34.5666,-111.909 34.5613,-111.91 34.5514,-111.91 34.5413,-111.923 34.5384,-111.935 34.5358,-111.948 34.534,-111.962 34.5335,-111.97 34.5336,-111.979 34.5318,-111.99 34.5199,-112 3
4.508,-112.011 34.4961,-112.021 34.4841,-112.028 34.4717,-112.033 34.4579,-112.038 34.4441,-112.047 34.4314,-112.055 34.428,-112.063 34.4246,-112.074 34.4054,-112.091 34.3896,-112.107 34.3786,-112.114 34.3737,-112.116 34.3529,-112.12 34.3324,-112.125 34.3116,-112.126 34.2896,-112.111 34.2701,-112.105 34.2512,-112.106 34.231,-112.114 34.2074,-112.121 34.2049,-112.127 34.2024,-112.134 34.1858,-112.139 34.1677,-112.144 34.1493,-112.152 34.1314,-112.149 34.1163,-112.146 34.1009,-112.143 34.0854,-112.139 34.0705,-112.145 34.0582,-112.148 34.0448,-112.148 34.0309,-112.149 34.0173,-112.143 34.0102,-112.141 34.0035,-112.14 33.9967,-112.139 33.9892,-112.133 33.9593,-112.136 33.9441,-112.142 33.93,-112.148 33.9032,-112.148 33.8862,-112.148 33.8625,-112.146 33.8394,-112.144 33.8241,-112.14 33.8175,-112.137 33.811,-112.131 33.7794,-112.125 33.7478,-112.119 33.7162,-112.113 33.6846,-112.113 33.6556,-112.117 33.6221,-112.115 33.591,-112.098 33.5695,-112.098 33.5539,-112.098 33.5383,-112.098 33.5226,-112.099 33.507)
+LINESTRING(-117.332 33.1807,-117.317 33.1582,-117.302 33.1335,-117.288 33.1082,-117.277 33.084,-117.274 33.0745,-117.272 33.0643,-117.27 33.0542,-117.267 33.0452,-117.26 33.0326,-117.251 33.0209,-117.244 33.0088,-117.238 32.995,-117.235 32.9794,-117.23 32.9566,-117.225 32.9353,-117.222 32.9241,-117.212 32.9052,-117.201 32.8847,-117.189 32.8639,-117.176 32.8439,-117.166 32.8261,-117.156 32.8051,-117.144 32.7853,-117.131 32.771)
+LINESTRING(-117.238 32.7545,-117.211 32.7578,-117.184 32.7608,-117.157 32.7648,-117.131 32.771)
+LINESTRING(-112.099 33.507,-112.2 33.5039,-112.3 33.4986,-112.4 33.4934,-112.502 33.4908,-112.524 33.482,-112.553 33.4622,-112.583 33.4411,-112.607 33.4283)
+LINESTRING(-114.02 33.6624,-113.979 33.6544,-113.937 33.6504,-113.895 33.6483,-113.853 33.6456,-113.797 33.6398,-113.741 33.6326,-113.685 33.6248,-113.629 33.6172,-113.56 33.6068,-113.491 33.595,-113.423 33.5824,-113.354 33.5698,-113.246 33.5514,-113.138 33.5336,-113.03 33.5151,-112.923 33.4945,-112.844 33.478,-112.765 33.4615,-112.686 33.4449,-112.607 33.4283)
+LINESTRING(-84.4903 33.7636,-84.4961 33.7446,-84.4974 33.7331,-84.4955 33.7224,-84.4914 33.7058,-84.4905 33.6938,-84.4918 33.6804,-84.4938 33.6669,-84.4954 33.6548,-84.4934 33.6439,-84.4885 33.633,-84.4853 33.6204,-84.4884 33.604,-84.5038 33.5919,-84.52 33.5797,-84.5368 33.5682,-84.5542 33.5581,-84.5693 33.5511,-84.5846 33.5448,-84.5996 33.538,-84.6136 33.5295,-84.6325 33.5122,-84.6492 33.4919,-84.6652 33.4708,-84.6819 33.4512,-84.7126 33.4256,-84.7327 33.4133,-84.7466 33.3961,-84.7584 33.3558,-84.7664 33.3369,-84.7788 33.3188,-84.7917 33.3002,-84.8007 33.2796,-84.8034 33.2638,-84.8052 33.2483,-84.8084 33.2332,-84.8157 33.2184,-84.8267 33.2057,-84.84 33.1938,-84.8542 33.1825,-84.8678 33.1716,-84.8804 33.1532,-84.8935 33.1253,-84.9126 33.0931,-84.943 33.062)
+LINESTRING(-83.6784 32.8492,-83.6885 32.8611,-83.6971 32.8722,-83.7143 32.8962,-83.7228 32.9077,-83.7311 32.9165,-83.7414 32.9233,-83.756 32.9288,-83.7678 32.9323,-83.7768 32.9357,-83.7848 32.9404,-83.7936 32.9475,-83.8021 32.9513,-83.8161 32.9553,-83.8292 32.9585,-83.8728 32.9945,-83.9145 33.0257,-83.9539 33.0565,-83.9852 33.0902,-84.0187 33.1228,-84.0422 33.1544,-84.0672 33.1869,-84.0912 33.2199,-84.1113 33.2531,-84.1216 33.2823,-84.1287 33.3149,-84.1374 33.3467,-84.1526 33.3737,-84.1702 33.393,-84.1883 33.412,-84.2055 33.4315,-84.2208 33.4521,-84.2314 33.4753,-84.2341 33.4906,-84.243 33.5071,-84.2725 33.5339,-84.3008 33.5515,-84.3343 33.5678,-84.3632 33.5804,-84.3778 33.5871,-84.3866 33.5961,-84.3921 33.6063,-84.3962 33.6171,-84.4006 33.6278,-84.396 33.6435,-84.3943 33.6642,-84.3967 33.6841,-84.4046 33.6973,-84.4011 33.7068,-84.3989 33.7165,-84.3911 33.7273,-84.3877 33.7398)
+LINESTRING(-83.6561 32.8119,-83.6554 32.823,-83.6607 32.8316,-83.6691 32.8396,-83.6784 32.8492)
+LINESTRING(-88.2787 33.4915,-88.2929 33.4942,-88.3096 33.493,-88.3262 33.4917,-88.3399 33.4938,-88.3737 33.5076,-88.4007 33.5134,-88.4279 33.5105,-88.4625 33.4977,-88.4651 33.4948,-88.4672 33.4915,-88.4691 33.4881,-88.4705 33.4847,-88.5068 33.4797,-88.5436 33.479,-88.5807 33.4802,-88.6175 33.4811,-88.6201 33.4832,-88.6227 33.4854,-88.6253 33.4876,-88.6278 33.4898,-88.6361 33.4899,-88.6443 33.49,-88.6526 33.4901,-88.6609 33.4902)
+LINESTRING(-98.3313 34.7703,-98.3544 34.7561,-98.3771 34.7415,-98.3978 34.7261,-98.3981 34.7141,-98.3942 34.7019,-98.3887 34.6898,-98.3842 34.6783,-98.3831 34.6645,-98.3854 34.6491,-98.3884 34.6333,-98.3897 34.6184,-98.3835 34.6152,-98.3774 34.6119,-98.3775 34.5965,-98.3897 34.5769,-98.4045 34.5575,-98.4126 34.5426,-98.4132 34.5303,-98.4119 34.5186,-98.4097 34.5072,-98.4074 34.4954,-98.4047 34.4672,-98.4049 34.4376,-98.406 34.408,-98.4066 34.3795,-98.4087 34.351,-98.415 34.3153,-98.4249 34.2804,-98.4376 34.2542,-98.4569 34.2298,-98.477 34.2059,-98.4955 34.1812,-98.5099 34.1541,-98.5121 34.1462,-98.5131 34.1382,-98.5139 34.1302,-98.5156 34.1223,-98.5248 34.1163,-98.5334 34.1097,-98.5384 34.1058)
+LINESTRING(-112.099 33.507,-112.101 33.4398,-112.06 33.4394,-112.018 33.4332,-111.986 33.4229,-111.972 33.4103,-111.971 33.4023,-111.97 33.3915,-111.968 33.3799)
+LINESTRING(-95.8118 34.8646,-95.8077 34.8586,-95.8021 34.8531,-95.7965 34.8477,-95.7926 34.8418,-95.7854 34.8223,-95.779 34.8019,-95.7727 34.7815,-95.7662 34.7615,-95.7631 34.7475,-95.7616 34.7328,-95.7598 34.7183,-95.7557 34.7049,-95.7476 34.6911,-95.7381 34.6779,-95.7299 34.6643,-95.7256 34.6495,-95.7308 34.62,-95.7456 34.5927,-95.7606 34.5701,-95.7659 34.5547,-95.7606 34.5435,-95.752 34.5336,-95.7422 34.5244,-95.7336 34.5147,-95.7325 34.5103,-95.7313 34.5059,-95.7276 34.4929,-95.7233 34.4791,-95.7195 34.4654,-95.7172 34.4525,-95.7174 34.425,-95.72 34.3868,-95.7229 34.3528,-95.7243 34.3381,-95.7114 34.317,-95.6928 34.2976,-95.673 34.2788,-95.6564 34.2593,-95.6404 34.2359,-95.6177 34.2029,-95.5965 34.1711,-95.585 34.1513,-95.583 34.143,-95.5822 34.1341,-95.5812 34.1253,-95.5787 34.117,-95.5681 34.0981,-95.553 34.0734,-95.5388 34.0486,-95.531 34.0296,-95.5306 34.0239,-95.5308 34.0177,-95.5307 34.0116,-95.5293 34.0059,-95.526 34.0012,-95.5206 33.9958,-95.5146 33.9907,-95.5096 33.9871)
+LINESTRING(-88.6609 33.4902,-88.6779 33.4906,-88.7044 33.4911,-88.7307 33.4905,-88.7473 33.488,-88.7516 33.483,-88.7574 33.4776,-88.761 33.4745,-88.7646 33.4714,-88.7735 33.47,-88.7824 33.4686,-88.7915 33.4676,-88.8005 33.4672)
+LINESTRING(-111.491 33.3815,-111.61 33.3811,-111.729 33.3806,-111.848 33.3801,-111.968 33.3799)
+LINESTRING(-90.0058 34.9964,-90.0056 34.9885,-90.0012 34.9648,-89.9953 34.9416,-89.99 34.9164,-89.9886 34.9028,-89.9883 34.8889,-89.9883 34.8751,-89.9877 34.8614,-89.9835 34.8476,-89.9755 34.8331,-89.9673 34.8186,-89.9625 34.8047,-89.9611 34.7735,-89.9626 34.7421,-89.9638 34.7107,-89.9615 34.6798,-89.9502 34.6233,-89.936 34.5671,-89.9194 34.5114,-89.9009 34.4562,-89.898 34.4151,-89.9068 34.3634,-89.9183 34.3104,-89.9239 34.2654,-89.9238 34.2472,-89.9236 34.2291,-89.9235 34.2109,-89.9234 34.1927,-89.9217 34.1779,-89.9176 34.1632,-89.9122 34.1487,-89.9068 34.1345,-89.8977 34.1068,-89.8906 34.079,-89.8849 34.051,-89.8804 34.0227,-89.8798 34.0141,-89.8798 34.005,-89.8796 33.9961,-89.8782 33.9877,-89.875 33.9799,-89.8708 33.9722,-89.867 33.9645,-89.8649 33.9563,-89.8646 33.947,-89.8649 33.9377,-89.8648 33.9284,-89.8634 33.919,-89.8546 33.8938,-89.8446 33.8708,-89.8372 33.8472,-89.8359 33.8199,-89.8367 33.8113,-89.8376 33.8028,-89.8384 33.7943,-89.8393 33.7858,-89.8362 33.7379,-89.8216 33.6898,-89.8014 33.6423,-8
9.7812 33.5965,-89.7759 33.5751,-89.7706 33.543,-89.766 33.5103,-89.7628 33.4868)
+LINESTRING(-81.1521 32.213,-81.1427 32.2187,-81.1198 32.2349,-81.101 32.2534,-81.0824 32.2716,-81.0602 32.2869,-81.0429 32.3401,-81.0193 32.3876,-80.9939 32.4325,-80.9712 32.4778,-80.9705 32.4827,-80.9707 32.4888,-80.9711 32.4943,-80.9712 32.497,-80.9619 32.5171,-80.9524 32.5379,-80.9423 32.5584,-80.9309 32.5776,-80.92 32.5898,-80.907 32.6007,-80.8941 32.6132,-80.883 32.6304)
+LINESTRING(-117.071 32.5244,-117.079 32.5271,-117.092 32.5296,-117.105 32.5284,-117.107 32.5242,-117.107 32.521)
+LINESTRING(-117.131 32.771,-117.121 32.7459,-117.116 32.7338,-117.116 32.721,-117.122 32.6939,-117.117 32.687,-117.113 32.6801,-117.108 32.6732,-117.104 32.6661,-117.106 32.6566,-117.103 32.6469,-117.099 32.6374,-117.094 32.6286,-117.089 32.6052,-117.087 32.5861,-117.079 32.5696,-117.055 32.5539,-117.047 32.5505,-117.04 32.5471,-117.032 32.5435,-117.02 32.5292)
+LINESTRING(-115.568 32.7732,-115.551 32.7731,-115.534 32.7729,-115.517 32.7727,-115.5 32.7728,-115.465 32.774)
+LINESTRING(-98.5384 34.1058,-98.5419 34.103,-98.5506 34.0965,-98.5575 34.061,-98.5491 34.02,-98.5341 33.9789,-98.5213 33.943)
+LINESTRING(-116.875 32.5426,-116.855 32.5462,-116.83 32.5548,-116.806 32.5642,-116.786 32.5706,-116.783 32.5698,-116.78 32.569,-116.778 32.5683,-116.775 32.5675,-116.767 32.56,-116.749 32.5561,-116.738 32.555)
+LINESTRING(-86.8491 33.5214,-86.8707 33.5148,-86.8842 33.5101,-86.8972 33.504,-86.9167 33.4935,-86.9222 33.4804,-86.934 33.4691,-86.9477 33.4585,-86.9588 33.4473,-86.958 33.4425,-86.9571 33.4376,-86.9563 33.4327,-86.9554 33.4278,-86.9705 33.4132,-86.9815 33.398,-86.9914 33.3823,-87.0029 33.3662,-87.0127 33.3558,-87.0238 33.3461,-87.0353 33.3366,-87.046 33.3269,-87.0833 33.2914,-87.123 33.2588,-87.1671 33.231,-87.2174 33.2099,-87.2282 33.2053,-87.2383 33.1996,-87.2486 33.1942,-87.26 33.1905,-87.2764 33.1886,-87.2921 33.1888,-87.3075 33.1892,-87.3229 33.1881,-87.3446 33.1847,-87.3664 33.1813,-87.3927 33.1773,-87.4052 33.1758,-87.4117 33.1712,-87.4353 33.173,-87.4685 33.1744,-87.5011 33.1742,-87.523 33.1712)
+LINESTRING(-117.085 33.1203,-117.082 33.1142,-117.077 33.107,-117.072 33.1,-117.069 33.0944,-117.068 33.0716,-117.072 33.0386,-117.078 33.0054,-117.084 32.9818,-117.092 32.9641,-117.102 32.948,-117.111 32.931,-117.117 32.9101,-117.118 32.8942,-117.117 32.8762,-117.117 32.8588,-117.121 32.8446,-117.117 32.8329,-117.114 32.8133,-117.113 32.7923,-117.111 32.7765,-117.089 32.7781,-117.066 32.7756,-117.045 32.7728,-117.029 32.7734,-117.021 32.7696,-117.016 32.7713,-117.011 32.773,-117.006 32.7747,-117 32.7764,-116.996 32.782,-116.992 32.7876,-116.987 32.793,-116.983 32.7984,-116.968 32.8017,-116.952 32.8017,-116.936 32.8012,-116.924 32.803,-116.916 32.8091,-116.904 32.821,-116.892 32.8339,-116.882 32.843,-116.877 32.8438,-116.873 32.8446,-116.868 32.8486,-116.864 32.8526,-116.851 32.8539,-116.836 32.8552,-116.821 32.8553,-116.809 32.8532,-116.796 32.8416,-116.77 32.8342,-116.741 32.8306,-116.721 32.8305,-116.693 32.8349,-116.664 32.8377,-116.637 32.8347,-116.612 32.8215,-116.589 32.8203,-116.567 32.8187,-116.545
32.8165,-116.522 32.8137,-116.517 32.8123,-116.512 32.8101,-116.506 32.8081,-116.493 32.7913,-116.484 32.7691,-116.479 32.7462,-116.478 32.7282,-116.474 32.7229,-116.47 32.7175,-116.465 32.717,-116.46 32.7166,-116.455 32.7161,-116.449 32.7156,-116.432 32.7227,-116.41 32.7219,-116.388 32.7151,-116.375 32.704,-116.36 32.7027,-116.346 32.7015,-116.331 32.6995,-116.319 32.697,-116.31 32.6933,-116.303 32.6885,-116.295 32.6836,-116.287 32.6792,-116.266 32.671,-116.247 32.6657,-116.228 32.6619,-116.207 32.6583,-116.184 32.6506,-116.162 32.6405,-116.138 32.6341,-116.11 32.6376,-116.106 32.643,-116.103 32.6477,-116.1 32.6522,-116.098 32.6565,-116.095 32.6604,-116.096 32.6647,-116.099 32.6687,-116.101 32.6727,-116.103 32.6771,-116.098 32.6794,-116.093 32.6818,-116.091 32.686,-116.088 32.6898,-116.082 32.6969,-116.072 32.7007,-116.068 32.707,-116.068 32.7149,-116.067 32.7234,-116.062 32.725,-116.056 32.7267,-116.047 32.726,-116.038 32.7262,-116.029 32.7263,-116.02 32.7256,-115.979 32.7369,-115.902 32.7522,-115.824 32.
7659,-115.778 32.7726,-115.758 32.7736,-115.738 32.7737,-115.717 32.7733,-115.697 32.7731,-115.665 32.7732,-115.633 32.7732,-115.601 32.7732,-115.568 32.7732)
+LINESTRING(-83.6784 32.8492,-83.6648 32.8533,-83.6507 32.8548,-83.6366 32.8534,-83.6224 32.8492,-83.6081 32.8349,-83.5879 32.8178,-83.5692 32.8021,-83.5592 32.7922,-83.5542 32.7808,-83.5505 32.769,-83.547 32.7571,-83.542 32.7458,-83.5367 32.7353,-83.5302 32.7223,-83.5237 32.7099,-83.5177 32.7013,-83.4927 32.685,-83.4483 32.662,-83.4014 32.6392,-83.3686 32.6235,-83.3212 32.6027,-83.2728 32.5848,-83.2234 32.5688,-83.173 32.5539,-83.156 32.547,-83.1397 32.5382,-83.1232 32.5294,-83.1055 32.5225,-83.0839 32.5172,-83.0594 32.5121,-83.0345 32.5077,-83.012 32.5043,-82.992 32.5011,-82.9724 32.4972,-82.9529 32.4932,-82.9332 32.4897,-82.9039 32.4861,-82.8742 32.483,-82.8447 32.4793,-82.8158 32.4737,-82.787 32.4654,-82.7588 32.4558,-82.7307 32.4459,-82.7024 32.4365,-82.6916 32.4402,-82.6794 32.4435,-82.6669 32.4461,-82.6557 32.4473,-82.6326 32.4458,-82.6078 32.441,-82.5828 32.4352,-82.5591 32.431,-82.5375 32.4298,-82.5171 32.4303,-82.4968 32.4314,-82.476 32.4316,-82.4532 32.4293,-82.4307 32.425,-82.4083 32.4205,-82.385
9 32.4175,-82.3646 32.4159,-82.34 32.4126,-82.317 32.4058,-82.3009 32.3937,-82.2689 32.3868,-82.2337 32.3817,-82.1985 32.3779,-82.1664 32.3746,-82.1195 32.3721,-82.0765 32.3718,-82.034 32.3677,-81.9887 32.354,-81.9656 32.3438,-81.9295 32.3281,-81.8943 32.3135,-81.8738 32.3069)
+LINESTRING(-84.943 33.062,-84.9592 33.0426,-84.972 33.0168,-84.9838 32.9922,-84.9968 32.9766,-85.0143 32.9665,-85.0312 32.9565,-85.0478 32.9456,-85.0645 32.9329,-85.0774 32.9186,-85.0869 32.9029,-85.096 32.8871,-85.1077 32.8724,-85.1576 32.8301)
+LINESTRING(-98.5213 33.943,-98.5159 33.9388,-98.5141 33.931,-98.5115 33.9227,-98.5075 33.9151,-98.4978 33.9013)
+LINESTRING(-96.5001 33.8959,-96.5256 33.8733,-96.5348 33.8406,-96.5371 33.806)
+LINESTRING(-115.465 32.774,-115.464 32.6761,-115.464 32.6729,-115.458 32.6625)
+LINESTRING(-81.2487 32.0747,-81.2356 32.1263,-81.2192 32.1614,-81.1911 32.1892,-81.1521 32.213)
+LINESTRING(-81.2487 32.0747,-81.3064 32.0916,-81.3559 32.1134,-81.4025 32.1406,-81.4512 32.1738,-81.4587 32.1797,-81.466 32.1861,-81.4733 32.1924,-81.481 32.1984,-81.4888 32.2024,-81.4982 32.2057,-81.5081 32.2086,-81.5171 32.2116,-81.5369 32.2192,-81.5583 32.2262,-81.5804 32.2308,-81.6023 32.2314,-81.6111 32.2304,-81.6191 32.2293,-81.6272 32.2288,-81.6365 32.2295,-81.6506 32.2327,-81.6636 32.2372,-81.6763 32.2425,-81.6893 32.2479,-81.713 32.257,-81.7367 32.2655,-81.7605 32.2738,-81.7841 32.2823,-81.796 32.2869,-81.8082 32.2917,-81.8205 32.2963,-81.8327 32.3001,-81.8428 32.3018,-81.8534 32.3026,-81.8639 32.3039,-81.8738 32.3069)
+LINESTRING(-81.2487 32.0747,-81.2152 32.0661,-81.182 32.0602,-81.1464 32.0598,-81.1061 32.0673)
+LINESTRING(-115.465 32.774,-115.453 32.7744,-115.391 32.7768,-115.331 32.7776,-115.286 32.7746,-115.281 32.7724,-115.271 32.7679,-115.261 32.7632,-115.255 32.7602,-115.22 32.7491,-115.184 32.74,-115.148 32.7308,-115.113 32.7198,-115.107 32.7166,-115.101 32.7134,-115.093 32.7096,-115.089 32.7079,-115.06 32.7122,-115.032 32.7164,-115.002 32.7166,-114.973 32.7176,-114.955 32.7186,-114.941 32.7208,-114.927 32.7228,-114.913 32.7251,-114.893 32.7364,-114.864 32.751,-114.836 32.76,-114.817 32.7545,-114.793 32.7517,-114.759 32.7458,-114.726 32.7426,-114.703 32.7479,-114.7 32.7479,-114.698 32.7479,-114.695 32.7479,-114.692 32.7479,-114.678 32.7413,-114.658 32.7386,-114.637 32.7371,-114.62 32.7339,-114.612 32.7274,-114.612 32.7257)
+LINESTRING(-97.1862 34.5062,-97.1761 34.4837,-97.1614 34.4635,-97.1463 34.4437,-97.1352 34.4227,-97.1418 34.4089,-97.1523 34.3968,-97.163 34.3849,-97.1699 34.3714,-97.1722 34.349,-97.1707 34.3243,-97.1681 34.2993,-97.1671 34.2759,-97.1681 34.2255,-97.168 34.1752,-97.1672 34.125,-97.1663 34.0745,-97.1662 34.0548,-97.1663 34.0351,-97.1657 34.0155,-97.1636 33.9958,-97.1612 33.9814,-97.1585 33.9671,-97.1552 33.9528,-97.1513 33.9387,-97.1451 33.915,-97.1414 33.8921,-97.1402 33.87,-97.1413 33.8486,-97.1413 33.8406,-97.14 33.8315,-97.1383 33.8231,-97.1366 33.8147,-97.1405 33.802,-97.1424 33.7851,-97.142 33.7679,-97.1392 33.7543,-97.146 33.7442,-97.1517 33.7368,-97.1521 33.7364)
+LINESTRING(-114.612 32.7257,-114.609 32.7183,-114.608 32.7081,-114.605 32.6987)
+LINESTRING(-96.5371 33.806,-96.5374 33.8017,-96.5381 33.7636,-96.5385 33.7538,-96.5397 33.7454,-96.543 33.738,-96.5495 33.731,-96.5552 33.7275,-96.5613 33.7258,-96.568 33.7256,-96.5757 33.7267,-96.581 33.728,-96.584 33.729,-96.5862 33.7294,-96.5891 33.7288,-96.5929 33.7253,-96.5943 33.7198,-96.5944 33.7149,-96.5942 33.7127,-96.6082 33.6688)
+LINESTRING(-85.1576 32.8301,-85.1761 32.8144,-85.2403 32.7669,-85.2992 32.7151,-85.3521 32.6441)
+LINESTRING(-97.1521 33.7364,-97.1587 33.7301,-97.1695 33.7224,-97.1711 33.7081,-97.1701 33.691,-97.1661 33.6743,-97.1585 33.661,-97.1608 33.6543,-97.1621 33.6474,-97.1629 33.6403,-97.163 33.6392)
+LINESTRING(-84.9608 32.5443,-84.9655 32.5718,-84.9712 32.6081,-84.9756 32.6439,-84.9764 32.6703,-84.9868 32.6784,-84.9946 32.689,-85.0006 32.7006,-85.0056 32.7118,-85.0125 32.7294,-85.0153 32.7433,-85.0156 32.7572,-85.0151 32.7748,-85.0153 32.7841,-85.0158 32.7944,-85.0157 32.8047,-85.0139 32.8135,-85.0014 32.8323,-84.9831 32.8521,-84.9648 32.8801,-84.9522 32.9235,-84.95 32.9579,-84.9507 32.9928,-84.9499 33.0276,-84.943 33.062)
+LINESTRING(-92.2701 34.7099,-92.2822 34.6967,-92.291 34.6882,-92.3003 34.6818,-92.314 34.6747,-92.3239 34.6735,-92.3347 34.6725,-92.3456 34.672,-92.3556 34.6722,-92.3713 34.6666,-92.3864 34.6623,-92.4013 34.6579,-92.4163 34.6522,-92.4506 34.638,-92.4859 34.625,-92.5214 34.6121,-92.5561 34.5985,-92.5692 34.5904,-92.593 34.5745,-92.6167 34.5577,-92.6294 34.5472,-92.6401 34.5445,-92.6494 34.5418,-92.6591 34.5401,-92.6712 34.5402,-92.6805 34.5314,-92.6979 34.5127,-92.7161 34.4928,-92.7279 34.4808,-92.7445 34.4668,-92.7613 34.453,-92.7783 34.4396,-92.7955 34.4263,-92.8015 34.4205,-92.8067 34.414,-92.8122 34.4075,-92.8187 34.402,-92.8284 34.398,-92.8386 34.3937,-92.8462 34.3877,-92.853 34.3804,-92.86 34.3729,-92.8678 34.3662,-92.8811 34.3581,-92.8964 34.3498,-92.9112 34.3412,-92.9231 34.3322,-92.9312 34.3233,-92.9383 34.3139,-92.9451 34.3042,-92.9521 34.2947,-92.9779 34.2649,-93.0073 34.2361,-93.0393 34.2093,-93.0724 34.1855,-93.0784 34.1645,-93.0842 34.1453,-93.0916 34.1263,-93.1024 34.1061,-93.1125 34.0894,-93.
1227 34.0727,-93.1329 34.056,-93.143 34.0393,-93.2151 33.9682,-93.3421 33.8693,-93.4753 33.7747,-93.5667 33.7166,-93.5807 33.7078,-93.5945 33.6973,-93.6078 33.6864,-93.6205 33.6762,-93.6469 33.6611,-93.6817 33.647,-93.7183 33.6354,-93.7502 33.628,-93.7591 33.6274,-93.7685 33.6275,-93.7776 33.6264,-93.7859 33.6224,-93.8036 33.6007,-93.8173 33.5765,-93.8352 33.5578,-93.8653 33.5525,-93.9051 33.5435,-93.9383 33.5211,-93.9708 33.4952,-94.0083 33.4759,-94.0175 33.4738,-94.0273 33.4723,-94.0372 33.4709,-94.0445 33.4692)
+LINESTRING(-94.0445 33.4692,-94.0468 33.4687)
+LINESTRING(-114.605 32.6987,-114.603 32.6905,-114.602 32.6791,-114.6 32.6685,-114.596 32.6632,-114.566 32.658,-114.536 32.6529,-114.495 32.6461,-114.475 32.643,-114.458 32.6429,-114.439 32.6417,-114.42 32.6398,-114.404 32.6372,-114.392 32.6356,-114.38 32.6347,-114.368 32.634,-114.356 32.6332,-114.346 32.6349,-114.334 32.6397,-114.323 32.6446,-114.312 32.6468,-114.287 32.6442,-114.263 32.6392,-114.239 32.6348,-114.213 32.6339,-114.197 32.6347,-114.178 32.6355,-114.16 32.6365,-114.144 32.6384,-114.042 32.6582,-113.941 32.6815,-113.84 32.705,-113.738 32.7253,-113.728 32.7327,-113.709 32.7397,-113.689 32.7458,-113.674 32.7505,-113.628 32.7691,-113.581 32.7894,-113.533 32.8084,-113.485 32.8227,-113.413 32.8357,-113.333 32.8454,-113.253 32.8544,-113.178 32.8654,-113.124 32.8771,-113.07 32.8908,-113.016 32.9045,-112.962 32.9162,-112.908 32.9249,-112.853 32.9322,-112.799 32.9389,-112.745 32.946)
+LINESTRING(-94.0682 33.4548,-94.0624 33.4582,-94.0572 33.4617,-94.052 33.4652,-94.0468 33.4687)
+LINESTRING(-101.94 35.0528,-101.929 35.0402,-101.914 35.0231,-101.901 35.0059,-101.892 34.993,-101.866 34.9296,-101.856 34.8633,-101.852 34.7954,-101.846 34.7276,-101.835 34.6838,-101.817 34.6372,-101.797 34.5911,-101.777 34.5487,-101.774 34.5451,-101.772 34.5433,-101.77 34.5416,-101.773 34.5387,-101.775 34.5358,-101.778 34.5329,-101.781 34.53,-101.777 34.482,-101.768 34.4339,-101.756 34.3861,-101.745 34.3388,-101.738 34.3179,-101.729 34.2971,-101.719 34.2764,-101.71 34.2557,-101.71 34.2482,-101.712 34.241,-101.715 34.234,-101.716 34.227,-101.724 34.2207,-101.733 34.2139,-101.741 34.2068,-101.748 34.1993,-101.748 34.1829,-101.746 34.1661,-101.746 34.1495,-101.748 34.1338,-101.767 34.118,-101.787 34.1043,-101.808 34.0921,-101.83 34.0803,-101.836 34.0749,-101.841 34.0667,-101.844 34.0578,-101.845 34.0505,-101.84 33.9679,-101.825 33.8855,-101.809 33.8031,-101.801 33.7207,-101.8 33.7113,-101.797 33.7026,-101.795 33.6941,-101.793 33.6852,-101.794 33.6674,-101.798 33.6482,-101.803 33.6289,-101.806 33.611)
+LINESTRING(-84.9248 32.4051,-84.9294 32.444,-84.9432 32.485,-84.9568 32.5208,-84.9608 32.5443)
+LINESTRING(-111.968 33.3799,-111.969 33.3622,-111.972 33.3412,-111.974 33.3208,-111.972 33.3044,-111.914 33.2132,-111.82 33.0919,-111.732 32.9836,-111.693 32.9317,-111.691 32.904,-111.69 32.8759,-111.689 32.8481,-111.686 32.821)
+LINESTRING(-112.745 32.946,-112.726 32.9419,-112.707 32.938,-112.689 32.934,-112.671 32.9296,-112.649 32.9237,-112.626 32.9177,-112.603 32.9125,-112.58 32.9087,-112.57 32.9082,-112.559 32.9085,-112.549 32.9088,-112.539 32.9085,-112.504 32.8993,-112.458 32.8819,-112.407 32.8639,-112.359 32.8527,-112.209 32.8395,-112.059 32.8332,-111.908 32.8309,-111.757 32.8294,-111.753 32.8294,-111.749 32.8293,-111.745 32.8293,-111.741 32.8293,-111.735 32.833,-111.727 32.8357,-111.718 32.8372,-111.711 32.8375,-111.704 32.8333,-111.698 32.8292,-111.692 32.8251,-111.686 32.821)
+LINESTRING(-81.3826 31.7633,-81.3798 31.7736,-81.3785 31.7842,-81.3776 31.7948,-81.3758 31.8052,-81.3671 31.8296,-81.3542 31.8545,-81.3399 31.8791,-81.3269 31.9025,-81.3258 31.9146,-81.3299 31.9284,-81.3341 31.9422,-81.3334 31.9546,-81.3221 31.9696,-81.3055 31.9826,-81.2883 31.9952,-81.275 32.0089,-81.2669 32.0242,-81.2605 32.0414,-81.2547 32.0587,-81.2487 32.0747)
+LINESTRING(-94.9983 33.171,-94.9799 33.1768,-94.9616 33.1824,-94.9437 33.1886,-94.927 33.1961,-94.8917 33.2178,-94.8576 33.2424,-94.8232 33.2661,-94.7871 33.2851,-94.7592 33.2932,-94.7318 33.2976,-94.7032 33.3038,-94.6716 33.3176,-94.6477 33.3321,-94.6206 33.3501,-94.5953 33.3694,-94.5766 33.3879,-94.5736 33.3926,-94.5711 33.3978,-94.5687 33.403,-94.5658 33.4079,-94.5454 33.423,-94.5073 33.445,-94.4671 33.465,-94.4405 33.4743,-94.4281 33.4742,-94.4151 33.4728,-94.4019 33.4712,-94.389 33.4704,-94.3571 33.4706,-94.3254 33.4709,-94.2938 33.4717,-94.262 33.4733,-94.2193 33.4691,-94.1619 33.4587,-94.106 33.451,-94.0682 33.4548)
+LINESTRING(-85.3521 32.6441,-85.4088 32.6051,-85.5203 32.5689,-85.5947 32.5435,-85.6372 32.5004,-85.696 32.4531,-85.7827 32.4229,-85.8737 32.3899,-85.99 32.3669,-86.1429 32.3555,-86.2402 32.3284)
+LINESTRING(-86.2402 32.3284,-86.2636 32.3276,-86.2876 32.3268,-86.3116 32.3267,-86.3352 32.3281)
+LINESTRING(-86.826 33.522,-86.8199 33.5108,-86.8138 33.4997,-86.8175 33.4944,-86.8214 33.4892,-86.825 33.4839,-86.828 33.4783,-86.8272 33.4726,-86.8252 33.4662,-86.8223 33.4599,-86.8202 33.4498,-86.8218 33.4444,-86.8235 33.4391,-86.8251 33.4337,-86.8154 33.4242,-86.8066 33.4163,-86.7968 33.408,-86.787 33.3997,-86.7832 33.3798,-86.7808 33.3657,-86.78 33.3508,-86.7807 33.3287,-86.7846 33.3224,-86.7911 33.3094,-86.7963 33.2986,-86.8014 33.2877,-86.7981 33.274,-86.7981 33.2598,-86.8016 33.246,-86.8089 33.2336,-86.8032 33.2198,-86.7899 33.1944,-86.7764 33.1695,-86.7697 33.1577,-86.7582 33.148,-86.7515 33.1432,-86.7406 33.1197,-86.7345 33.0881,-86.7281 33.0547,-86.7217 33.0317,-86.6974 32.9892,-86.6685 32.9502,-86.6387 32.9126,-86.612 32.8748,-86.5993 32.8497,-86.5895 32.8235,-86.58 32.7975,-86.5682 32.7724,-86.5605 32.7602,-86.552 32.7482,-86.5434 32.7363,-86.5355 32.7241,-86.5129 32.6841,-86.4924 32.6437,-86.4738 32.6028,-86.4572 32.5609,-86.4506 32.5526,-86.4431 32.5454,-86.4373 32.5335,-86.4342 32.5275,-86.41
94 32.5136,-86.4092 32.5068,-86.3994 32.4995,-86.3902 32.4897,-86.3805 32.4751,-86.3713 32.4599,-86.3616 32.4451,-86.3501 32.4313,-86.3413 32.4179,-86.3315 32.3975,-86.3234 32.3777,-86.3198 32.366,-86.3237 32.3566,-86.3275 32.3471,-86.3313 32.3376,-86.3352 32.3281)
+LINESTRING(-97.1574 33.6391,-97.1632 33.6169,-97.1702 33.5992,-97.1802 33.5823,-97.1923 33.5638,-97.1957 33.5559,-97.1965 33.5485,-97.1966 33.5407,-97.1976 33.5319,-97.2006 33.5113,-97.2009 33.495,-97.2023 33.4791,-97.2086 33.4594,-97.2152 33.4356,-97.2164 33.4113,-97.2153 33.3863,-97.2148 33.3601,-97.2144 33.3426,-97.2106 33.311,-97.2093 33.2636,-97.2046 33.2347,-97.1957 33.2058,-97.1823 33.1762)
+LINESTRING(-88.4035 32.4497,-88.3918 32.4551,-88.3618 32.4766,-88.3122 32.5167,-88.2627 32.5587,-88.2332 32.5856,-88.2244 32.5979,-88.217 32.6121,-88.2098 32.6267,-88.2018 32.64,-88.1793 32.6676,-88.1548 32.6922,-88.1283 32.7155,-88.0997 32.7393,-88.0817 32.755,-88.0636 32.771,-88.0452 32.7866,-88.0257 32.8009,-87.998 32.8188,-87.9718 32.836,-87.9468 32.8543,-87.9228 32.8755,-87.9089 32.8871,-87.8952 32.8966,-87.8829 32.9048,-87.8737 32.9126,-87.8652 32.9228,-87.8569 32.9337,-87.8482 32.9443,-87.8383 32.9535,-87.8232 32.9637,-87.8066 32.9734,-87.7902 32.9835,-87.7756 32.9947,-87.7447 33.0234,-87.714 33.0525,-87.6842 33.0822,-87.6559 33.1125,-87.6293 33.1366,-87.5984 33.1543,-87.563 33.1657,-87.523 33.1712)
+LINESTRING(-88.4457 32.4262,-88.4325 32.4355,-88.4196 32.4424,-88.4062 32.4485,-88.4035 32.4497)
+LINESTRING(-88.6344 32.3844,-88.6325 32.3846,-88.6306 32.3848,-88.6066 32.3885,-88.5842 32.3944,-88.5622 32.4012,-88.5395 32.4074,-88.5229 32.4096,-88.5062 32.4096,-88.4896 32.4095,-88.4732 32.4111,-88.4653 32.4133,-88.458 32.4167,-88.4514 32.4211,-88.4457 32.4262)
+LINESTRING(-88.6344 32.3844,-88.6451 32.3818,-88.6525 32.3775,-88.659 32.372,-88.6667 32.3661,-88.6927 32.3512,-88.7058 32.3479,-88.7182 32.3489)
+LINESTRING(-88.7182 32.3489,-88.7419 32.3469,-88.7479 32.3455,-88.7538 32.3437,-88.7598 32.3421,-88.7659 32.3413)
+LINESTRING(-81.3826 31.7633,-81.3866 31.7385,-81.3906 31.7137,-81.3946 31.6889,-81.3986 31.6641,-81.4071 31.6307,-81.4197 31.5976,-81.4335 31.5647,-81.4453 31.5319,-81.4493 31.5073,-81.4482 31.4831,-81.4451 31.4589,-81.4428 31.4342,-81.4448 31.4138,-81.4503 31.3924,-81.4571 31.3709,-81.4627 31.35,-81.4742 31.3232,-81.4833 31.2958,-81.4929 31.2687,-81.5054 31.2424,-81.5131 31.2312,-81.5222 31.2203,-81.5314 31.2092,-81.538 31.2)
+LINESTRING(-94.9983 33.171,-95.0195 33.1637,-95.0353 33.1586,-95.052 33.156,-95.0761 33.1561,-95.1499 33.1601,-95.224 33.1635,-95.2982 33.1648,-95.3721 33.1626,-95.3962 33.1597,-95.4201 33.155,-95.444 33.1504,-95.4684 33.1473,-95.4924 33.1471,-95.5171 33.1483,-95.5416 33.1482,-95.5651 33.1447,-95.5728 33.1383,-95.5792 33.1307,-95.5861 33.1231,-95.5952 33.1167,-95.6348 33.1204,-95.6744 33.1211,-95.7142 33.1215,-95.7544 33.1246,-95.8083 33.1289,-95.8641 33.1294,-95.9201 33.1283,-95.9746 33.128,-95.9987 33.1289,-96.0227 33.1303,-96.0468 33.1317,-96.0709 33.1322,-96.0772 33.1303,-96.0847 33.1257,-96.092 33.1204,-96.0975 33.1163,-96.0985 33.1095,-96.0997 33.1044,-96.1024 33.1,-96.1079 33.0952,-96.1392 33.0712,-96.1705 33.0462,-96.2022 33.0217,-96.2347 32.9993,-96.2575 32.9886,-96.2834 32.9808,-96.3097 32.9735,-96.3337 32.9642,-96.3454 32.9571,-96.3562 32.9485,-96.3667 32.9397,-96.3774 32.9315,-96.3931 32.9236,-96.4113 32.9179,-96.4303 32.9128,-96.4479 32.9068,-96.5051 32.8815,-96.5608 32.8552,-96.6159 32.828,-96
.6711 32.8001)
+LINESTRING(-96.7909 32.7935,-96.7834 32.8114,-96.7764 32.8307,-96.7708 32.8503,-96.7676 32.8689,-96.7672 32.8827,-96.7676 32.8964,-96.7676 32.9102,-96.7659 32.924,-96.749 32.9387,-96.7313 32.9633,-96.716 32.9896,-96.7061 33.0088,-96.7076 33.0166,-96.7083 33.0246,-96.708 33.0325,-96.7064 33.0403,-96.7007 33.0593,-96.6941 33.079,-96.6866 33.0984,-96.678 33.1164,-96.669 33.1286,-96.656 33.1429,-96.6441 33.1558,-96.6382 33.1635,-96.6358 33.1824,-96.6352 33.2055,-96.6336 33.2279,-96.6282 33.2447,-96.6173 33.2528,-96.6045 33.2607,-96.5914 33.2684,-96.5796 33.2761,-96.5697 33.2967,-96.5611 33.319,-96.555 33.3418,-96.5521 33.364,-96.5671 33.393,-96.5898 33.4371,-96.6105 33.4803,-96.6197 33.5062,-96.6145 33.5134,-96.6116 33.5219,-96.61 33.5309,-96.6089 33.5393,-96.6066 33.5513,-96.6042 33.5629,-96.6024 33.5745,-96.6019 33.5867,-96.6053 33.6094,-96.6106 33.6271,-96.6132 33.6451,-96.6082 33.6688)
+LINESTRING(-81.5498 31.1797,-81.5562 31.1677,-81.5642 31.1527,-81.5725 31.1378)
+LINESTRING(-96.7909 32.7935,-96.796 32.7823)
+LINESTRING(-97.1823 33.1762,-97.1548 33.1778,-97.1366 33.1747,-97.1194 33.1689,-97.1018 33.1597,-97.083 33.1404,-97.0764 33.1174,-97.0731 33.0919,-97.0643 33.0654,-97.0512 33.0473,-97.0349 33.034,-97.0161 33.0225,-96.995 33.0098,-96.9776 32.9996,-96.9615 32.9914,-96.9456 32.983,-96.9291 32.9724,-96.9031 32.9491,-96.8857 32.9245,-96.8742 32.8969,-96.866 32.865,-96.8614 32.8497,-96.8558 32.8363,-96.8507 32.8229,-96.8479 32.8074,-96.796 32.7823)
+LINESTRING(-96.6711 32.8001,-96.6916 32.7967,-96.7127 32.7927,-96.7339 32.7905,-96.7549 32.7925,-96.7598 32.7897,-96.7644 32.7866,-96.7689 32.7834,-96.7734 32.7803)
+LINESTRING(-96.7734 32.7803,-96.7761 32.7811,-96.7788 32.782,-96.7815 32.7829,-96.7842 32.7838,-96.7861 32.7861,-96.7879 32.7885,-96.7894 32.791,-96.7909 32.7935)
+LINESTRING(-83.53 31.4512,-83.5262 31.4646,-83.5199 31.4766,-83.5138 31.4886,-83.5106 31.5019,-83.5175 31.5281,-83.5358 31.5579,-83.5574 31.5866,-83.5742 31.6097,-83.5753 31.6174,-83.5756 31.6219,-83.5817 31.6328,-83.5881 31.6404,-83.5948 31.6479,-83.6008 31.6552,-83.628 31.6929,-83.6601 31.7408,-83.6903 31.7886,-83.7115 31.8261,-83.7234 31.8534,-83.7353 31.8858,-83.7458 31.9186,-83.7536 31.9471,-83.7552 31.9574,-83.7555 31.9677,-83.7554 31.9779,-83.7556 31.9882,-83.7592 32.0348,-83.7609 32.0716,-83.7594 32.1083,-83.7534 32.1541,-83.7491 32.1756,-83.7442 32.1984,-83.7405 32.2214,-83.7402 32.2435,-83.7618 32.287,-83.767 32.3415,-83.7616 32.3965,-83.7513 32.4417,-83.7413 32.5076,-83.7421 32.5752,-83.743 32.6409,-83.7335 32.701,-83.727 32.7171,-83.7189 32.7326,-83.71 32.7478,-83.7014 32.7632,-83.6999 32.7672,-83.6986 32.771,-83.6934 32.7772,-83.6809 32.7844,-83.6697 32.7918,-83.661 32.8006,-83.6561 32.8119)
+LINESTRING(-92.0503 32.4961,-92.0484 32.4959)
+LINESTRING(-111.686 32.821,-111.607 32.7797,-111.513 32.7295,-111.423 32.6775,-111.358 32.6305,-111.327 32.5979,-111.297 32.563,-111.267 32.5278,-111.235 32.4946,-111.215 32.4769,-111.193 32.4599,-111.171 32.4435,-111.149 32.4277,-111.14 32.4223,-111.13 32.4173,-111.12 32.4121,-111.112 32.4063,-111.077 32.375,-111.039 32.3386,-111.004 32.3014,-110.976 32.2677,-110.961 32.2461,-110.954 32.2301,-110.953 32.2152,-110.958 32.1966)
+LINESTRING(-92.0484 32.4959,-91.9908 32.4917,-91.9272 32.4867,-91.8682 32.4806,-91.8223 32.4728,-91.7597 32.4607,-91.7145 32.4577,-91.6706 32.4582,-91.612 32.4563,-91.5294 32.4486,-91.4467 32.4383,-91.3642 32.4273,-91.2818 32.4174,-91.2613 32.4146,-91.2397 32.4098,-91.219 32.4029,-91.2015 32.3936)
+LINESTRING(-96.796 32.7823,-96.8109 32.7746,-96.8262 32.7673,-96.8419 32.761,-96.8601 32.7551,-96.8732 32.7494,-96.8842 32.7425,-96.8955 32.7368,-96.9094 32.7347,-96.9185 32.735,-96.9276 32.7352,-96.9367 32.7355,-96.9458 32.7358,-96.9586 32.7355,-96.9697 32.7342,-96.9809 32.733,-96.9936 32.7327,-97.0241 32.7381,-97.0497 32.7489,-97.0753 32.7597,-97.1059 32.7651,-97.1226 32.7664,-97.1374 32.7682,-97.1521 32.769,-97.1686 32.7673,-97.2105 32.7592,-97.2481 32.7508,-97.2839 32.7405,-97.3191 32.7269)
+LINESTRING(-97.3191 32.7269,-97.3193 32.7287,-97.3187 32.7475,-97.3199 32.7588,-97.3215 32.7724,-97.3224 32.7857,-97.3214 32.7963,-97.3182 32.8073,-97.3151 32.8178,-97.3129 32.8286,-97.3122 32.8407,-97.3134 32.9017,-97.3093 32.9381,-97.296 32.9722,-97.2693 33.026,-97.2602 33.0463,-97.2516 33.0672,-97.2422 33.0879,-97.2308 33.1075,-97.2184 33.1253,-97.2061 33.1424,-97.1941 33.1592,-97.1823 33.1762)
+LINESTRING(-89.7628 33.4868,-89.7607 33.45,-89.7655 33.4099,-89.7727 33.3695,-89.7779 33.3317,-89.7815 33.3026,-89.7883 33.2718,-89.7992 33.2421,-89.8147 33.2162,-89.8235 33.2067,-89.8332 33.1976,-89.8422 33.1881,-89.8487 33.1771,-89.8519 33.167,-89.856 33.1525,-89.8607 33.1385,-89.8658 33.1298,-89.8717 33.1255,-89.8777 33.1212,-89.8845 33.1162,-89.8883 33.113,-89.8928 33.1035,-89.8942 33.0941,-89.8953 33.0848,-89.8988 33.0753,-89.9079 33.0645,-89.9213 33.052,-89.934 33.0401,-89.9409 33.0311,-89.9426 33.0248,-89.9437 33.0184,-89.9446 33.0119,-89.9459 33.0057,-89.9514 32.9908,-89.9589 32.9753,-89.967 32.9599,-89.9744 32.9451,-89.9875 32.9278,-90.0135 32.8962,-90.0394 32.8646,-90.0525 32.8472,-90.0529 32.8447,-90.0532 32.8405,-90.0535 32.8368,-90.0537 32.8331,-90.0546 32.8182,-90.0549 32.801,-90.056 32.7839,-90.0589 32.7694,-90.0603 32.7665,-90.0623 32.7629,-90.0641 32.7593,-90.0649 32.7566,-90.0635 32.7479,-90.0601 32.7397,-90.0568 32.7318,-90.0556 32.7238,-90.0579 32.6998,-90.061 32.6754,-90.0646 32.6513,-9
0.0681 32.6273,-90.0708 32.6112,-90.0745 32.5941,-90.0795 32.5773,-90.086 32.5621,-90.0892 32.5578,-90.0935 32.5536,-90.0977 32.5493,-90.1007 32.5448,-90.1023 32.5388,-90.103 32.5324,-90.1039 32.5259,-90.1061 32.5197,-90.1168 32.5037,-90.1294 32.488,-90.141 32.4717,-90.1489 32.4536,-90.1497 32.4463,-90.1491 32.4384,-90.1486 32.4303,-90.1494 32.4226,-90.1511 32.4184,-90.1534 32.4146,-90.1553 32.4103,-90.1559 32.4049,-90.1547 32.3989,-90.1529 32.393,-90.1512 32.387,-90.1504 32.3807,-90.1539 32.3595,-90.1621 32.3291,-90.1714 32.2987,-90.1784 32.2772)
+LINESTRING(-88.7659 32.3413,-88.7884 32.3409,-88.8063 32.3473,-88.8206 32.354,-88.8324 32.3543,-88.8712 32.348,-88.9348 32.3452,-89.0002 32.3444,-89.0441 32.344,-89.0501 32.3448,-89.0562 32.3469,-89.0624 32.3489,-89.0685 32.3496,-89.0831 32.3474,-89.0985 32.3434,-89.1135 32.3396,-89.1272 32.3378,-89.1328 32.3383,-89.1385 32.3396,-89.1442 32.3406,-89.15 32.3407,-89.1562 32.3396,-89.1624 32.3381,-89.1686 32.3369,-89.175 32.3363,-89.2008 32.3376,-89.227 32.34,-89.2532 32.3417,-89.2791 32.3412,-89.286 32.3393,-89.2914 32.3357,-89.296 32.3311,-89.3004 32.3263,-89.3274 32.3231,-89.3535 32.3247,-89.3793 32.327,-89.4051 32.3258,-89.4129 32.3243,-89.4209 32.3228,-89.429 32.322,-89.4371 32.3225,-89.4496 32.3248,-89.4619 32.3276,-89.4741 32.3309,-89.4864 32.3341,-89.4955 32.3364,-89.5076 32.339,-89.5196 32.3405,-89.5286 32.3397,-89.5815 32.3236,-89.6353 32.3112,-89.6899 32.3015,-89.7452 32.2935,-89.762 32.2929,-89.7788 32.2942,-89.7956 32.2954,-89.8119 32.2945,-89.8268 32.2906,-89.8426 32.2848,-89.8573 32.2795,-89.868
9 32.2768,-89.8854 32.2766,-89.9005 32.2769,-89.9161 32.2765,-89.9339 32.2742,-89.9368 32.2737,-89.9396 32.2732,-89.9424 32.273,-89.9453 32.2728,-89.9553 32.2739,-89.9647 32.2759,-89.9742 32.2778,-89.9847 32.2784,-89.9897 32.2778,-89.9941 32.2756,-90.0021 32.275,-90.0091 32.2767,-90.0157 32.279,-90.0228 32.2801,-90.0278 32.2793,-90.0325 32.2774,-90.0371 32.2752,-90.042 32.2736,-90.0735 32.2686,-90.1064 32.2674,-90.1412 32.2701,-90.1784 32.2772)
+LINESTRING(-90.2125 32.2749,-90.204 32.2755,-90.1955 32.2761,-90.1869 32.2767,-90.1784 32.2772)
+LINESTRING(-90.2125 32.2749,-90.2226 32.2798,-90.2272 32.2836,-90.2362 32.2877,-90.2592 32.2935,-90.2905 32.3051,-90.3187 32.3223,-90.3462 32.3399,-90.3755 32.3529,-90.4139 32.3649,-90.4632 32.3796,-90.5123 32.39,-90.5496 32.3894,-90.5602 32.3855,-90.5705 32.3808,-90.5808 32.3762,-90.5913 32.3724,-90.6038 32.3747,-90.6294 32.3811,-90.6583 32.388,-90.6806 32.3916,-90.7064 32.3901,-90.7334 32.384,-90.76 32.375,-90.7843 32.3652,-90.7925 32.3616,-90.8011 32.3567,-90.8099 32.3506,-90.8189 32.3433)
+LINESTRING(-90.9379 32.2939,-90.9496 32.2965,-90.9964 32.3096,-91.0431 32.3241,-91.0767 32.3359,-91.0916 32.3426,-91.1061 32.3501,-91.1208 32.3573,-91.1362 32.3635,-91.1529 32.3705,-91.1682 32.3789,-91.1832 32.3879,-91.1989 32.3967)
+LINESTRING(-90.8189 32.3433,-90.823 32.3395,-90.8272 32.3357,-90.8314 32.3315,-90.8356 32.3272,-90.8477 32.3102,-90.8685 32.2973,-90.8929 32.2899,-90.9156 32.289,-90.9379 32.2939)
+LINESTRING(-93.7472 32.4965,-93.7369 32.5014,-93.7218 32.5117,-93.7083 32.5219,-93.7024 32.5266,-93.684 32.5289,-93.6658 32.5327,-93.6476 32.5369,-93.6293 32.5403,-93.5829 32.543,-93.5486 32.5428,-93.5177 32.5505,-93.4817 32.5767,-93.4807 32.5785,-93.4341 32.5822,-93.3831 32.5893,-93.3334 32.5944,-93.2911 32.5921,-93.2607 32.5847,-93.2258 32.5757,-93.191 32.5681,-93.161 32.5649,-93.1275 32.5643,-93.09 32.5629,-93.0532 32.5617,-93.0222 32.5619,-93.0043 32.5634,-92.9863 32.5658,-92.9684 32.5682,-92.9505 32.5696,-92.9206 32.5676,-92.8912 32.5615,-92.8621 32.5547,-92.8332 32.5506,-92.7849 32.5477,-92.7366 32.5449,-92.6883 32.5427,-92.64 32.5413,-92.6068 32.5413,-92.5739 32.5418,-92.541 32.5417,-92.5078 32.5403,-92.4682 32.536,-92.4365 32.531,-92.4037 32.5266,-92.3608 32.5242,-92.345 32.5225,-92.3306 32.5192,-92.3165 32.5153,-92.3014 32.5123,-92.2684 32.5107,-92.2343 32.5121,-92.2004 32.5134,-92.1682 32.5109,-92.1606 32.5084,-92.1528 32.5047,-92.1452 32.5017,-92.1382 32.5012,-92.1334 32.5033,-92.1268 32.5047,-92
.1199 32.5057,-92.1143 32.5066,-92.1076 32.5031,-92.1002 32.5015,-92.0923 32.5006,-92.0844 32.4991,-92.0759 32.4983,-92.0674 32.4976,-92.0588 32.4968,-92.0503 32.4961)
+LINESTRING(-108.947 32.2359,-108.91 32.2578,-108.874 32.2789,-108.838 32.301,-108.804 32.3257,-108.779 32.3252,-108.753 32.3251,-108.728 32.3243,-108.704 32.3217)
+LINESTRING(-94.3574 32.4907,-94.2945 32.493,-94.2191 32.4918,-94.1438 32.4858,-94.0815 32.4739,-94.0726 32.4704,-94.0641 32.4657,-94.0559 32.4606,-94.0476 32.456,-94.0443 32.455)
+LINESTRING(-98.1111 32.6113,-98.0842 32.6293,-98.052 32.6521,-98.0198 32.6737,-97.9927 32.6876,-97.9648 32.6975,-97.9369 32.7073,-97.9089 32.7172,-97.881 32.727,-97.8552 32.7316,-97.8269 32.7315,-97.7976 32.7313,-97.769 32.7358,-97.7505 32.7415,-97.732 32.7472,-97.7095 32.7538,-97.698 32.7563,-97.6853 32.7523,-97.673 32.7478,-97.6608 32.7431,-97.6484 32.7388,-97.6173 32.7309,-97.5866 32.7259,-97.5555 32.7227,-97.5235 32.7198,-97.5208 32.7211,-97.518 32.7224,-97.4717 32.7322,-97.437 32.733,-97.4053 32.7309,-97.3677 32.7318,-97.3556 32.7349,-97.3462 32.7399,-97.3373 32.745,-97.3268 32.7481)
+LINESTRING(-94.0443 32.455,-94.0312 32.4508,-94.0154 32.4498,-93.9992 32.4502,-93.9818 32.4489)
+LINESTRING(-93.7472 32.4965,-93.7603 32.499,-93.7655 32.4942,-93.7695 32.4878,-93.7738 32.4816,-93.7798 32.4772,-93.8412 32.4532,-93.881 32.443,-93.9206 32.4427,-93.9818 32.4489)
+LINESTRING(-109.048 32.2212,-109.048 32.2212,-109.021 32.2196,-108.995 32.2218,-108.971 32.2274,-108.947 32.2359)
+LINESTRING(-106.945 34.0037,-106.945 34.0027,-106.94 33.9761,-106.934 33.9532,-106.931 33.9359,-106.93 33.9269,-106.965 33.8538,-107.011 33.7703,-107.066 33.6933,-107.126 33.6396,-107.161 33.5912,-107.213 33.4982,-107.262 33.4008,-107.288 33.3395,-107.289 33.3292,-107.288 33.3192,-107.284 33.3095,-107.281 33.3,-107.272 33.2813,-107.264 33.2655,-107.259 33.2493,-107.256 33.2296,-107.263 33.1794,-107.281 33.1581,-107.306 33.1418,-107.329 33.1064,-107.335 33.088,-107.346 33.0429,-107.356 32.9855,-107.356 32.9304,-107.341 32.9116,-107.31 32.8854,-107.279 32.8564,-107.265 32.8285,-107.264 32.8178,-107.264 32.8064,-107.261 32.7953,-107.256 32.7854,-107.237 32.7605,-107.219 32.7418,-107.199 32.7237,-107.176 32.7006,-107.153 32.6876,-107.122 32.6823,-107.09 32.6813,-107.061 32.6808,-106.984 32.6615,-106.931 32.6198,-106.891 32.5649,-106.854 32.5058,-106.827 32.4675,-106.799 32.4299,-106.771 32.3928,-106.741 32.3562)
+LINESTRING(-96.6711 32.8001,-96.648 32.7957,-96.6274 32.7946,-96.609 32.7942,-96.5923 32.7923,-96.5609 32.7854,-96.5295 32.7785,-96.4982 32.7717,-96.4668 32.7648,-96.4636 32.7621,-96.4604 32.7591,-96.4576 32.7559,-96.4554 32.7526,-96.4319 32.7483,-96.4082 32.7452,-96.3844 32.7429,-96.3604 32.7409,-96.298 32.7099,-96.1953 32.6779,-96.0882 32.6504,-96.0128 32.6331,-95.9887 32.6264,-95.9658 32.618,-95.9434 32.6088,-95.9208 32.5997,-95.9018 32.5932,-95.882 32.5872,-95.862 32.5813,-95.8425 32.575,-95.7966 32.5575,-95.7448 32.5365,-95.6928 32.5168,-95.6466 32.5029,-95.6171 32.4981,-95.5864 32.4955,-95.5554 32.493,-95.525 32.4886,-95.4899 32.4805,-95.4574 32.4732,-95.4243 32.469,-95.3873 32.4703)
+LINESTRING(-94.3574 32.4907,-94.4278 32.4885,-94.5281 32.4793,-94.6281 32.4667,-94.6974 32.4542,-94.7193 32.4474,-94.741 32.4399,-94.7633 32.4338,-94.787 32.4314,-94.7975 32.4319,-94.8079 32.4329,-94.8185 32.4337,-94.8293 32.4338)
+LINESTRING(-94.8293 32.4338,-94.8528 32.433,-94.8781 32.4325,-94.9035 32.4328,-94.9271 32.4342,-94.9489 32.4366,-94.9714 32.4393,-94.994 32.4415,-95.0158 32.4422,-95.0383 32.4411,-95.0608 32.4393,-95.0833 32.4379,-95.1058 32.4379,-95.127 32.4404,-95.1475 32.4444,-95.168 32.4481,-95.1894 32.4497,-95.2398 32.4522,-95.2888 32.4581,-95.3376 32.465,-95.3873 32.4703)
+LINESTRING(-108.704 32.3217,-108.683 32.3193,-108.662 32.317,-108.64 32.3154,-108.619 32.3147,-108.568 32.2847,-108.517 32.2552,-108.466 32.2253,-108.416 32.1943,-108.407 32.1892,-108.394 32.1833,-108.381 32.178,-108.371 32.1747,-108.223 32.197,-108.076 32.219,-107.865 32.2501,-107.751 32.2663)
+LINESTRING(-110.958 32.1966,-110.944 32.1856,-110.928 32.1722,-110.911 32.159,-110.894 32.1486,-110.89 32.1426,-110.886 32.1366,-110.882 32.1307,-110.877 32.1247,-110.832 32.1037,-110.772 32.0632,-110.71 32.0215,-110.657 31.9969,-110.612 31.9956,-110.551 31.9844,-110.489 31.9713,-110.442 31.9641,-110.419 31.9639,-110.396 31.9637,-110.365 31.9637,-110.349 31.9641,-110.34 31.966,-110.332 31.9673,-110.324 31.9689,-110.314 31.9718)
+LINESTRING(-110.314 31.9718,-110.285 31.9785,-110.278 31.9783,-110.274 31.9776,-110.267 31.9683,-110.239 31.9746,-110.191 31.9891,-110.144 32.005,-110.118 32.0157,-110.104 32.0305,-110.086 32.0518,-110.067 32.0719,-110.05 32.0834,-110.038 32.1013,-110.023 32.1185,-110.008 32.1357,-109.996 32.1535,-109.933 32.1859,-109.885 32.2197,-109.843 32.2593,-109.797 32.3089,-109.759 32.3399,-109.721 32.3552,-109.678 32.3611,-109.624 32.3642,-109.619 32.363,-109.614 32.3613,-109.604 32.3497,-109.597 32.3475,-109.59 32.3458,-109.574 32.3431,-109.468 32.3215,-109.291 32.2838,-109.124 32.2451,-109.048 32.2212)
+LINESTRING(-106.741 32.3562,-106.737 32.3295,-106.729 32.3058,-106.718 32.2835,-106.705 32.2613)
+LINESTRING(-107.751 32.2663,-107.712 32.2717,-107.672 32.2776,-107.632 32.2827,-107.593 32.2859,-107.555 32.2792,-107.488 32.2631,-107.42 32.2457,-107.382 32.2354,-107.368 32.2416,-107.354 32.2446,-107.339 32.2454,-107.323 32.2452,-107.286 32.244,-107.248 32.2424,-107.21 32.2414,-107.173 32.2418,-107.13 32.2456,-107.087 32.2523,-107.045 32.26,-107.002 32.2667,-106.968 32.2709,-106.934 32.2745,-106.9 32.278,-106.866 32.2815,-106.825 32.2781,-106.784 32.2662,-106.744 32.2569,-106.705 32.2613)
+LINESTRING(-100.502 32.4468,-100.492 32.4481,-100.483 32.4502,-100.474 32.4521,-100.464 32.4529,-100.431 32.4499,-100.406 32.4482,-100.383 32.4566,-100.36 32.4843,-100.34 32.4869,-100.321 32.4903,-100.301 32.4932,-100.28 32.4945,-100.258 32.494,-100.235 32.4927,-100.212 32.4912,-100.189 32.4902,-100.173 32.491,-100.157 32.4932,-100.141 32.4949,-100.125 32.4943,-100.058 32.4853,-99.9917 32.4765,-99.9253 32.468,-99.8588 32.4597,-99.8373 32.4621,-99.8138 32.4703,-99.7906 32.4791,-99.7702 32.4828)
+LINESTRING(-81.5725 31.1378,-81.5894 31.1176,-81.6079 31.0992,-81.6266 31.0812,-81.6443 31.062,-81.6509 31.0497,-81.6579 31.0312,-81.6641 31.0125,-81.6683 30.9994,-81.6838 30.9309,-81.6821 30.8742,-81.6699 30.8177,-81.6538 30.7504,-81.657 30.7391,-81.6633 30.7293)
+LINESTRING(-99.7702 32.4828,-99.7569 32.4864,-99.7477 32.4887,-99.738 32.4899,-99.7234 32.49,-99.7021 32.4744,-99.6784 32.4582,-99.6537 32.4444,-99.6291 32.4364,-99.5764 32.4285,-99.5235 32.4219,-99.4708 32.4152,-99.4186 32.4073,-99.3706 32.3987,-99.3218 32.39,-99.2727 32.382,-99.224 32.3756,-99.1609 32.3716,-99.0972 32.3718,-99.0333 32.3732,-98.97 32.3731,-98.9365 32.3716,-98.8996 32.3701,-98.8629 32.3706,-98.8299 32.3749,-98.821 32.3806,-98.8089 32.3878,-98.7975 32.3949,-98.791 32.4,-98.7856 32.4,-98.7736 32.4064,-98.7575 32.4117,-98.7408 32.4165,-98.7266 32.4212,-98.7045 32.4316,-98.6825 32.4437,-98.661 32.4564,-98.6405 32.4685,-98.6186 32.4758,-98.5799 32.4858,-98.5408 32.4944,-98.5177 32.4975,-98.493 32.5026,-98.4475 32.5044,-98.3995 32.5073,-98.3673 32.5159,-98.3636 32.5163,-98.3239 32.528,-98.2881 32.54,-98.253 32.5534,-98.2171 32.5688,-98.2053 32.5712,-98.1902 32.5716,-98.1752 32.5725,-98.1637 32.5761,-98.1505 32.5849,-98.1374 32.5937,-98.1243 32.6025,-98.1111 32.6113)
+LINESTRING(-100.502 32.4468,-100.544 32.4307,-100.591 32.4207,-100.639 32.4136,-100.685 32.4067,-100.696 32.4098,-100.707 32.4126,-100.719 32.4143,-100.73 32.4141,-100.754 32.41,-100.777 32.4059,-100.8 32.4017,-100.823 32.3976,-100.848 32.411,-100.869 32.4086,-100.889 32.3991,-100.909 32.391,-100.938 32.3942,-100.968 32.3833,-100.996 32.3673,-101.024 32.3554,-101.053 32.3503,-101.082 32.3479,-101.111 32.3458,-101.14 32.342,-101.155 32.3387,-101.17 32.3349,-101.184 32.3311,-101.199 32.3272,-101.203 32.3263,-101.206 32.3253,-101.209 32.3244,-101.213 32.3234,-101.213 32.32,-101.212 32.3166,-101.212 32.3132,-101.212 32.3098,-101.271 32.2963,-101.331 32.2832,-101.39 32.2705,-101.45 32.2586,-101.454 32.262,-101.458 32.2654,-101.466 32.2665,-101.474 32.2661,-101.482 32.265,-101.49 32.2636)
+LINESTRING(-83.2936 30.8292,-83.304 30.8466,-83.3153 30.863,-83.3261 30.8796,-83.3348 30.8974,-83.3511 30.9295,-83.3717 30.9621,-83.3911 30.995,-83.4035 31.0279,-83.4036 31.0347,-83.4023 31.042,-83.401 31.0493,-83.4015 31.0563,-83.4093 31.0759,-83.4196 31.0955,-83.43 31.1151,-83.4383 31.1351,-83.4578 31.2044,-83.474 31.2742,-83.4892 31.3441,-83.5057 31.4138,-83.5111 31.424,-83.5197 31.4347,-83.5275 31.4443,-83.53 31.4512)
+LINESTRING(-106.705 32.2613,-106.701 32.2552,-106.697 32.2491,-106.693 32.243,-106.689 32.2369,-106.674 32.2134,-106.661 32.1925,-106.647 32.1722,-106.629 32.1505,-106.609 32.1279,-106.594 32.1064,-106.583 32.0832,-106.578 32.0558,-106.577 32.0412,-106.575 32.0285,-106.573 32.0157,-106.572 32.0016)
+LINESTRING(-96.796 32.7823,-96.8005 32.7723,-96.8058 32.7591,-96.8079 32.7507,-96.811 32.749,-96.8141 32.7472,-96.8172 32.7455,-96.8202 32.7438,-96.8225 32.7354,-96.8247 32.727,-96.827 32.7187,-96.8292 32.7103,-96.8272 32.7077,-96.8203 32.6568,-96.819 32.6051,-96.821 32.5532,-96.8249 32.5033,-96.838 32.4748,-96.8602 32.4376,-96.8723 32.3979,-96.855 32.3619,-96.8738 32.2463,-96.9123 32.1713,-96.9822 32.1154,-97.0952 32.0568)
+LINESTRING(-97.0952 32.0568,-97.1068 32.0833,-97.1153 32.1109,-97.1227 32.1389,-97.1307 32.1663,-97.1433 32.2001,-97.157 32.2339,-97.1702 32.2678,-97.1812 32.3016,-97.1855 32.3207,-97.1888 32.3397,-97.1933 32.3586,-97.2008 32.3773,-97.2264 32.4145,-97.2663 32.467,-97.303 32.5185,-97.3187 32.5529,-97.3174 32.5826,-97.3158 32.6124,-97.3144 32.6421,-97.3136 32.6717,-97.3147 32.6907,-97.3173 32.7097,-97.3191 32.7269)
+LINESTRING(-83.1634 30.6244,-83.1765 30.6384,-83.189 30.6546,-83.201 30.6712,-83.2128 30.6863,-83.2362 30.7198,-83.2557 30.7562,-83.2739 30.7935,-83.2936 30.8292)
+LINESTRING(-81.6633 30.7293,-81.666 30.725,-81.6742 30.7094,-81.6749 30.6936,-81.6687 30.6753,-81.6624 30.6569,-81.6562 30.6386,-81.6499 30.6203,-81.646 30.6047,-81.6438 30.5882,-81.6422 30.5713,-81.6401 30.5547,-81.6383 30.5454,-81.6362 30.5354,-81.6345 30.5254,-81.6338 30.5162,-81.6373 30.4986,-81.6452 30.4626,-81.6514 30.4352,-81.6576 30.4078,-81.6592 30.4054,-81.663 30.3995,-81.6671 30.3916,-81.6699 30.3835,-81.6703 30.3762,-81.6693 30.3694,-81.6681 30.363,-81.668 30.3568,-81.668 30.3524,-81.668 30.348,-81.6681 30.3436,-81.6681 30.3392)
+LINESTRING(-81.6734 30.3183,-81.6665 30.318,-81.6468 30.3208)
+LINESTRING(-106.572 32.0016,-106.572 32.0013,-106.57 31.9806,-106.568 31.96,-106.566 31.9394,-106.564 31.9188,-106.56 31.8951,-106.55 31.8754,-106.535 31.8572,-106.517 31.8381,-106.509 31.8287,-106.503 31.82,-106.496 31.812,-106.486 31.8044)
+LINESTRING(-81.4147 30.2575,-81.4113 30.2572,-81.3999 30.2563,-81.3885 30.2571)
+LINESTRING(-90.2125 32.2749,-90.2243 32.2663,-90.2361 32.2577,-90.2533 32.2444,-90.2635 32.2355,-90.2688 32.2278,-90.2742 32.2185,-90.2793 32.2088,-90.2842 32.2002,-90.3001 32.1712,-90.3155 32.1401,-90.3318 32.1098,-90.3503 32.0833,-90.3577 32.0752,-90.3651 32.0675,-90.372 32.0594,-90.3778 32.0504,-90.3938 32.0176,-90.409 31.9841,-90.4238 31.9505,-90.4386 31.9174,-90.4398 31.9074,-90.44 31.89,-90.44 31.8717,-90.4408 31.8589,-90.4458 31.8408,-90.4525 31.8239,-90.4596 31.8075,-90.4654 31.7905,-90.4692 31.7733,-90.4721 31.7556,-90.4747 31.7377,-90.478 31.7202,-90.479 31.7154,-90.48 31.7105,-90.4808 31.7055,-90.4816 31.7006,-90.4831 31.6611,-90.4808 31.6219,-90.4782 31.5826,-90.4786 31.5431)
+LINESTRING(-106.486 31.8044,-106.48 31.7913,-106.469 31.7818,-106.454 31.7764,-106.437 31.7753,-106.43 31.7761,-106.427 31.7768,-106.423 31.7779)
+LINESTRING(-81.5821 30.2497,-81.576 30.2503,-81.5698 30.2507,-81.5626 30.2507,-81.5297 30.2503,-81.4978 30.2512,-81.4662 30.2537,-81.4344 30.2577,-81.4311 30.2579)
+LINESTRING(-81.5821 30.2497,-81.6024 30.2711,-81.6243 30.2926,-81.6495 30.3104,-81.6734 30.3183)
+LINESTRING(-110.958 32.1966,-110.965 32.1854,-110.972 32.1741,-110.979 32.1629,-110.985 32.1516,-110.987 32.1329,-110.989 32.118,-110.992 32.1033,-110.994 32.0851,-110.994 32.0625,-110.995 32.0387,-110.995 32.015,-110.994 31.9927,-110.988 31.9658,-110.978 31.9319,-110.969 31.8979,-110.965 31.8711,-110.968 31.8364,-110.98 31.8029,-110.996 31.7706,-111.013 31.7397,-111.016 31.731,-111.018 31.7198,-111.02 31.7087,-111.022 31.7001,-111.031 31.6606,-111.039 31.6022,-111.046 31.5477,-111.049 31.5201,-111.049 31.5098,-111.047 31.4987,-111.044 31.4875,-111.04 31.4765,-111.031 31.464,-111.017 31.4489,-111.001 31.4351,-110.986 31.4264,-110.978 31.4047,-110.966 31.3763,-110.943 31.3385)
+LINESTRING(-88.7659 32.3413,-88.7668 32.3356,-88.7677 32.3299,-88.7733 32.3236,-88.7807 32.318,-88.7886 32.313,-88.7962 32.3083,-88.7999 32.3002,-88.8005 32.2952,-88.8026 32.2784,-88.8079 32.2671,-88.8148 32.2564,-88.8215 32.2448,-88.8251 32.2356,-88.828 32.226,-88.8314 32.2164,-88.8362 32.2076,-88.8422 32.201,-88.849 32.1951,-88.8556 32.1888,-88.8607 32.1811,-88.8628 32.1767,-88.8648 32.1723,-88.8701 32.1459,-88.8728 32.1323,-88.8772 32.1189,-88.8876 32.0932,-88.889 32.0879,-88.8898 32.0821,-88.8906 32.0764,-88.8922 32.0714,-88.8971 32.0653,-88.9036 32.0598,-88.91 32.0543,-88.9142 32.0483,-88.9162 32.0398,-88.9171 32.0307,-88.9182 32.0216,-88.9211 32.0133,-88.9266 32.0063,-88.9339 31.9999,-88.9419 31.9939,-88.949 31.988,-88.9677 31.9671,-88.9991 31.93,-89.029 31.8933,-89.0433 31.8739,-89.0488 31.8483,-89.0508 31.8213,-89.0528 31.7945,-89.0585 31.7696,-89.0652 31.7592,-89.0751 31.7503,-89.0858 31.742,-89.095 31.733,-89.1039 31.7188,-89.114 31.7021,-89.1262 31.6887,-89.1418 31.6845,-89.1512 31.6797,-89.1597
31.6737,-89.1656 31.6527,-89.1797 31.6357,-89.1978 31.6206,-89.2158 31.6052,-89.2348 31.5857,-89.2517 31.5663,-89.2676 31.5462,-89.2832 31.5244,-89.2918 31.5151,-89.3016 31.5082,-89.3113 31.5017,-89.3199 31.4936,-89.3224 31.4767,-89.3215 31.446,-89.3194 31.4143,-89.3181 31.3941,-89.3217 31.3843,-89.3305 31.3755,-89.3411 31.3674,-89.35 31.3601)
+LINESTRING(-101.49 32.2636,-101.501 32.2605,-101.51 32.2542,-101.518 32.2467,-101.527 32.2399,-101.54 32.233,-101.554 32.2278,-101.569 32.2229,-101.583 32.2172,-101.627 32.197,-101.669 32.1788,-101.713 32.1618,-101.759 32.1453,-101.777 32.1414,-101.79 32.141,-101.804 32.1371,-101.827 32.1229,-101.832 32.1191,-101.87 32.1058,-101.906 32.09,-101.941 32.0725,-101.975 32.0542,-101.981 32.0345,-101.998 32.0145,-102.018 31.9966,-102.037 31.9828,-102.057 31.9741,-102.079 31.969,-102.103 31.965,-102.124 31.9593,-102.157 31.9437,-102.211 31.9154,-102.266 31.8857,-102.301 31.866,-102.314 31.8564,-102.326 31.846,-102.339 31.8363,-102.354 31.8289)
+LINESTRING(-82.7542 30.2665,-82.761 30.2776,-82.7709 30.288,-82.7819 30.2975,-82.7923 30.3062,-82.8205 30.3327,-82.8477 30.3606,-82.8738 30.3892,-82.8987 30.4181,-82.9031 30.4239,-82.9076 30.4297,-82.9129 30.4366,-82.9318 30.4512,-82.9512 30.4629,-82.9711 30.4738,-82.9885 30.4825,-83.0015 30.4871,-83.0148 30.4906,-83.0279 30.495,-83.0402 30.5022,-83.057 30.5188,-83.0702 30.537,-83.0827 30.5557,-83.0972 30.5735,-83.1066 30.5827,-83.1164 30.5917,-83.1263 30.6006,-83.1361 30.6095,-83.1422 30.6135,-83.1496 30.6168,-83.1571 30.6202,-83.1632 30.6242,-83.1634 30.6244)
+LINESTRING(-83.8903 30.4766,-83.8469 30.4745,-83.813 30.4682,-83.781 30.4589,-83.7436 30.448,-83.7268 30.4454,-83.7088 30.4449,-83.6907 30.4453,-83.6736 30.445,-83.6659 30.4438,-83.6585 30.4415,-83.6512 30.4388,-83.644 30.4363,-83.6136 30.4317,-83.5763 30.432,-83.5396 30.4348,-83.5115 30.438,-83.4836 30.4385,-83.4657 30.4331,-83.4517 30.4248,-83.4354 30.4162,-83.4169 30.4099,-83.397 30.4048,-83.3767 30.4005,-83.3571 30.3965,-83.2996 30.3844,-83.2418 30.3713,-83.1844 30.3573,-83.1278 30.3423,-83.0988 30.3411,-83.0678 30.3474,-83.0318 30.3527,-82.988 30.348,-82.975 30.341,-82.9532 30.3271,-82.9297 30.3121,-82.9119 30.302,-82.8811 30.2922,-82.8364 30.282,-82.7901 30.2729,-82.7542 30.2665)
+LINESTRING(-82.7542 30.2665,-82.7341 30.2623,-82.7156 30.2554,-82.6969 30.2487,-82.6763 30.245,-82.65 30.2432,-82.6237 30.2417,-82.5974 30.2412,-82.5712 30.2427,-82.5472 30.2465,-82.5231 30.2515,-82.499 30.2561,-82.4746 30.2588,-82.4703 30.2588,-82.4665 30.2584,-82.4624 30.2579,-82.4583 30.2574,-82.4273 30.2561,-82.3957 30.2565,-82.3643 30.2566,-82.3341 30.2545,-82.3225 30.2502,-82.3092 30.2425,-82.2964 30.2355,-82.2864 30.2332,-82.261 30.2384,-82.2354 30.2448,-82.2097 30.2515,-82.1844 30.2576,-82.1656 30.2597,-82.1475 30.2592,-82.1297 30.2585,-82.1119 30.26,-82.0919 30.2652,-82.0723 30.2717,-82.0512 30.2785,-82.0267 30.2842,-81.9711 30.2931,-81.8918 30.3043,-81.8061 30.3148,-81.731 30.3214,-81.7106 30.3209,-81.6885 30.3189,-81.6734 30.3183)
+LINESTRING(-84.2477 30.5033,-84.2299 30.5025,-84.2119 30.5028,-84.1939 30.5032,-84.1761 30.5029,-84.1655 30.4944,-84.1536 30.488,-84.1404 30.484,-84.1258 30.4828,-84.0853 30.4929,-84.0436 30.5017,-84.0035 30.5049,-83.9673 30.4982,-83.9628 30.4951,-83.9547 30.489,-83.9462 30.4829,-83.9407 30.4798,-83.927 30.478,-83.9109 30.4771,-83.9006 30.4768,-83.8903 30.4766)
+LINESTRING(-85.382 30.7542,-85.3624 30.7565,-85.3428 30.7581,-85.3232 30.7592,-85.3034 30.7597,-85.2948 30.7594,-85.2863 30.7583,-85.278 30.7565,-85.2698 30.7542,-85.2485 30.7462,-85.2289 30.7377,-85.2084 30.7296,-85.1842 30.7226,-85.1804 30.7221,-85.1757 30.7215,-85.171 30.7209,-85.1677 30.7201,-85.1255 30.7007,-85.0824 30.6785,-85.0388 30.6574,-84.995 30.6413,-84.978 30.6394,-84.9554 30.6395,-84.9323 30.6398,-84.9137 30.6388,-84.8956 30.6353,-84.8776 30.6308,-84.8599 30.6261,-84.8423 30.622,-84.8268 30.6209,-84.8112 30.6222,-84.7957 30.6238,-84.7807 30.6234,-84.7589 30.6167,-84.7409 30.606,-84.7242 30.5941,-84.7066 30.5836,-84.6935 30.5787,-84.6796 30.5748,-84.6656 30.5711,-84.6523 30.5666,-84.6382 30.5602,-84.6247 30.5534,-84.611 30.5467,-84.5964 30.5408,-84.5839 30.538,-84.5673 30.5356,-84.5523 30.5337,-84.5449 30.5324,-84.5171 30.5245,-84.4892 30.5142,-84.4637 30.5036,-84.4433 30.4949,-84.4263 30.4914,-84.3935 30.4859,-84.3606 30.4807,-84.343 30.4784,-84.3199 30.481,-84.296 30.4876,-84.2726 30.496,-84.
2509 30.5038,-84.2493 30.5035,-84.2477 30.5033)
+LINESTRING(-97.1081 31.6024,-97.1028 31.608,-97.1036 31.6342,-97.1044 31.6603,-97.1052 31.6865,-97.106 31.7126,-97.1069 31.7274,-97.1083 31.7426,-97.1093 31.7577,-97.1093 31.7721,-97.1038 31.7969,-97.0945 31.8236,-97.0869 31.8537,-97.0867 31.889,-97.0928 31.9071,-97.1038 31.9309,-97.1141 31.9526,-97.118 31.9639,-97.1071 31.9905,-97.0994 32.0072,-97.0953 32.0255,-97.0952 32.0568)
+LINESTRING(-93.7472 32.4965,-93.7461 32.4724,-93.7451 32.4483,-93.744 32.4241,-93.7429 32.4,-93.7405 32.367,-93.7381 32.3341,-93.7357 32.3012,-93.7333 32.2682,-93.726 32.2584,-93.7186 32.2486,-93.7113 32.2387,-93.7039 32.2289,-93.6668 32.1881,-93.6297 32.1474,-93.5926 32.1066,-93.5556 32.0657,-93.4529 31.9836,-93.3504 31.9013,-93.2481 31.8189,-93.1459 31.7364,-93.1255 31.7019,-93.1051 31.6674,-93.0847 31.633,-93.0643 31.5985,-93.0388 31.5776,-93.0133 31.5567,-92.9878 31.5359,-92.9623 31.515,-92.9068 31.4824,-92.8514 31.4498,-92.796 31.4171,-92.7407 31.3844,-92.7284 31.3767,-92.716 31.3689,-92.7037 31.3612,-92.6914 31.3535,-92.6269 31.3376,-92.5624 31.3218,-92.498 31.3058,-92.4335 31.2899)
+LINESTRING(-96.7734 32.7803,-96.7713 32.7746,-96.769 32.7677,-96.7674 32.7617,-96.7658 32.7556,-96.7597 32.7356,-96.7507 32.7169,-96.7397 32.6987,-96.7279 32.6805,-96.7202 32.6703,-96.7109 32.6596,-96.7024 32.6495,-96.6968 32.6409,-96.6673 32.5728,-96.6564 32.5352,-96.6556 32.4921,-96.6565 32.4077,-96.6506 32.3954,-96.6373 32.3717,-96.6262 32.3528,-96.6151 32.334,-96.5995 32.317,-96.5788 32.3046,-96.5554 32.2943,-96.5321 32.284,-96.5031 32.2602,-96.484 32.2268,-96.4727 32.1897,-96.4672 32.1552,-96.4621 32.142,-96.4523 32.1272,-96.4429 32.1125,-96.4388 32.0996,-96.4407 32.0912,-96.4412 32.0828,-96.4472 32.0735,-96.4523 32.064,-96.443 32.0405,-96.4338 32.0168,-96.4242 31.9932,-96.4138 31.9701,-96.4164 31.96,-96.4189 31.9499,-96.4211 31.9389,-96.4215 31.9302,-96.4046 31.9177,-96.3833 31.9045,-96.3614 31.8914,-96.3423 31.8793,-96.3215 31.8636,-96.304 31.848,-96.2874 31.8314,-96.2693 31.813,-96.2414 31.7901,-96.2154 31.7719,-96.1926 31.75,-96.1741 31.7157,-96.1657 31.687,-96.1599 31.6572,-96.1554 31.6271,-96.150
7 31.5976,-96.1394 31.5675,-96.1173 31.5221,-96.0925 31.4778,-96.0733 31.451)
+LINESTRING(-103.482 31.4018,-103.47 31.4041,-103.459 31.4065,-103.447 31.4088,-103.435 31.4111,-103.405 31.4224,-103.38 31.4399,-103.355 31.4579,-103.327 31.471,-103.265 31.4877,-103.196 31.5055,-103.155 31.5155,-103.115 31.5255,-103.068 31.5373,-103.02 31.5495,-102.972 31.5609,-102.924 31.5699,-102.888 31.5775,-102.873 31.5848,-102.863 31.593,-102.843 31.603,-102.822 31.6107,-102.802 31.6172,-102.783 31.6248,-102.763 31.6356,-102.716 31.6641,-102.669 31.6921,-102.622 31.7196,-102.574 31.7469,-102.54 31.7646,-102.504 31.7813,-102.468 31.7982,-102.433 31.8167,-102.414 31.8133,-102.391 31.8161,-102.37 31.8222,-102.354 31.8289)
+LINESTRING(-90.4786 31.5431,-90.4816 31.5144,-90.4811 31.4852,-90.4794 31.456,-90.4785 31.4271,-90.4791 31.3927,-90.4803 31.3582,-90.4817 31.3237,-90.483 31.2893,-90.4842 31.265,-90.4857 31.2406,-90.4866 31.2163,-90.4863 31.192,-90.4846 31.1808,-90.4817 31.1701,-90.4793 31.1595,-90.479 31.1482,-90.4821 31.1284,-90.4863 31.1087,-90.4906 31.0889,-90.494 31.0691,-90.4953 31.0547,-90.4961 31.0402,-90.4968 31.0256,-90.4979 31.0111,-90.5023 30.996,-90.5074 30.9872)
+LINESTRING(-87.9413 30.6685,-87.9615 30.6706,-87.9972 30.6797,-88.0016 30.684,-88.0092 30.6884,-88.0175 30.6923,-88.024 30.6949,-88.0293 30.6935,-88.0345 30.6919,-88.0361 30.6913)
+LINESTRING(-87.1136 30.5335,-87.1043 30.5357,-87.0847 30.5383,-87.0554 30.5546,-87.0382 30.5678,-87.021 30.5811,-87.0039 30.5944,-86.9867 30.6077,-86.9717 30.6171,-86.9544 30.6244,-86.9365 30.631,-86.9196 30.638,-86.87 30.6604,-86.8153 30.682,-86.7591 30.7005,-86.7049 30.7137,-86.6826 30.7159,-86.6603 30.7156,-86.6385 30.7151,-86.6173 30.7167,-86.6104 30.7185,-86.6036 30.7208,-86.5968 30.7233,-86.5899 30.7252,-86.5682 30.7281,-86.5458 30.7289,-86.5232 30.7288,-86.5012 30.7286,-86.4904 30.7273,-86.4793 30.7243,-86.4682 30.7212,-86.4573 30.7195,-86.4309 30.7216,-86.3899 30.7275,-86.3485 30.7347,-86.3207 30.7407,-86.3014 30.7459,-86.2846 30.7489,-86.2668 30.7495,-86.2448 30.7473,-86.2359 30.744,-86.2265 30.7409,-86.2159 30.7327,-86.21 30.7292,-86.2038 30.7267,-86.1767 30.7154,-86.1578 30.7045,-86.1372 30.6963,-86.105 30.6929,-86.028 30.6945,-85.9725 30.702,-85.9231 30.7195,-85.8645 30.7508,-85.8243 30.759,-85.7581 30.7624,-85.6897 30.7629,-85.6429 30.762,-85.6207 30.7601,-85.5975 30.7563,-85.5741 30.7521,-85.5
516 30.7487,-85.5273 30.7467,-85.5027 30.7461,-85.4782 30.746,-85.4537 30.7459,-85.4355 30.747,-85.4176 30.7496,-85.3999 30.7525,-85.382 30.7542)
+LINESTRING(-87.4133 30.5744,-87.4273 30.5781,-87.4523 30.5785,-87.4771 30.5795,-87.5018 30.5812,-87.5267 30.584,-87.5432 30.5961,-87.5627 30.6087,-87.5833 30.6197,-87.6031 30.6272,-87.6068 30.6281,-87.6101 30.6286,-87.6136 30.6291,-87.6172 30.6297,-87.633 30.632,-87.6489 30.6339,-87.6647 30.6358,-87.6803 30.6383,-87.6931 30.6416,-87.706 30.6459,-87.7192 30.65,-87.7326 30.6528,-87.746 30.6536,-87.76 30.6534,-87.7741 30.653,-87.7879 30.6536,-87.803 30.656,-87.8182 30.6595,-87.8334 30.6628,-87.8486 30.6647,-87.8851 30.6656,-87.9235 30.6667,-87.9413 30.6685)
+LINESTRING(-88.0361 30.6913,-88.0395 30.69,-88.0446 30.6882,-88.0569 30.6711,-88.0794 30.6617,-88.1064 30.6571,-88.1233 30.6551)
+LINESTRING(-88.1233 30.6551,-88.1257 30.6774,-88.1254 30.7006,-88.1235 30.7264,-88.1194 30.735,-88.1112 30.7413,-88.1026 30.7478,-88.097 30.7569,-88.0968 30.7701,-88.1002 30.7837,-88.1041 30.7954,-88.1054 30.803,-88.0718 30.8587,-88.0117 30.8977,-87.9397 30.9252,-87.8709 30.9464,-87.8378 30.9541,-87.804 30.9587,-87.7706 30.9632,-87.7385 30.9708,-87.7252 30.9758,-87.7137 30.9814,-87.7031 30.9881,-87.6923 30.9963,-87.6486 31.0274,-87.6013 31.0556,-87.5529 31.0828,-87.5061 31.1108,-87.4981 31.1149,-87.4887 31.1185,-87.4801 31.1218,-87.4637 31.1296,-87.4549 31.1317,-87.448 31.1327,-87.3815 31.1708,-87.3221 31.2083,-87.2638 31.247,-87.2052 31.2874,-87.1501 31.3231,-87.1046 31.3493,-87.0604 31.3774,-87.0198 31.4095,-87.009 31.4182,-86.9696 31.4531,-86.9348 31.4916,-86.9004 31.5301,-86.8622 31.5652,-86.8349 31.5883,-86.8032 31.6184,-86.7734 31.6503,-86.7518 31.6787,-86.7399 31.6998,-86.7285 31.7216,-86.7168 31.7431,-86.7036 31.7636,-86.6982 31.7693,-86.6914 31.7747,-86.6847 31.7802,-86.68 31.786,-86.6753 31.7971,-
86.6717 31.8089,-86.6677 31.8206,-86.6623 31.8312,-86.6537 31.8409,-86.6435 31.8494,-86.6331 31.8577,-86.6241 31.8668,-86.6052 31.8889,-86.5777 31.92,-86.5519 31.9493,-86.5384 31.9663,-86.5296 31.9869,-86.5226 32.009,-86.5148 32.0308,-86.5038 32.0507,-86.4894 32.0703,-86.4696 32.0979,-86.4509 32.1253,-86.44 32.1441,-86.4361 32.1551,-86.4327 32.1658,-86.4288 32.1763,-86.4233 32.1868,-86.4042 32.212,-86.3827 32.2354,-86.3618 32.259,-86.3445 32.2849,-86.3403 32.2951,-86.3376 32.3061,-86.3361 32.3173,-86.3352 32.3281)
+LINESTRING(-87.2223 30.5063,-87.2081 30.506,-87.1939 30.5056,-87.1797 30.5057,-87.1655 30.5057,-87.1596 30.5095)
+LINESTRING(-87.2223 30.5063,-87.2964 30.5145,-87.342 30.5392,-87.379 30.5655,-87.4133 30.5744)
+LINESTRING(-104.051 31.0911,-104.039 31.1166,-104.026 31.1277,-104.013 31.1328,-103.999 31.1405,-103.942 31.1899,-103.879 31.2435,-103.813 31.2936,-103.748 31.332,-103.705 31.3502,-103.65 31.3707,-103.594 31.3904,-103.544 31.4067,-103.535 31.4051,-103.521 31.4004,-103.502 31.3977,-103.482 31.4018)
+LINESTRING(-88.1233 30.6551,-88.1325 30.6541,-88.1402 30.6397,-88.149 30.6256,-88.1592 30.6125,-88.1709 30.6009,-88.1842 30.5904,-88.1988 30.58,-88.2139 30.5702,-88.2284 30.5612,-88.2849 30.528,-88.3201 30.5094,-88.3537 30.4952,-88.4022 30.4763)
+LINESTRING(-104.825 31.0363,-104.837 31.034,-104.85 31.0333,-104.863 31.0329,-104.875 31.0319,-104.887 31.0363,-104.898 31.0407,-104.91 31.0456,-104.921 31.0509,-104.998 31.0632,-105.137 31.0953,-105.275 31.1302,-105.353 31.1511,-105.373 31.1563,-105.394 31.1606,-105.414 31.1651,-105.434 31.1705,-105.449 31.1774,-105.463 31.1865,-105.475 31.1952,-105.487 31.2013,-105.512 31.1881,-105.533 31.1794,-105.557 31.1768,-105.588 31.1821,-105.601 31.1782,-105.618 31.1741,-105.634 31.1706,-105.645 31.1688,-105.68 31.1711,-105.714 31.183,-105.745 31.2011,-105.77 31.2223,-105.782 31.2303,-105.794 31.2384,-105.796 31.2507,-105.802 31.2793,-105.813 31.3118,-105.83 31.3356,-105.848 31.3521,-105.872 31.3741,-105.896 31.3955,-105.917 31.4103,-105.929 31.4161,-105.942 31.4213,-105.956 31.4267,-105.968 31.4327,-106 31.451,-106.031 31.4705,-106.062 31.4898,-106.094 31.508,-106.103 31.5116,-106.111 31.5164,-106.137 31.5484,-106.163 31.5832,-106.187 31.6187,-106.211 31.6527,-106.224 31.6688,-106.238 31.6852,-106.253 31.7009,-106
.268 31.7153,-106.296 31.7355,-106.339 31.7599,-106.386 31.7777,-106.423 31.7779)
+LINESTRING(-104.051 31.0911,-104.065 31.0842,-104.073 31.0828,-104.083 31.0837,-104.097 31.0834,-104.114 31.0791,-104.129 31.0717,-104.145 31.0639,-104.163 31.0586,-104.215 31.0584,-104.305 31.0628,-104.392 31.0683,-104.441 31.0716,-104.452 31.0707,-104.464 31.068,-104.477 31.0648,-104.488 31.0628,-104.572 31.0555,-104.656 31.0484,-104.741 31.042,-104.825 31.0363)
+LINESTRING(-97.4693 31.0303,-97.4306 31.0388,-97.3943 31.0615,-97.3609 31.093,-97.3311 31.1278,-97.3186 31.1707,-97.3005 31.2132,-97.2794 31.2547,-97.2575 31.2946,-97.249 31.3059,-97.2384 31.3162,-97.2283 31.3269,-97.2212 31.3389,-97.2065 31.3768,-97.1912 31.4118,-97.1745 31.4463,-97.1556 31.4825,-97.1453 31.5017,-97.1353 31.5218,-97.1273 31.5422,-97.1227 31.5624,-97.1168 31.5698,-97.1123 31.5752,-97.1091 31.5804,-97.1083 31.5871,-97.1089 31.595,-97.1081 31.6024)
+LINESTRING(-88.4022 30.4763,-88.4054 30.475,-88.4323 30.4654,-88.4548 30.4622,-88.4733 30.461,-88.4884 30.4579,-88.4993 30.4528,-88.5099 30.4475,-88.5209 30.443,-88.5333 30.4402,-88.5717 30.4367,-88.6188 30.4339,-88.6656 30.4322,-88.703 30.4323,-88.7197 30.4362,-88.7426 30.4443,-88.7656 30.4528,-88.7826 30.4579,-88.8024 30.4585,-88.8292 30.4568,-88.8564 30.4542,-88.8776 30.4525,-88.889 30.4513,-88.9008 30.4494,-88.9126 30.4478,-88.9237 30.4475,-88.9343 30.4503,-88.9445 30.4557,-88.9548 30.4605,-88.9654 30.4616,-88.9978 30.4557,-89.0303 30.4491,-89.063 30.4424,-89.0956 30.4367)
+LINESTRING(-89.35 31.3601,-89.3544 31.3451,-89.3557 31.3203,-89.3554 31.2964,-89.3549 31.2839,-89.3534 31.2803,-89.3499 31.2761,-89.3466 31.2727,-89.3432 31.2692,-89.337 31.2607,-89.3315 31.2515,-89.3266 31.2422,-89.3221 31.233,-89.3232 31.228,-89.3343 31.2016,-89.3446 31.1749,-89.3548 31.1483,-89.3658 31.1223,-89.3703 31.1141,-89.3755 31.1059,-89.3806 31.0978,-89.3847 31.0895,-89.3885 31.0767,-89.391 31.0633,-89.3937 31.0499,-89.3979 31.037,-89.4012 31.0297,-89.4045 31.0225,-89.4077 31.0152,-89.411 31.0079,-89.4335 30.9666,-89.4615 30.9197,-89.4847 30.8725,-89.4926 30.8305,-89.4964 30.8247,-89.5009 30.8192,-89.5056 30.814,-89.5103 30.8087,-89.5177 30.7943,-89.5197 30.7784,-89.5208 30.763,-89.5256 30.7503,-89.5316 30.7436,-89.5385 30.7374,-89.5453 30.7312,-89.5513 30.7243,-89.5625 30.704,-89.5715 30.6815,-89.58 30.6586,-89.59 30.6371,-89.6009 30.6202,-89.6132 30.6038,-89.6257 30.5875,-89.637 30.5706,-89.6448 30.5577,-89.6525 30.5448,-89.6597 30.5316,-89.6659 30.5181,-89.6687 30.5089,-89.6709 30.4991,-89.673
6 30.4895,-89.6777 30.4811,-89.6855 30.4696)
+LINESTRING(-81.5821 30.2497,-81.5698 30.2375,-81.5579 30.2275,-81.5464 30.2174,-81.5356 30.2064,-81.5364 30.2005,-81.5377 30.1939,-81.5389 30.1874,-81.5395 30.1816,-81.5334 30.1645,-81.5183 30.1462,-81.4988 30.1259,-81.4796 30.1029,-81.4773 30.087,-81.4831 30.0666,-81.4897 30.0456,-81.4897 30.028,-81.4789 30.006,-81.4659 29.9868,-81.4532 29.9706,-81.4433 29.9576,-81.435 29.9474,-81.4257 29.9376,-81.4168 29.9277,-81.4097 29.917,-81.4049 29.9035,-81.4015 29.8879,-81.3983 29.8721,-81.3942 29.8575,-81.3908 29.8495,-81.3868 29.8417,-81.3826 29.8338,-81.3789 29.826,-81.3652 29.7908,-81.3509 29.7526,-81.3355 29.7148,-81.3184 29.6806,-81.3069 29.6746,-81.295 29.6678,-81.2837 29.6603,-81.2742 29.652,-81.2705 29.6417,-81.2649 29.6316,-81.2515 29.6089,-81.2374 29.5865,-81.2232 29.5643,-81.2096 29.5417,-81.1914 29.5036,-81.167 29.4459,-81.1441 29.3878,-81.1303 29.3485,-81.129 29.3376,-81.1299 29.3261,-81.1311 29.3145,-81.1308 29.3035,-81.1281 29.2925,-81.1242 29.2806,-81.1156 29.2577,-81.1072 29.232,-81.0984 29.206,-81
.0879 29.1806,-81.0742 29.1565,-81.0933 29.1473)
+LINESTRING(-102.908 30.902,-102.986 30.8965,-103.129 30.9117,-103.276 30.9332,-103.365 30.9467,-103.398 30.9526,-103.432 30.9607,-103.465 30.9684,-103.498 30.9732,-103.544 30.9773,-103.59 30.9825,-103.637 30.9886,-103.682 30.9956,-103.703 30.9999,-103.723 31.0052,-103.744 31.0098,-103.766 31.012,-103.786 31.0118,-103.807 31.0106,-103.828 31.0088,-103.848 31.0068,-103.869 31.0166,-103.891 31.0271,-103.913 31.037,-103.935 31.0449,-103.944 31.0467,-103.955 31.0475,-103.965 31.0486,-103.974 31.0513,-103.981 31.0559,-103.987 31.0617,-103.993 31.0678,-104 31.0728,-104.012 31.0785,-104.025 31.083,-104.038 31.0869,-104.051 31.0911)
+LINESTRING(-90.5074 30.9872,-90.51 30.9827,-90.5181 30.9697,-90.5237 30.9553,-90.5311 30.9015,-90.534 30.8414,-90.5342 30.7814,-90.5338 30.7278,-90.5336 30.6874,-90.5309 30.6592,-90.5228 30.6309,-90.5063 30.5899,-90.5027 30.5633,-90.5054 30.5336,-90.5046 30.5049,-90.4906 30.4809)
+LINESTRING(-90.4906 30.4809,-90.3345 30.4826,-90.2611 30.4817,-90.2009 30.4676,-90.0838 30.4298)
+LINESTRING(-102.645 30.8779,-102.67 30.8805,-102.694 30.8847,-102.718 30.8889,-102.742 30.8911,-102.764 30.8908,-102.792 30.8899,-102.819 30.89,-102.84 30.8928,-102.859 30.8987,-102.874 30.9037,-102.889 30.9055,-102.908 30.902)
+LINESTRING(-89.6238 30.3079,-89.6103 30.3124,-89.5793 30.323,-89.5587 30.3297,-89.5479 30.3317,-89.5375 30.3323,-89.5273 30.3326,-89.5169 30.3341,-89.4605 30.3502,-89.4048 30.3692,-89.3492 30.3884,-89.293 30.4047,-89.2822 30.4064,-89.2713 30.4069,-89.2604 30.407,-89.2495 30.4076,-89.2392 30.4096,-89.229 30.4128,-89.219 30.4165,-89.2091 30.4197,-89.1958 30.4218,-89.1804 30.4223,-89.1647 30.4224,-89.151 30.4231,-89.1478 30.4234,-89.1446 30.4237,-89.1414 30.4241,-89.1382 30.4244,-89.1344 30.4254,-89.1306 30.4264,-89.1262 30.4277,-89.1218 30.4289,-89.1174 30.4302,-89.1129 30.4315,-89.1085 30.4326,-89.1041 30.4337,-89.0995 30.435,-89.0956 30.4367)
+LINESTRING(-89.6855 30.4696,-89.6953 30.4552,-89.7107 30.4312,-89.7253 30.4063,-89.7405 30.3777,-89.7418 30.3656,-89.7394 30.3492,-89.7381 30.3297,-89.7425 30.3082)
+LINESTRING(-90.0838 30.4298,-90.0661 30.4271,-90.0498 30.4202,-90.0345 30.4112,-90.0196 30.4024,-89.9751 30.3791,-89.9186 30.3515,-89.8623 30.3267,-89.8181 30.3122,-89.7999 30.3104,-89.7809 30.3107,-89.7615 30.3108,-89.7425 30.3082)
+LINESTRING(-89.7425 30.3082,-89.7218 30.3023,-89.6993 30.2989,-89.6765 30.2976,-89.6549 30.2981,-89.6395 30.3026,-89.6238 30.3079)
+LINESTRING(-91.1218 30.3911,-91.1146 30.3989,-91.1041 30.4083,-91.0938 30.4164,-91.0874 30.4203,-91.0778 30.4235,-91.0682 30.4275,-91.0585 30.4315,-91.0486 30.4348,-90.9975 30.4478,-90.9466 30.4585,-90.895 30.4669,-90.8422 30.4731,-90.8356 30.4735,-90.8289 30.4739,-90.8223 30.4743,-90.8157 30.4748,-90.7759 30.4757,-90.7365 30.4759,-90.6972 30.4758,-90.6577 30.4759,-90.6159 30.4773,-90.5742 30.4794,-90.5325 30.481,-90.4906 30.4809)
+LINESTRING(-91.1515 30.4047,-91.1441 30.4013,-91.1367 30.3979,-91.1292 30.3945,-91.1218 30.3911)
+LINESTRING(-91.1515 30.4047,-91.1725 30.4129,-91.1931 30.4204,-91.2106 30.4266,-91.2225 30.431,-91.2439 30.4398,-91.2647 30.4477,-91.2845 30.453,-91.3028 30.4542,-91.3384 30.4485,-91.3764 30.4387,-91.414 30.4275,-91.4487 30.4174,-91.5256 30.3968,-91.6026 30.3763,-91.6795 30.3556,-91.7562 30.3343,-91.7869 30.3269,-91.818 30.3211,-91.8489 30.3152,-91.8794 30.3079,-91.8977 30.302,-91.9152 30.2955,-91.9325 30.2886,-91.9501 30.282,-91.9664 30.2769,-91.983 30.2723,-91.9994 30.2672,-92.0145 30.2609)
+LINESTRING(-92.0145 30.2609,-92.0264 30.2965,-92.0421 30.3426,-92.0533 30.3874,-92.052 30.4197,-92.0676 30.4465,-92.0741 30.4672,-92.0739 30.4896,-92.0697 30.5217,-92.0688 30.5283,-92.0671 30.5357,-92.0636 30.5424,-92.0577 30.5468,-92.054 30.5655,-92.0501 30.5846,-92.0472 30.6038,-92.0465 30.6228,-92.0498 30.6365,-92.0568 30.6474,-92.0652 30.6575,-92.0729 30.6688,-92.0769 30.6779,-92.0802 30.6869,-92.0842 30.6956,-92.0901 30.7039,-92.1214 30.7301,-92.1668 30.764,-92.208 30.7989,-92.2268 30.8283,-92.2277 30.8449,-92.2287 30.8614,-92.2296 30.878,-92.2306 30.8946,-92.2635 30.9348,-92.2916 30.9669,-92.326 30.9919,-92.3778 31.0109,-92.3912 31.0264,-92.4046 31.042,-92.418 31.0575,-92.4314 31.0731,-92.4299 31.0945,-92.4282 31.1189,-92.426 31.1768,-92.427 31.2371,-92.4335 31.2899)
+LINESTRING(-100.643 30.5781,-100.662 30.5842,-100.695 30.5965,-100.728 30.6093,-100.75 30.6172,-100.771 30.6213,-100.791 30.6206,-100.809 30.619,-100.824 30.6199,-100.855 30.6294,-100.888 30.6415,-100.92 30.6544,-100.951 30.6664,-100.977 30.6729,-101.008 30.677,-101.038 30.6801,-101.065 30.6837,-101.091 30.6894,-101.116 30.6964,-101.14 30.7036,-101.165 30.7101,-101.173 30.7073,-101.182 30.7059,-101.192 30.705,-101.2 30.7038,-101.214 30.7001,-101.228 30.6953,-101.242 30.6905,-101.256 30.6867,-101.323 30.679,-101.387 30.6818,-101.451 30.6917,-101.516 30.7049,-101.538 30.7109,-101.56 30.7185,-101.582 30.7256,-101.604 30.7297,-101.621 30.7303,-101.638 30.7295,-101.655 30.7281,-101.671 30.7269,-101.732 30.7266,-101.796 30.7314,-101.859 30.7415,-101.917 30.7572,-101.935 30.7674,-101.951 30.7815,-101.966 30.7966,-101.982 30.8095,-102.024 30.834,-102.073 30.8595,-102.124 30.8817,-102.171 30.896,-102.265 30.9037,-102.362 30.8952,-102.459 30.8799,-102.553 30.8669,-102.576 30.8675,-102.599 30.8719,-102.622 30.8765,-10
2.645 30.8779)
+LINESTRING(-90.4392 30.0887,-90.4483 30.1046,-90.4537 30.1177,-90.4558 30.1311,-90.4554 30.1442,-90.4535 30.1562,-90.4507 30.1673,-90.4472 30.1782,-90.4436 30.1886,-90.44 30.198,-90.4372 30.2043,-90.434 30.2102,-90.4304 30.2156,-90.4266 30.2205,-90.4195 30.229,-90.4121 30.2372,-90.4046 30.2478,-90.3972 30.2612,-90.3914 30.2739,-90.389 30.282,-90.3905 30.303,-90.3973 30.3324,-90.4101 30.3647,-90.4295 30.3943,-90.4906 30.4809)
+LINESTRING(-91.1218 30.3911,-91.1043 30.3826,-91.0875 30.3736,-91.0727 30.3643,-91.0612 30.3551,-91.0505 30.3441,-91.0347 30.3267,-91.0195 30.3081,-91.0107 30.2937,-91.0013 30.2744,-90.9892 30.257,-90.9758 30.2398,-90.9626 30.2209,-90.927 30.1864,-90.8805 30.1691,-90.8285 30.16,-90.7767 30.1501,-90.7568 30.1442,-90.7367 30.1375,-90.7166 30.1312,-90.6966 30.1262,-90.6518 30.1197,-90.6048 30.1157,-90.5576 30.1129,-90.5121 30.1096,-90.4971 30.1067,-90.4755 30.1009,-90.4541 30.0941,-90.4392 30.0887)
+LINESTRING(-97.6873 30.5201,-97.6923 30.5409,-97.6903 30.5624,-97.686 30.5841,-97.6843 30.6055,-97.6871 30.6168,-97.6907 30.6293,-97.6899 30.6412,-97.6793 30.6502,-97.6765 30.663,-97.668 30.6759,-97.658 30.6889,-97.6508 30.7018,-97.6388 30.7375,-97.625 30.7779,-97.6098 30.8178,-97.5937 30.8519,-97.5821 30.8695,-97.5689 30.8864,-97.5559 30.9032,-97.5447 30.9207,-97.5398 30.932,-97.5358 30.9435,-97.5314 30.955,-97.5252 30.966,-97.5179 30.9747,-97.5092 30.9828,-97.5005 30.9908,-97.4927 30.9991,-97.4869 31.0065,-97.481 31.0139,-97.4736 31.0238,-97.4693 31.0303)
+LINESTRING(-92.9719 30.2671,-92.9155 30.2635,-92.8156 30.2629,-92.7132 30.2638,-92.6493 30.2645,-92.6359 30.2622,-92.6255 30.2568,-92.6153 30.2509,-92.6027 30.2471,-92.5729 30.2428,-92.5432 30.2385,-92.5074 30.2338,-92.4879 30.2323,-92.4497 30.2353,-92.4109 30.2348,-92.3732 30.2342,-92.3384 30.2372,-92.3217 30.2418,-92.3057 30.2478,-92.289 30.2532,-92.2704 30.2555,-92.2062 30.2525,-92.1408 30.2473,-92.0764 30.2476,-92.0145 30.2609)
+LINESTRING(-82.7542 30.2665,-82.7444 30.2485,-82.7323 30.2379,-82.7194 30.2296,-82.7074 30.2183,-82.6834 30.1775,-82.6525 30.1156,-82.6239 30.0542,-82.6067 30.0148,-82.602 30.0077,-82.5953 30.0015,-82.5884 29.9955,-82.5829 29.9893,-82.5707 29.9621,-82.5567 29.9219,-82.5445 29.882,-82.5373 29.8559,-82.5329 29.8457,-82.5257 29.8349,-82.5184 29.8234,-82.5134 29.8116,-82.5127 29.8035,-82.5133 29.7953,-82.5131 29.787,-82.5098 29.7786,-82.5024 29.7686,-82.4946 29.7597,-82.4867 29.7512,-82.4789 29.742,-82.4723 29.7314,-82.4669 29.7198,-82.4615 29.708,-82.455 29.6972,-82.4471 29.6878,-82.4377 29.6786,-82.4282 29.6694,-82.4195 29.66,-82.4027 29.6396,-82.3858 29.6192,-82.3692 29.5986,-82.3529 29.5779,-82.3411 29.5599,-82.3294 29.5467,-82.3197 29.5371,-82.3135 29.5301,-82.3026 29.5134,-82.2911 29.4959,-82.28 29.4784,-82.2709 29.4616,-82.2681 29.454,-82.2662 29.4459,-82.2645 29.4376,-82.2621 29.4298,-82.2543 29.4149,-82.2439 29.4,-82.2336 29.3851,-82.2257 29.3701,-82.2213 29.3574,-82.2176 29.3442,-82.2141 29.331,-82.21
06 29.318,-82.1961 29.2682,-82.1882 29.2347,-82.1849 29.201,-82.1844 29.1506,-82.1845 29.1344,-82.1846 29.1183,-82.1847 29.1021,-82.1848 29.0859,-82.1824 29.0762,-82.1766 29.0652,-82.17 29.0544,-82.1648 29.0452,-82.1616 29.0368,-82.159 29.0281,-82.1563 29.0195,-82.1531 29.011,-82.1448 28.9946,-82.1354 28.9785,-82.126 28.9625,-82.1176 28.9462,-82.1109 28.9273,-82.1021 28.8985,-82.0939 28.8712,-82.0889 28.8571)
+LINESTRING(-90.0838 30.4298,-90.0845 30.416,-90.0867 30.4019,-90.0895 30.3878,-90.0922 30.3741,-90.1494 30.0504,-90.1542 30.0245,-90.1559 30.0114,-90.1707 29.907)
+LINESTRING(-89.7425 30.3082,-89.7479 30.2907,-89.7541 30.2718,-89.7612 30.2534,-89.7694 30.2373,-89.7734 30.2329,-89.781 30.2255,-89.7874 30.2194,-89.7939 30.2134,-89.8104 30.1981,-89.8272 30.183,-89.8437 30.1676,-89.8595 30.1518,-89.8785 30.1293,-89.8971 30.1048,-89.9167 30.0814,-89.9387 30.0618,-89.9613 30.0463,-89.9812 30.0333,-89.9998 30.0209,-90.0189 30.0072,-90.0377 29.9961,-90.0539 29.984,-90.0676 29.9697,-90.0793 29.9519,-90.0788 29.9495,-90.0784 29.947,-90.0779 29.9446,-90.0774 29.9421,-90.0746 29.9398,-90.0713 29.9376,-90.0678 29.9359,-90.0643 29.9346,-90.0562 29.9366,-90.0489 29.9361,-90.0421 29.9334,-90.0357 29.9285,-90.036 29.9266,-90.0363 29.9246,-90.0362 29.9226,-90.0358 29.9207,-90.0568 29.9018,-90.0789 29.8886,-90.1035 29.882,-90.1318 29.883)
+LINESTRING(-90.1318 29.883,-90.299 29.9837,-90.3534 30.0151,-90.3725 30.0265,-90.3909 30.0381,-90.4072 30.0494,-90.4198 30.0597,-90.4224 30.063,-90.4274 30.0706,-90.4349 30.0836,-90.4392 30.0887)
+LINESTRING(-93.684 30.1369,-93.6822 30.1377,-93.5905 30.1754,-93.5141 30.1996,-93.4322 30.213,-93.3238 30.2184,-93.315 30.2231,-93.306 30.2271,-93.2968 30.2311,-93.2877 30.2354,-93.2619 30.2369,-93.2343 30.2405,-93.2067 30.2442,-93.1808 30.2459,-93.1746 30.256,-93.1696 30.2612,-93.1535 30.2641,-93.1416 30.263,-93.1298 30.262,-93.1183 30.2618,-93.1119 30.2628,-93.1053 30.2644,-93.0987 30.266,-93.0924 30.2668,-93.0623 30.2669,-93.0322 30.2669,-93.002 30.267,-92.9719 30.2671)
+LINESTRING(-80.8333 28.4483,-80.8341 28.4556,-80.8342 28.4638,-80.8343 28.472,-80.8352 28.4801,-80.8596 28.5126,-80.8746 28.5415,-80.882 28.5724,-80.8838 28.6112,-80.8868 28.6313,-80.8939 28.66,-80.9026 28.6884,-80.91 28.7076,-80.9098 28.7431,-80.9209 28.798,-80.9365 28.8539,-80.9495 28.8925,-80.9612 28.9209,-80.9738 28.9477,-80.9878 28.9739,-81.0039 29.0005,-81.0094 29.0084,-81.016 29.0174,-81.0218 29.0266,-81.0251 29.0346,-81.0303 29.0517,-81.0382 29.0717,-81.0455 29.0899,-81.0488 29.1019,-81.0609 29.1136,-81.0739 29.1233,-81.0859 29.1345,-81.0933 29.1473)
+LINESTRING(-80.7224 28.4068,-80.7173 28.4076,-80.6853 28.4082,-80.664 28.4076)
+LINESTRING(-80.7467 28.403,-80.7224 28.4068)
+LINESTRING(-80.8196 28.4134,-80.8032 28.4111,-80.7814 28.407,-80.7605 28.4034,-80.747 28.403,-80.7467 28.403)
+LINESTRING(-80.8196 28.4134,-80.8236 28.4218,-80.8275 28.4302,-80.8308 28.4386,-80.8333 28.4483)
+LINESTRING(-81.0933 29.1473,-81.1201 29.1344,-81.1664 29.0981,-81.2087 29.0572,-81.2424 29.0213,-81.2677 28.9812,-81.2832 28.9373,-81.3055 28.89,-81.3505 28.8399,-81.3573 28.8149,-81.3739 28.7713,-81.3915 28.7259,-81.4011 28.6951,-81.4005 28.6726,-81.3948 28.6473,-81.388 28.622,-81.3835 28.5992,-81.3753 28.5849,-81.3769 28.5688,-81.3822 28.5521,-81.3901 28.536,-81.3942 28.5351,-81.3986 28.5349,-81.403 28.5351,-81.4072 28.5359,-81.4292 28.5465,-81.467 28.5494,-81.5046 28.5483,-81.5256 28.5471,-81.5379 28.5454,-81.5774 28.5383,-81.6143 28.5303,-81.6475 28.5255,-81.6757 28.5278,-81.6816 28.5333,-81.6888 28.5379,-81.6962 28.5425,-81.7026 28.5481,-81.7303 28.5803,-81.739 28.59,-81.7631 28.6116,-81.7936 28.6343,-81.8249 28.6561,-81.8517 28.6753,-81.8647 28.6864,-81.8774 28.699,-81.8898 28.7119,-81.9019 28.7241,-81.9236 28.7428,-81.9467 28.7603,-81.9702 28.7773,-81.9931 28.7947,-82.002 28.8025,-82.0188 28.8188,-82.0277 28.8266,-82.0425 28.8349,-82.0599 28.8414,-82.0765 28.8482,-82.0889 28.8571)
+LINESTRING(-97.7524 30.2139,-97.7446 30.2302,-97.7403 30.2447,-97.7377 30.2565,-97.7352 30.2644,-97.7274 30.281,-97.7188 30.3021,-97.7104 30.3228,-97.703 30.3378,-97.6956 30.3496,-97.6882 30.3614,-97.6814 30.3735,-97.6752 30.3858,-97.6737 30.3922,-97.674 30.3991,-97.6748 30.4062,-97.6749 30.4128,-97.6727 30.4319,-97.6708 30.4502,-97.6709 30.4686,-97.6749 30.4882,-97.6781 30.496,-97.6818 30.5037,-97.6853 30.5116,-97.6873 30.5201)
+LINESTRING(-80.8333 28.4483,-80.8535 28.453,-80.8884 28.4544,-80.9294 28.4541,-80.9691 28.4539,-81.0404 28.4543,-81.1115 28.4538,-81.1796 28.4529,-81.2421 28.4523,-81.2684 28.4522,-81.2947 28.4522,-81.3213 28.4519,-81.3477 28.4513,-81.3613 28.4496,-81.3797 28.4456,-81.3971 28.44,-81.4078 28.4334)
+LINESTRING(-81.4078 28.4334,-81.4105 28.4303,-81.414 28.4274,-81.4177 28.4249,-81.4215 28.4227,-81.4341 28.422,-81.4469 28.4214,-81.4597 28.4213,-81.4722 28.4221)
+LINESTRING(-81.4722 28.4221,-81.4738 28.4403,-81.4742 28.4495,-81.4737 28.4585,-81.4642 28.4689,-81.452 28.4796,-81.439 28.4902,-81.4274 28.5003,-81.4252 28.5028,-81.423 28.5055,-81.4207 28.5081,-81.4178 28.51,-81.4095 28.5099,-81.4013 28.5107,-81.3935 28.5129,-81.3865 28.5166,-81.3857 28.5267)
+LINESTRING(-95.377 29.8118,-95.3844 29.8284,-95.3937 29.8445,-95.4034 29.8604,-95.4124 29.8765,-95.414 29.8878,-95.4141 29.8936,-95.4142 29.8994,-95.4177 29.9291,-95.4243 29.9584,-95.4313 29.9879,-95.4356 30.0178,-95.4425 30.0875,-95.4516 30.1569,-95.4601 30.2263,-95.4652 30.2957,-95.4705 30.319,-95.482 30.3588,-95.4939 30.3991,-95.5005 30.424,-95.5018 30.4398,-95.5012 30.4561,-95.5003 30.4723,-95.5007 30.4881,-95.5043 30.5702,-95.5075 30.6281,-95.5297 30.6779,-95.5904 30.7357,-95.6104 30.7521,-95.63 30.7689,-95.6494 30.7857,-95.6694 30.802,-95.6858 30.8139,-95.7032 30.8258,-95.7203 30.838,-95.7356 30.8507,-95.7513 30.8671,-95.7664 30.885,-95.781 30.9033,-95.7954 30.9207,-95.8152 30.9329,-95.846 30.9455,-95.8833 30.9683,-95.9232 31.011,-95.9283 31.018,-95.9334 31.025,-95.9385 31.0321,-95.9431 31.0392,-95.9467 31.0468,-95.9502 31.0544,-95.9537 31.0618,-95.9557 31.0687,-95.9586 31.08,-95.961 31.0916,-95.9637 31.1031,-95.9672 31.1141,-95.9758 31.132,-95.9851 31.1481,-95.9938 31.1648,-96.0001 31.1848,-96.001 31
.2085,-95.9973 31.2323,-95.9933 31.2558,-95.9938 31.2787,-95.9964 31.2882,-95.9999 31.2979,-96.0035 31.3077,-96.0064 31.3175,-96.0081 31.328,-96.0093 31.3387,-96.0105 31.3492,-96.0124 31.3593,-96.0225 31.384,-96.0382 31.4073,-96.0561 31.4296,-96.0733 31.451)
+LINESTRING(-95.377 29.8118,-95.3751 29.8037,-95.3732 29.7956,-95.3712 29.7875,-95.3693 29.7794)
+LINESTRING(-95.3473 29.7692,-95.3303 29.7701,-95.3143 29.7732,-95.2986 29.7763,-95.2826 29.777,-95.2665 29.7753,-95.2497 29.773,-95.2331 29.7712,-95.2172 29.7709,-95.1979 29.771,-95.176 29.7704,-95.1543 29.7705,-95.1355 29.7728,-95.1149 29.7806,-95.0947 29.7899,-95.074 29.7948,-95.0519 29.7893,-95.0414 29.7908,-95.0334 29.7941,-95.0261 29.7983,-95.0179 29.8028,-95.0072 29.804,-94.9843 29.8061,-94.9648 29.8079,-94.9454 29.8096,-94.8525 29.8264,-94.6765 29.8321,-94.4972 29.8308,-94.3948 29.8272,-94.3308 29.8724,-94.2643 29.9306,-94.201 29.9921,-94.1464 30.0471,-94.1386 30.0586,-94.1361 30.0705,-94.1364 30.0832,-94.137 30.0971,-94.1003 30.0977,-94.0757 30.0985,-94.0503 30.1069,-94.0114 30.1302,-93.9547 30.1312,-93.9091 30.1319,-93.8656 30.1275,-93.8153 30.1138,-93.8057 30.1138,-93.7973 30.1121,-93.789 30.11,-93.7798 30.1085,-93.7522 30.11,-93.7284 30.1168,-93.7058 30.1268,-93.684 30.1369)
+LINESTRING(-95.3473 29.7692,-95.3462 29.7726,-95.3452 29.776,-95.3442 29.7794,-95.3431 29.7829,-95.3349 29.8015,-95.3285 29.8286,-95.3248 29.856,-95.3248 29.8756,-95.3092 29.906,-95.2949 29.9439,-95.2812 29.9832,-95.267 30.018,-95.2546 30.0471,-95.2444 30.0766,-95.2353 30.1066,-95.2264 30.1368,-95.2024 30.1917,-95.1675 30.2473,-95.1283 30.3013,-95.0915 30.3512)
+LINESTRING(-95.3693 29.7794,-95.3638 29.7768,-95.3583 29.7743,-95.3528 29.7718,-95.3473 29.7692)
+LINESTRING(-95.3645 29.7434,-95.3602 29.7498,-95.3559 29.7563,-95.3516 29.7628,-95.3473 29.7692)
+LINESTRING(-95.3693 29.7794,-95.3873 29.7804,-95.4199 29.7809,-95.4469 29.7809,-95.474 29.781,-95.5183 29.7809,-95.5627 29.7806,-95.6071 29.7803,-95.6513 29.7804,-95.6845 29.781,-95.7179 29.7818,-95.7514 29.7819,-95.7845 29.7806,-95.7937 29.7794,-95.8029 29.7776,-95.8123 29.7759,-95.8221 29.7752,-95.8547 29.7761,-95.8879 29.7776,-95.9211 29.7784,-95.9535 29.7769,-95.9755 29.7738,-95.9981 29.7695,-96.0206 29.7657,-96.0425 29.7637,-96.0658 29.7649,-96.0922 29.7682,-96.1206 29.7714,-96.15 29.7726,-96.2093 29.7636,-96.3143 29.7443,-96.4157 29.7247,-96.4643 29.7152,-96.4785 29.712,-96.4924 29.7074,-96.5062 29.7015,-96.5198 29.6946)
+LINESTRING(-81.9698 28.0846,-81.9553 28.0979,-81.9407 28.1121,-81.9256 28.1255,-81.9097 28.1363,-81.8942 28.1414,-81.8667 28.1487,-81.8394 28.1552,-81.8246 28.1581,-81.8136 28.1582,-81.8035 28.1583,-81.7934 28.159,-81.7823 28.1614,-81.7739 28.167,-81.7695 28.1706,-81.7246 28.1919,-81.6834 28.2115,-81.6448 28.2345,-81.6118 28.263,-81.5836 28.2935,-81.5552 28.3238,-81.5269 28.3541,-81.4987 28.3846,-81.4909 28.3927,-81.4819 28.4023,-81.4748 28.4125,-81.4722 28.4221)
+LINESTRING(-96.5198 29.6946,-96.5266 29.691,-96.5361 29.684,-96.5459 29.6771,-96.5535 29.6737,-96.5645 29.6728,-96.5756 29.6719,-96.5867 29.671,-96.5977 29.6701,-96.6501 29.6659,-96.7039 29.6633,-96.7564 29.6652,-96.8047 29.6742,-96.8164 29.6784,-96.8312 29.6841,-96.8456 29.6896,-96.8561 29.6929,-96.8678 29.6949,-96.8788 29.6959,-96.8899 29.6962,-96.9018 29.6962)
+LINESTRING(-81.9698 28.0846,-81.9784 28.0796,-81.9873 28.0754,-81.996 28.0711,-82.0044 28.0658,-82.0135 28.0588,-82.0226 28.0518,-82.0329 28.0447,-82.0406 28.0412,-82.0595 28.0408,-82.0797 28.0424,-82.0998 28.0436,-82.1183 28.0421,-82.1263 28.04,-82.1341 28.0374,-82.1417 28.0346,-82.1494 28.0321,-82.1641 28.03,-82.1836 28.0293,-82.2034 28.0291,-82.2193 28.0283,-82.2467 28.0234,-82.2734 28.0159,-82.3002 28.0081,-82.3279 28.002)
+LINESTRING(-82.0889 28.8571,-82.0872 28.8367,-82.0906 28.8142,-82.095 28.7935,-82.0967 28.7784,-82.1029 28.7702,-82.1092 28.7613,-82.1148 28.7521,-82.1188 28.743,-82.1266 28.7166,-82.1345 28.6904,-82.1451 28.6654,-82.1608 28.6425,-82.1695 28.6343,-82.182 28.6236,-82.1935 28.6138,-82.1993 28.6082,-82.2072 28.5953,-82.2156 28.5845,-82.2253 28.5746,-82.237 28.5647,-82.2385 28.5393,-82.2407 28.5218,-82.2441 28.5051,-82.2496 28.4822,-82.2564 28.4776,-82.2632 28.473,-82.27 28.4684,-82.2769 28.4638,-82.2775 28.4542,-82.2788 28.4446,-82.2805 28.4349,-82.2823 28.4253,-82.2914 28.4188,-82.3004 28.4118,-82.3092 28.4048,-82.318 28.3978,-82.3208 28.3673,-82.3232 28.3371,-82.3249 28.3068,-82.3256 28.2761,-82.3339 28.264,-82.3528 28.2368,-82.3737 28.2061,-82.3878 28.1838,-82.391 28.1779,-82.3942 28.1721,-82.3974 28.1663,-82.4006 28.1605,-82.3704 28.1142,-82.3506 28.0811,-82.3377 28.048,-82.3279 28.002)
+LINESTRING(-95.8534 29.5166,-95.8398 29.5179,-95.8208 29.5219,-95.802 29.5267,-95.7888 29.5304,-95.7388 29.5444,-95.7022 29.5548,-95.6751 29.5638,-95.6539 29.5735,-95.6366 29.5848,-95.6182 29.6,-95.5961 29.6209,-95.5673 29.6491,-95.5476 29.6681,-95.5278 29.6872,-95.5084 29.7066,-95.4901 29.7266,-95.46 29.7294,-95.4299 29.7323,-95.3998 29.735,-95.3696 29.7372,-95.3672 29.7404,-95.3645 29.7434)
+LINESTRING(-82.5399 27.9627,-82.5332 27.9648,-82.5226 27.9675,-82.5165 27.9689,-82.5104 27.9703,-82.4974 27.9754,-82.4777 27.9812,-82.4597 27.986,-82.4519 27.988,-82.4288 27.9904,-82.4061 27.992,-82.3844 27.9933,-82.3641 27.9952,-82.3545 27.9956,-82.3453 27.9962,-82.3364 27.998,-82.3279 28.002)
+LINESTRING(-97.7524 30.2139,-97.7609 30.2025,-97.769 30.1907,-97.7767 30.1786,-97.7838 30.1665,-97.7943 30.1447,-97.8028 30.1217,-97.8113 30.0987,-97.8216 30.0771,-97.8342 30.0563,-97.8475 30.0346,-97.8599 30.0126,-97.8697 29.991,-97.8726 29.9822,-97.8743 29.9729,-97.8746 29.9635,-97.8728 29.9545,-97.8804 29.9418,-97.8877 29.9283,-97.8954 29.9151,-97.9041 29.9033,-97.9487 29.8583,-98.0058 29.8028,-98.0585 29.7471,-98.0899 29.701,-98.1035 29.6944,-98.1179 29.69,-98.1321 29.686,-98.1455 29.6805,-98.1629 29.671,-98.1803 29.6616,-98.1976 29.652,-98.2146 29.6422,-98.2323 29.6322,-98.2505 29.6225,-98.2684 29.6127,-98.2858 29.6026,-98.3118 29.5853,-98.3316 29.5706,-98.3519 29.5568,-98.3793 29.5421,-98.3915 29.5293,-98.3936 29.5122,-98.3997 29.4917,-98.4243 29.4684,-98.4382 29.4607,-98.4522 29.453,-98.4649 29.446,-98.4776 29.439)
+LINESTRING(-82.6435 27.8995,-82.643 27.9001,-82.6088 27.927,-82.5715 27.9488,-82.5425 27.9619,-82.5399 27.9627)
+LINESTRING(-94.9131 29.3093,-94.9243 29.3173,-94.9322 29.3285,-94.9635 29.3493,-94.9944 29.3708,-95.0234 29.3939,-95.0493 29.4198,-95.0791 29.4573,-95.1109 29.5002,-95.1426 29.5416,-95.1723 29.5749,-95.1914 29.5922,-95.2117 29.6095,-95.2314 29.6271,-95.2491 29.6453,-95.2649 29.664,-95.2811 29.6827,-95.2986 29.7005,-95.3182 29.7162,-95.3296 29.7227,-95.3426 29.729,-95.3549 29.7357,-95.3645 29.7434)
+LINESTRING(-98.4776 29.439,-98.4826 29.4357,-98.4876 29.4323,-98.4925 29.4289,-98.4975 29.4256)
+LINESTRING(-100.643 30.5781,-100.619 30.5738,-100.594 30.5723,-100.569 30.5719,-100.544 30.5709,-100.512 30.5636,-100.478 30.5493,-100.446 30.5321,-100.417 30.5161,-100.382 30.4981,-100.347 30.4816,-100.31 30.4655,-100.268 30.4488,-100.242 30.4378,-100.23 30.4335,-100.221 30.4309,-100.146 30.4218,-100.085 30.4233,-100.026 30.4344,-99.9569 30.4543,-99.9276 30.4649,-99.9 30.4758,-99.8694 30.4842,-99.8314 30.4875,-99.7974 30.4811,-99.7659 30.4659,-99.7363 30.4481,-99.7081 30.4337,-99.6878 30.4255,-99.6625 30.4163,-99.6367 30.405,-99.615 30.3909,-99.598 30.3716,-99.5836 30.3496,-99.5694 30.328,-99.5525 30.3097,-99.5208 30.2887,-99.4708 30.259,-99.42 30.2299,-99.3855 30.211,-99.3599 30.2012,-99.3313 30.1944,-99.3032 30.1875,-99.2785 30.1778,-99.2632 30.1672,-99.2491 30.1546,-99.2354 30.1419,-99.2209 30.1312,-99.1936 30.1157,-99.1661 30.1018,-99.1375 30.0894,-99.1069 30.0782,-99.0944 30.0754,-99.0807 30.074,-99.0666 30.0725,-99.0532 30.0695,-99.0221 30.0555,-98.9743 30.031,-98.9279 30.0054,-98.9013 29.9884,-98.89
11 29.9764,-98.8818 29.9613,-98.8726 29.9458,-98.8625 29.9322,-98.8492 29.9189,-98.8345 29.906,-98.8198 29.8931,-98.8059 29.8798,-98.8003 29.8727,-98.7957 29.8648,-98.7911 29.8569,-98.7858 29.8498,-98.7786 29.8427,-98.7704 29.8353,-98.7541 29.8211,-98.7552 29.798,-98.7478 29.7866,-98.7339 29.7788,-98.7155 29.7661,-98.6996 29.7518,-98.6835 29.7365,-98.6688 29.7202,-98.6571 29.7031,-98.6352 29.6636,-98.6149 29.6249,-98.5972 29.5857,-98.5832 29.5441,-98.5624 29.5243,-98.5505 29.5065,-98.5396 29.4919,-98.5219 29.4818,-98.5181 29.4729,-98.5155 29.4634,-98.5139 29.4537,-98.5126 29.4442,-98.5103 29.4418,-98.5068 29.4376,-98.4975 29.4256)
+LINESTRING(-94.8255 29.2822,-94.8368 29.2825,-94.8514 29.2841,-94.86 29.2856)
+LINESTRING(-96.9018 29.6962,-96.9387 29.6942,-96.979 29.6941,-97.0193 29.6956,-97.0562 29.6986,-97.0691 29.7005,-97.0819 29.7027,-97.0948 29.7045,-97.108 29.7051,-97.1348 29.7042,-97.162 29.7029,-97.189 29.7012,-97.2159 29.6992,-97.2344 29.6958,-97.253 29.6898,-97.2714 29.6829,-97.2896 29.6767,-97.319 29.6696,-97.3519 29.6638,-97.3854 29.6597,-97.4163 29.6578,-97.468 29.6574,-97.5422 29.657,-97.614 29.6552,-97.6585 29.6509,-97.7121 29.6371,-97.7878 29.6191,-97.8644 29.6042,-97.9209 29.5998,-97.9265 29.6004,-97.9331 29.6011,-97.9396 29.6011,-97.9443 29.5999,-97.9722 29.5989,-98.006 29.5818,-98.037 29.5602,-98.0563 29.546,-98.0634 29.5437,-98.0705 29.5415,-98.0777 29.5393,-98.0848 29.537,-98.1333 29.5205,-98.1819 29.5039,-98.2302 29.487,-98.2786 29.4695,-98.2844 29.4678,-98.2902 29.4661,-98.3218 29.4575,-98.3541 29.449,-98.3862 29.44,-98.4171 29.4299,-98.4266 29.4227,-98.4386 29.4112,-98.4543 29.4008,-98.4753 29.3973)
+LINESTRING(-98.4975 29.4256,-98.4907 29.4165,-98.4838 29.4075,-98.4785 29.4008,-98.4753 29.3973)
+LINESTRING(-98.4975 29.4256,-98.5011 29.4182,-98.5047 29.4108,-98.5083 29.4034,-98.5119 29.396)
+LINESTRING(-80.8196 28.4134,-80.8114 28.3809,-80.7959 28.3388,-80.7775 28.3007,-80.7606 28.2801,-80.7385 28.2226,-80.7217 28.1864,-80.7104 28.1526,-80.705 28.1023,-80.7049 28.0944,-80.7049 28.0865,-80.7042 28.0779,-80.702 28.0713,-80.6944 28.0645,-80.6822 28.0571,-80.6699 28.0499,-80.6619 28.0433,-80.647 28.0224,-80.6321 28.0015,-80.6233 27.9882,-80.6171 27.9767,-80.6119 27.9632,-80.6071 27.9457,-80.6012 27.9209,-80.5925 27.8855,-80.5921 27.8761,-80.5923 27.8662,-80.5525 27.8172,-80.5471 27.7919,-80.5521 27.7662,-80.5438 27.7163,-80.5372 27.6986,-80.5293 27.6794,-80.5221 27.6601,-80.5176 27.6421,-80.5171 27.6359,-80.5165 27.6296,-80.5158 27.6224,-80.5133 27.6143,-80.5094 27.6076,-80.4936 27.583,-80.4781 27.5631,-80.4585 27.5452,-80.4433 27.5263,-80.4369 27.5127,-80.4319 27.5001,-80.4274 27.4889,-80.4224 27.4796,-80.4129 27.4736,-80.4026 27.4681,-80.3914 27.4589,-80.3849 27.446,-80.3834 27.4279,-80.3863 27.4141,-80.3935 27.3992)
+LINESTRING(-80.3935 27.3992,-80.4104 27.4197,-80.4288 27.442,-80.4493 27.4646,-80.4678 27.4862,-80.489 27.4878,-80.5183 27.4871,-80.5525 27.4881,-80.5709 27.4909,-80.5912 27.514,-80.6051 27.5282,-80.6198 27.5414,-80.6428 27.5614,-80.7708 27.5645,-80.7859 27.5671,-80.7968 27.5735,-80.8054 27.5827,-80.8137 27.5939,-80.8324 27.6184,-80.8497 27.6396,-80.8679 27.6598,-80.8895 27.6814,-80.8944 27.6901,-80.8956 27.6998,-80.8973 27.7102,-80.904 27.7205,-80.928 27.742,-80.9536 27.7637,-80.9784 27.7859,-81 27.8091,-81.005 27.8208,-81.0065 27.835,-81.0078 27.8498,-81.0124 27.8633,-81.0204 27.8724,-81.0288 27.8808,-81.0647 27.9274,-81.0796 27.9444,-81.0969 27.9612,-81.1147 27.9777,-81.1314 27.9937,-81.1439 28.0027,-81.1594 28.0104,-81.176 28.0185,-81.192 28.0289,-81.2759 28.0941,-81.2866 28.1234,-81.2945 28.1523,-81.301 28.1815,-81.3072 28.2116,-81.3161 28.2222,-81.3239 28.2363,-81.3291 28.2512,-81.3303 28.2642,-81.335 28.2723,-81.337 28.2813,-81.3511 28.2959,-81.3612 28.306,-81.3675 28.3138,-81.381 28.3405,-81.3886 28
.3596,-81.3921 28.379,-81.3933 28.4069,-81.395 28.4128,-81.3989 28.4208,-81.4078 28.4334)
+LINESTRING(-82.6593 27.7775,-82.6604 27.7901,-82.6627 27.8026,-82.6651 27.8149,-82.6663 27.8269,-82.6656 27.8378,-82.664 27.8485,-82.6627 27.8596,-82.663 27.8715,-82.6435 27.8995)
+LINESTRING(-82.6778 27.6997,-82.6779 27.7046,-82.6758 27.7066,-82.6738 27.7087,-82.6723 27.7214,-82.6708 27.7342,-82.6693 27.7469,-82.6678 27.7597,-82.6659 27.7615,-82.6639 27.7633,-82.662 27.7651,-82.66 27.767,-82.6593 27.7695,-82.6591 27.7722,-82.6592 27.7749,-82.6593 27.7775)
+LINESTRING(-82.3279 28.002,-82.3266 27.9781,-82.3281 27.9527,-82.3333 27.9281,-82.3432 27.9066,-82.3448 27.9033,-82.3464 27.8999,-82.348 27.8966,-82.3496 27.8933,-82.348 27.8627,-82.3482 27.831,-82.3522 27.7999,-82.3622 27.7711,-82.3718 27.7562,-82.379 27.7476,-82.3834 27.7369,-82.3843 27.7157,-82.3914 27.7092,-82.3998 27.7047,-82.4084 27.7008,-82.4165 27.6959,-82.4234 27.6881,-82.4294 27.6776,-82.4352 27.6669,-82.4413 27.6581,-82.4455 27.6548,-82.4508 27.6523,-82.4561 27.65,-82.4605 27.6473,-82.4751 27.6346,-82.4907 27.6203,-82.5047 27.605,-82.5148 27.5896)
+LINESTRING(-82.5148 27.5896,-82.5315 27.5887,-82.5487 27.5876,-82.5657 27.5868,-82.5798 27.5868)
+LINESTRING(-82.5798 27.5868,-82.5824 27.5868,-82.61 27.5891,-82.6305 27.5953,-82.6471 27.6084,-82.6632 27.6313,-82.6675 27.6383,-82.6718 27.6454,-82.6754 27.6527,-82.6776 27.6604,-82.6774 27.6672,-82.6774 27.6818,-82.6777 27.6932,-82.6778 27.6997)
+LINESTRING(-80.3935 27.3992,-80.388 27.3882,-80.3818 27.3764,-80.3763 27.3646,-80.3729 27.3537,-80.3725 27.3417,-80.3735 27.3268,-80.3742 27.3122,-80.3726 27.3012,-80.369 27.2898,-80.3663 27.2778,-80.3634 27.2658,-80.3597 27.2542,-80.3415 27.2136,-80.326 27.1889,-80.3075 27.1654,-80.2805 27.1281,-80.2669 27.1032,-80.2614 27.0848,-80.2588 27.0638,-80.2541 27.0314,-80.2418 27.0202,-80.2288 27.0094,-80.2162 26.9982,-80.2051 26.9862,-80.1881 26.9626,-80.1761 26.9414,-80.1683 26.9219,-80.164 26.9032)
+LINESTRING(-80.164 26.9032,-80.1348 26.8478,-80.1163 26.7922,-80.105 26.7358,-80.098 26.6784)
+LINESTRING(-80.164 26.9032,-80.1625 26.8804,-80.1635 26.8561,-80.1659 26.8289,-80.1683 26.7972,-80.1709 26.742,-80.1736 26.7221,-80.1822 26.7108,-80.2029 26.6811)
+LINESTRING(-82.0365 26.9751,-82.0378 26.9792,-82.0393 26.9928,-82.042 27.0066,-82.0493 27.0209,-82.0685 27.0452,-82.093 27.0709,-82.1216 27.0913,-82.153 27.0998,-82.1863 27.0999,-82.2197 27.1,-82.2625 27.1004,-82.2859 27.1016,-82.2947 27.1047,-82.3035 27.1088,-82.3126 27.1125,-82.3218 27.1142,-82.3421 27.1125,-82.3627 27.1102,-82.382 27.1125,-82.3985 27.1246,-82.4074 27.1358,-82.4168 27.1472,-82.4259 27.1588,-82.4338 27.1704,-82.4387 27.184,-82.4417 27.2007,-82.446 27.2169,-82.4547 27.2292,-82.4537 27.2363,-82.4521 27.243,-82.4504 27.2497,-82.4486 27.2563,-82.4468 27.2715,-82.447 27.2884,-82.448 27.3055,-82.4484 27.3213,-82.4475 27.3374,-82.446 27.3544,-82.4455 27.3714,-82.4472 27.3872,-82.45 27.3965,-82.4533 27.4056,-82.4566 27.4148,-82.4588 27.4243,-82.4594 27.4352,-82.4588 27.4475,-82.4586 27.4596,-82.4601 27.4695,-82.4729 27.4929,-82.4889 27.509,-82.503 27.5229,-82.51 27.5393,-82.5112 27.5519,-82.5124 27.5644,-82.5136 27.577,-82.5148 27.5896)
+LINESTRING(-82.0258 26.945,-82.0278 26.9511,-82.0338 26.9657,-82.0365 26.9751)
+LINESTRING(-98.4753 29.3973,-98.4685 29.3845,-98.4572 29.3747,-98.4436 29.3662,-98.43 29.3577,-98.4228 29.3472,-98.4166 29.3313,-98.4096 29.3156,-98.4001 29.3059,-98.4056 29.2675,-98.4128 29.2159,-98.4232 29.1673,-98.4383 29.1376,-98.4393 29.1102,-98.4373 29.0828,-98.4349 29.0555,-98.4346 29.0284,-98.4369 28.9979,-98.4393 28.9678,-98.4406 28.9377,-98.4394 28.9068,-98.4098 28.8869,-98.3892 28.8601,-98.3715 28.831,-98.3509 28.804,-98.3382 28.7941,-98.324 28.786,-98.3105 28.7776,-98.2997 28.767,-98.2905 28.7477,-98.2839 28.7243,-98.2781 28.7,-98.2709 28.6779,-98.2659 28.6701,-98.2593 28.6639,-98.2523 28.6581,-98.2461 28.6513,-98.2425 28.6446,-98.2403 28.6378,-98.2384 28.6311,-98.2357 28.6245,-98.2264 28.6119,-98.2144 28.5999,-98.203 28.5878,-98.1953 28.5746,-98.1917 28.5617,-98.189 28.5481,-98.1866 28.5345,-98.1835 28.5211,-98.1744 28.5127,-98.1652 28.5043,-98.1561 28.4959,-98.147 28.4874,-98.137 28.4775,-98.1276 28.4677,-98.1175 28.4583,-98.1053 28.4499,-98.0986 28.4473,-98.0926 28.4428,-98.0735 28.4181,-98.0
529 28.3911,-98.0341 28.3629,-98.0206 28.3344)
+LINESTRING(-80.098 26.6784,-80.0977 26.6764,-80.098 26.6558,-80.0983 26.6292,-80.1004 26.6041,-80.1058 26.5879,-80.1093 26.5879,-80.1128 26.5878,-80.1163 26.5878,-80.1198 26.5877,-80.1201 26.5804,-80.1204 26.5732,-80.1208 26.5659,-80.1211 26.5586,-80.122 26.5558,-80.123 26.5529,-80.124 26.55,-80.1249 26.5471,-80.1254 26.5289,-80.1253 26.5109,-80.1246 26.4929,-80.1233 26.4747,-80.1222 26.4495,-80.1221 26.4243,-80.1222 26.3993,-80.1213 26.3743,-80.1195 26.36,-80.1171 26.3456,-80.1152 26.331,-80.1153 26.3162,-80.1175 26.3025,-80.122 26.2849,-80.128 26.2678,-80.1351 26.2554,-80.1346 26.2441,-80.1347 26.2328,-80.135 26.2214,-80.1351 26.2101,-80.1529 26.1862,-80.1639 26.1523,-80.1688 26.116,-80.1684 26.0853)
+LINESTRING(-80.2465 26.0952,-80.227 26.0927,-80.2075 26.0903,-80.1879 26.0878,-80.1684 26.0853)
+LINESTRING(-80.2465 26.0952,-80.2493 26.1234,-80.2507 26.1531,-80.2469 26.1816,-80.2342 26.2058,-80.2247 26.2163,-80.2127 26.2298,-80.2019 26.2436,-80.1957 26.2553,-80.1966 26.2677,-80.1974 26.2801,-80.198 26.2925,-80.1986 26.305,-80.2001 26.3667,-80.2012 26.4281,-80.2022 26.4894,-80.2035 26.5507,-80.2038 26.5853,-80.2036 26.6267,-80.2032 26.6539,-80.2029 26.6811)
+LINESTRING(-80.4419 26.1461,-80.393 26.1334,-80.3442 26.1207,-80.2954 26.108,-80.2465 26.0952)
+LINESTRING(-80.2308 25.9383,-80.2419 25.9586,-80.2488 25.9805,-80.2499 26.0002,-80.2435 26.0141,-80.2442 26.0343,-80.245 26.0546,-80.2458 26.0749,-80.2465 26.0952)
+LINESTRING(-80.1684 26.0853,-80.1676 26.0658,-80.1672 26.0495,-80.1683 26.0328,-80.172 26.012,-80.1731 25.9985,-80.172 25.9843,-80.1707 25.9698,-80.1715 25.9559,-80.1769 25.9523,-80.1837 25.9471,-80.1898 25.9412,-80.193 25.9358,-80.1994 25.9331,-80.2055 25.9296,-80.2113 25.9256,-80.2157 25.9223)
+LINESTRING(-80.2157 25.9223,-80.2194 25.9252,-80.2233 25.929,-80.2271 25.9334,-80.2308 25.9383)
+LINESTRING(-97.6306 27.9023,-97.6409 27.9212,-97.6525 27.9424,-97.6651 27.9629,-97.6784 27.9797,-97.7046 28.003,-97.7331 28.0245,-97.7614 28.0464,-97.7867 28.0709,-97.7945 28.0814,-97.8014 28.0928,-97.8082 28.1041,-97.816 28.1143,-97.8253 28.1235,-97.8355 28.1323,-97.8456 28.1411,-97.8547 28.1505,-97.8727 28.1739,-97.8878 28.198,-97.9019 28.2223,-97.9168 28.2464,-97.9392 28.2697,-97.9681 28.2902,-97.9972 28.3108,-98.0206 28.3344)
+LINESTRING(-97.291 27.9273,-97.3006 27.9123,-97.31 27.8974,-97.3203 27.8831,-97.3223 27.881)
+LINESTRING(-81.6722 26.1552,-81.6325 26.1544,-81.5928 26.1535,-81.5531 26.1529,-81.5135 26.1529,-81.4634 26.1542,-81.3848 26.1564,-81.3075 26.1575,-81.2615 26.1558,-81.2564 26.1582,-81.2515 26.1609,-81.2467 26.1639,-81.2425 26.1673,-81.1876 26.1673,-81.1328 26.1678,-81.078 26.1686,-81.0232 26.1697,-80.9846 26.1705,-80.946 26.1713,-80.9074 26.1721,-80.8688 26.1729,-80.8257 26.1679,-80.7821 26.1597,-80.7386 26.1514,-80.6954 26.1462,-80.6326 26.144,-80.5687 26.1443,-80.5048 26.1454,-80.4419 26.1461)
+LINESTRING(-81.6722 26.1552,-81.6866 26.1603,-81.6997 26.1629,-81.7127 26.1645,-81.7268 26.1666,-81.7324 26.1707,-81.7361 26.1967,-81.7378 26.2177,-81.7401 26.2379,-81.7436 26.259,-81.7446 26.2718,-81.7441 26.2852,-81.7436 26.2986,-81.7447 26.3117,-81.7471 26.3207,-81.7501 26.3293,-81.7525 26.338,-81.7534 26.3475,-81.7584 26.3537,-81.7641 26.3616,-81.7695 26.3696,-81.7734 26.3762,-81.7734 26.3831,-81.7735 26.39,-81.7757 26.4113,-81.7807 26.4311,-81.7868 26.4507,-81.7922 26.4713,-81.7952 26.4943,-81.7956 26.5175,-81.7946 26.5407,-81.7933 26.5638,-81.7951 26.5803,-81.7998 26.5964,-81.8043 26.6119,-81.8054 26.6269,-81.8031 26.6436,-81.8008 26.66,-81.7993 26.6766,-81.7995 26.6942,-81.8072 26.712,-81.8171 26.7202,-81.8288 26.725,-81.8418 26.7329,-81.8584 26.7477,-81.8743 26.7628,-81.8898 26.7781,-81.9052 26.7938,-81.9157 26.8027,-81.9283 26.8115,-81.9414 26.8204,-81.9531 26.8295,-81.9612 26.8366,-81.9685 26.8444,-81.9705 26.8504,-81.972 26.8565,-81.9735 26.8626,-81.9755 26.8686,-81.981 26.8752,-81.9912 26.8853,-
82.0023 26.8966,-82.0102 26.9066,-82.0172 26.9209,-82.0227 26.9359,-82.0258 26.945)
+LINESTRING(-97.6229 27.8662,-97.6255 27.8742,-97.6269 27.8836,-97.6282 27.8933,-97.6306 27.9023)
+LINESTRING(-97.3223 27.881,-97.3329 27.8699,-97.3537 27.8553,-97.3754 27.841,-97.3917 27.8228,-97.3925 27.8184)
+LINESTRING(-80.2157 25.9223,-80.2167 25.9214,-80.216 25.8877,-80.2159 25.8526,-80.2142 25.8175,-80.2091 25.784)
+LINESTRING(-80.3463 25.7817,-80.339 25.7816,-80.3318 25.7815,-80.3263 25.7813,-80.3207 25.7811,-80.296 25.7839,-80.2709 25.7855,-80.2457 25.785,-80.2208 25.7816,-80.2179 25.7822,-80.2149 25.7828,-80.212 25.7834,-80.2091 25.784)
+LINESTRING(-80.2308 25.9383,-80.2609 25.9382,-80.291 25.9381,-80.3211 25.9381,-80.3513 25.938,-80.3529 25.9363,-80.3546 25.9346,-80.3517 25.897,-80.3493 25.8582,-80.3475 25.8194,-80.3463 25.7817)
+LINESTRING(-80.3852 25.7755,-80.3782 25.7786,-80.3687 25.7805,-80.3577 25.7814,-80.3463 25.7817)
+LINESTRING(-99.4427 27.7668,-99.4299 27.7701,-99.4223 27.7727,-99.3902 27.8921,-99.3601 28.0086,-99.3276 28.1246,-99.2935 28.2405,-99.2874 28.2603,-99.2811 28.28,-99.2753 28.2998,-99.2706 28.3199,-99.2802 28.3477,-99.2724 28.3832,-99.2576 28.4193,-99.2461 28.4487,-99.2453 28.4542,-99.2446 28.4597,-99.2439 28.4651,-99.2431 28.4706,-99.2425 28.4761,-99.2419 28.4816,-99.2402 28.4925,-99.2377 28.5011,-99.2347 28.5096,-99.2259 28.5362,-99.2172 28.5631,-99.2092 28.5901,-99.2028 28.6172,-99.2017 28.6293,-99.2019 28.6417,-99.201 28.6541,-99.1966 28.6658,-99.1877 28.6778,-99.1791 28.6873,-99.1711 28.6982,-99.164 28.7143,-99.1527 28.7486,-99.1414 28.783,-99.1302 28.8173,-99.1189 28.8516,-99.1168 28.8643,-99.1178 28.8753,-99.1193 28.8861,-99.1184 28.898,-99.1124 28.9124,-99.1029 28.9261,-99.0927 28.9396,-99.0845 28.9537,-99.0764 28.9721,-99.0682 28.9905,-99.0601 29.0089,-99.0519 29.0273,-99.0206 29.044,-98.9872 29.0591,-98.9547 29.0753,-98.9262 29.0949,-98.9127 29.0958,-98.9011 29.0999,-98.8909 29.1063,-98.8816 29.114
2,-98.8566 29.1355,-98.8184 29.1663,-98.7805 29.1954,-98.7562 29.2115,-98.7258 29.2232,-98.6942 29.2331,-98.6628 29.2436,-98.6328 29.2568,-98.6197 29.2658,-98.6087 29.2763,-98.5982 29.2866,-98.5867 29.2952,-98.5696 29.3087,-98.5559 29.3254,-98.5424 29.3429,-98.5262 29.359,-98.5195 29.3666,-98.5151 29.3761,-98.5128 29.3863,-98.5119 29.396)
+LINESTRING(-99.4788 27.5302,-99.4769 27.5486,-99.4768 27.5653,-99.4789 27.5797,-99.4838 27.5914,-99.4882 27.5953,-99.4926 27.5992,-99.497 27.6031,-99.5015 27.607,-99.5002 27.6611,-99.4824 27.6991,-99.4596 27.7309,-99.4427 27.7668)
+LINESTRING(-97.7192 26.1891,-97.7166 26.2308,-97.7184 26.2666,-97.7293 26.2947,-97.754 26.3136)
+LINESTRING(-98.249 26.1865,-98.2576 26.1877,-98.2818 26.1909,-98.3061 26.1942,-98.3304 26.1975,-98.3369 26.2033,-98.3432 26.2093,-98.3494 26.2154,-98.3556 26.2215)
+LINESTRING(-98.1805 26.2075,-98.1962 26.2045,-98.2066 26.1955,-98.2171 26.1867,-98.2333 26.1844,-98.249 26.1865)
+LINESTRING(-97.7192 26.1891,-97.7352 26.1894,-97.7544 26.1902,-97.7735 26.1907,-97.7892 26.1897,-97.7911 26.1891,-97.7926 26.1883,-97.7941 26.1872,-97.7957 26.1861,-97.8083 26.1798,-97.818 26.1763,-97.8281 26.1739,-97.8416 26.1709,-97.8436 26.17,-97.846 26.1685,-97.8484 26.1671,-97.8503 26.1665,-97.8734 26.1662,-97.8974 26.1659,-97.9212 26.164,-97.9437 26.1591,-97.9504 26.1628,-97.9572 26.1665,-97.9655 26.1706,-97.971 26.1726,-98.0237 26.1788,-98.0731 26.187,-98.1222 26.1968,-98.1739 26.2078,-98.1754 26.208,-98.1772 26.2078,-98.1788 26.2077,-98.1805 26.2075)
+LINESTRING(-65.6912 18.316,-65.6918 18.317,-65.6925 18.3181,-65.6931 18.3191,-65.6938 18.3201,-65.6993 18.328,-65.7056 18.3368,-65.7128 18.3448,-65.7209 18.3501,-65.7408 18.3559,-65.7623 18.3597,-65.7839 18.3623,-65.8044 18.3643,-65.8164 18.3655,-65.8284 18.3666,-65.8404 18.3678,-65.8524 18.3689,-65.8549 18.3692,-65.8574 18.3694,-65.8599 18.3696,-65.8625 18.3699,-65.8787 18.3707,-65.895 18.3715,-65.9113 18.3723,-65.9275 18.3731)
+LINESTRING(-66.0832 18.3799,-66.0856 18.3613,-66.0877 18.3452,-66.083 18.3315,-66.0647 18.3202,-66.0585 18.312,-66.0562 18.2975,-66.0565 18.2815,-66.0581 18.269)
+LINESTRING(-66.4942 18.4194,-66.4642 18.4264,-66.4281 18.4347,-66.3919 18.4394,-66.3618 18.4358,-66.3553 18.431,-66.3474 18.4224,-66.3388 18.413,-66.3305 18.4056)
+LINESTRING(-65.8567 18.1457,-65.8675 18.1566,-65.8789 18.165,-65.8909 18.1726,-65.9036 18.1811,-65.9178 18.1916,-65.928 18.2005,-65.936 18.2114,-65.944 18.2278,-65.9458 18.2316,-65.9471 18.234,-65.9489 18.236,-65.9523 18.2387,-65.9547 18.2402,-65.9571 18.2418,-65.9595 18.2434,-65.962 18.245,-65.9924 18.2502,-66.0126 18.2462,-66.0315 18.2476,-66.0581 18.269)
+LINESTRING(-66.2977 18.0013,-66.2684 18.0065,-66.2572 18.0165,-66.2545 18.0325,-66.2503 18.0562,-66.2467 18.0625,-66.2412 18.0676,-66.2363 18.0709,-66.2341 18.0721,-66.2246 18.0827,-66.2064 18.0942,-66.1868 18.1048,-66.173 18.1131,-66.1583 18.1229,-66.1452 18.134,-66.1326 18.1455,-66.1191 18.1562,-66.1041 18.1653,-66.0898 18.1741,-66.0779 18.1849,-66.07 18.2002,-66.0695 18.2021,-66.0691 18.204,-66.0687 18.2059,-66.0682 18.2079,-66.0674 18.211,-66.0667 18.2142,-66.0659 18.2174,-66.0651 18.2205,-66.0643 18.2238,-66.0635 18.227,-66.063 18.2303,-66.0625 18.2337,-66.0614 18.2425,-66.0603 18.2513,-66.0592 18.2602,-66.0581 18.269)
+LINESTRING(-66.2977 18.0013,-66.3024 18.0016,-66.3066 18.0032,-66.3108 18.0055,-66.3153 18.0075,-66.3276 18.0123,-66.34 18.017,-66.3524 18.0217,-66.3648 18.0264,-66.3986 18.0378,-66.4338 18.047,-66.4692 18.0536,-66.5039 18.0571,-66.526 18.0553,-66.5468 18.0489,-66.5646 18.0377,-66.5778 18.0213,-66.5845 18.0202,-66.5911 18.0192,-66.5978 18.0181,-66.6045 18.017,-66.608 18.0164,-66.6115 18.0159,-66.615 18.0153,-66.6185 18.0147,-66.6327 18.0067,-66.647 17.9975,-66.6623 17.9914,-66.6793 17.9929,-66.7014 18.0025,-66.7308 18.017,-66.7593 18.0329,-66.7787 18.0466,-66.7929 18.0481,-66.8062 18.0468,-66.8189 18.0432,-66.8317 18.038,-66.8373 18.0353,-66.843 18.0326,-66.8487 18.03,-66.8544 18.0273,-66.8698 18.0205,-66.8847 18.0161,-66.9003 18.0154,-66.9178 18.0195,-66.9442 18.0337,-66.9662 18.0524,-66.9881 18.0724,-67.0141 18.0905,-67.0175 18.0923,-67.0209 18.0941,-67.0244 18.0959,-67.0278 18.0976,-67.0488 18.1082,-67.068 18.1186,-67.0864 18.1305,-67.105 18.1452,-67.1138 18.1638,-67.1144 18.1768,-67.1106 18.1891,-67.106
1 18.2055,-67.1065 18.2129,-67.1098 18.219,-67.1149 18.2245,-67.1209 18.2298,-67.1234 18.2353,-67.1247 18.239,-67.125 18.2426,-67.1246 18.2483)
+LINESTRING(-89.0047 40.5367,-89.0074 40.5726,-89.0076 40.6107,-89.0138 40.6478,-89.0346 40.6806,-89.0342 40.7277,-89.0363 40.7747,-89.039 40.8218,-89.0407 40.8689,-89.0435 40.8708,-89.0464 40.8727,-89.0493 40.8747,-89.0522 40.8766,-89.053 40.9149,-89.0543 40.9531,-89.0564 40.9914,-89.0597 41.0295,-89.0618 41.0308,-89.064 41.0321,-89.0661 41.0333,-89.0682 41.0346,-89.0735 41.103,-89.0806 41.1743,-89.0857 41.245,-89.0855 41.3114,-89.0851 41.313,-89.0846 41.3146,-89.0842 41.3162,-89.0838 41.3178,-89.081 41.3238,-89.0758 41.3291,-89.0701 41.3342,-89.0657 41.3395,-89.0633 41.3457,-89.0619 41.3526,-89.0605 41.3596,-89.0582 41.3662)
+LINESTRING(-88.1968 41.487,-88.1969 41.4445,-88.192 41.4004,-88.1885 41.3567,-88.1926 41.3149,-88.2229 41.2992,-88.2367 41.2805,-88.2437 41.2618,-88.2538 41.2461,-88.2694 41.2334,-88.286 41.2211,-88.3024 41.2087,-88.3176 41.1954,-88.3214 41.1908,-88.3247 41.1857,-88.3319 41.176,-88.3511 41.1594,-88.3725 41.1427,-88.3948 41.1265,-88.4165 41.1115,-88.4294 41.1103,-88.4378 41.105,-88.4426 41.0969,-88.4449 41.0872,-88.4635 41.0712,-88.4816 41.0552,-88.4993 41.0389,-88.5221 41.0178,-88.5349 41.0103,-88.5393 41.0054,-88.5405 40.9997,-88.5419 40.9945,-88.5666 40.9692,-88.5863 40.9518,-88.6092 40.9369,-88.6432 40.9194,-88.6698 40.9016,-88.6752 40.8859,-88.6741 40.8681,-88.6812 40.8439,-88.6919 40.8222,-88.7021 40.7996,-88.7138 40.7776,-88.7289 40.758,-88.7383 40.7452,-88.7398 40.736,-88.7393 40.7275,-88.7427 40.7164,-88.7505 40.7028,-88.7594 40.6889,-88.7695 40.6746,-88.7809 40.6595,-88.7881 40.659,-88.7964 40.6577,-88.8106 40.6528,-88.8153 40.6447,-88.8184 40.6357,-88.8215 40.6269,-88.8261 40.6193,-88.8388 40.6084
,-88.8578 40.5958,-88.8781 40.5847,-88.8949 40.578,-88.9058 40.5665,-88.9178 40.5566,-88.9309 40.5475,-88.9454 40.5387,-88.9602 40.5381,-88.9751 40.5377,-88.9899 40.5374,-89.0271 40.5359)
+LINESTRING(-76.0036 44.3458,-75.9982 44.3216,-75.9866 44.3056)
+LINESTRING(-70.776 43.0827,-70.7629 43.0942,-70.7622 43.0946)
+LINESTRING(-70.8583 42.9591,-70.8512 42.9927,-70.8275 43.0301,-70.7954 43.0657,-70.776 43.0827)
+LINESTRING(-71.4081 41.8176,-71.3989 41.8197,-71.3777 41.8176,-71.3736 41.8166)
+LINESTRING(-71.1643 41.7023,-71.1401 41.6824,-71.1092 41.6647,-71.0539 41.6518,-71.0344 41.6501,-70.9849 41.6475,-70.9434 41.6508,-70.9177 41.6561,-70.886 41.6613,-70.8478 41.6772,-70.8016 41.7035,-70.7841 41.7186,-70.7704 41.7352,-70.7553 41.7547,-70.7387 41.7739,-70.7366 41.7762,-70.7346 41.7786,-70.7326 41.781,-70.7306 41.7833)
+LINESTRING(-73.8874 40.6257,-73.8915 40.6196,-73.8918 40.619,-73.8972 40.6135,-73.9097 40.603,-73.9292 40.5903,-73.9433 40.5863,-73.9494 40.5852,-73.9497 40.5852,-73.976 40.5841,-73.9908 40.5907,-74.0091 40.5997,-74.0201 40.6054,-74.021 40.6058)
+LINESTRING(-74.0268 40.6161,-74.0252 40.6178,-74.0206 40.6254,-74.0188 40.6333,-74.0215 40.6413,-74.0133 40.6472,-74.0057 40.6526,-73.9997 40.6589,-73.9961 40.6669,-73.9913 40.6783,-73.9795 40.6949,-73.9896 40.7086,-73.9982 40.7168)
+LINESTRING(-73.9605 40.7661,-73.9789 40.7501,-73.9806 40.7484)
+LINESTRING(-73.9806 40.7484,-74.0085 40.7227)
+LINESTRING(-73.97 40.7447,-73.9806 40.7484)
+LINESTRING(-73.7215 41.0234,-73.7236 40.9975,-73.7337 40.9755,-73.7507 40.9557,-73.7695 40.9367,-73.779 40.9274,-73.7946 40.9142,-73.8115 40.9032,-73.825 40.9005,-73.8379 40.8818,-73.8616 40.8619,-73.8842 40.846,-73.8944 40.8395,-73.905 40.8301,-73.9165 40.8172,-73.9257 40.8058,-73.9295 40.8008,-73.9605 40.7661)
+LINESTRING(-74.2488 40.5247,-74.2334 40.5223,-74.2071 40.5215)
+LINESTRING(-74.1629 40.6155,-74.1535 40.6115,-74.1296 40.608,-74.0937 40.6066,-74.0571 40.6075,-74.047 40.6089)
+LINESTRING(-74.2071 40.5215,-74.2035 40.532,-74.1994 40.5415,-74.1899 40.5487,-74.1817 40.561,-74.1779 40.5783,-74.1721 40.6017,-74.1629 40.6155)
+LINESTRING(-76.5621 39.2702,-76.5628 39.2696,-76.5725 39.2577,-76.5809 39.2447,-76.5877 39.2336,-76.5912 39.234)
+LINESTRING(-74.9263 38.9691,-74.907 38.9949,-74.8907 39.0146,-74.874 39.034,-74.8574 39.0537,-74.825 39.0981,-74.7906 39.1395,-74.754 39.1795,-74.7151 39.2194,-74.6924 39.2408,-74.6673 39.2658,-74.6515 39.2871)
+LINESTRING(-122.333 37.8205,-122.322 37.8241,-122.308 37.8261,-122.294 37.8314)
+LINESTRING(-81.538 31.2,-81.5397 31.1975,-81.5482 31.1827,-81.5498 31.1797)
+LINESTRING(-87.1596 30.5095,-87.127 30.5303,-87.1136 30.5335)
+LINESTRING(-81.4311 30.2579,-81.4228 30.2582,-81.4147 30.2575)
+LINESTRING(-94.86 29.2856,-94.8659 29.2867,-94.877 29.2896,-94.8896 29.2954,-94.9077 29.3054,-94.9131 29.3093)
+LINESTRING(-80.6027 28.4059,-80.6529 28.4072,-80.664 28.4076)
+LINESTRING(-97.3925 27.8184,-97.408 27.792,-97.4181 27.791,-97.4311 27.7895,-97.4455 27.7893,-97.4612 27.7903,-97.4781 27.7924,-97.5141 27.8054,-97.5548 27.8249,-97.5934 27.8467,-97.6229 27.8662)
+LINESTRING(-84.3439 46.5063,-84.3438 46.5045)
+LINESTRING(-97.5019 25.8768,-97.4959 25.9305,-97.5024 25.9511,-97.5104 25.9807,-97.5169 26.011,-97.522 26.0417,-97.533 26.0591,-97.5568 26.0793,-97.5858 26.1001,-97.6122 26.1196,-97.6386 26.1268,-97.6688 26.1469,-97.6974 26.1708,-97.7192 26.1891)
Added: sandbox/ggl/formal_review/libs/ggl/example/ggl_examples.sln
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/ggl_examples.sln 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,43 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "01_point_example", "01_point_example.vcproj", "{E7BFC111-F0E5-420F-869C-1FC3212270B5}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "02_linestring_example", "02_linestring_example.vcproj", "{D5CE1A26-1EB7-44A4-84F9-526CFA8C2B74}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "03_polygon_example", "03_polygon_example.vcproj", "{1E299DA7-CFD1-4586-B0B0-1ABF2A32ED5B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "06_transformation_example", "06_transformation_example.vcproj", "{34346EC5-1EE8-49D5-AF24-D915B4D7D144}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "07_graph_route_example", "07_graph_route_example.vcproj", "{47D30DD8-CBB1-4527-811F-F0193E22B317}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {E7BFC111-F0E5-420F-869C-1FC3212270B5}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E7BFC111-F0E5-420F-869C-1FC3212270B5}.Debug|Win32.Build.0 = Debug|Win32
+ {E7BFC111-F0E5-420F-869C-1FC3212270B5}.Release|Win32.ActiveCfg = Release|Win32
+ {E7BFC111-F0E5-420F-869C-1FC3212270B5}.Release|Win32.Build.0 = Release|Win32
+ {D5CE1A26-1EB7-44A4-84F9-526CFA8C2B74}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D5CE1A26-1EB7-44A4-84F9-526CFA8C2B74}.Debug|Win32.Build.0 = Debug|Win32
+ {D5CE1A26-1EB7-44A4-84F9-526CFA8C2B74}.Release|Win32.ActiveCfg = Release|Win32
+ {D5CE1A26-1EB7-44A4-84F9-526CFA8C2B74}.Release|Win32.Build.0 = Release|Win32
+ {1E299DA7-CFD1-4586-B0B0-1ABF2A32ED5B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1E299DA7-CFD1-4586-B0B0-1ABF2A32ED5B}.Debug|Win32.Build.0 = Debug|Win32
+ {1E299DA7-CFD1-4586-B0B0-1ABF2A32ED5B}.Release|Win32.ActiveCfg = Release|Win32
+ {1E299DA7-CFD1-4586-B0B0-1ABF2A32ED5B}.Release|Win32.Build.0 = Release|Win32
+ {34346EC5-1EE8-49D5-AF24-D915B4D7D144}.Debug|Win32.ActiveCfg = Debug|Win32
+ {34346EC5-1EE8-49D5-AF24-D915B4D7D144}.Debug|Win32.Build.0 = Debug|Win32
+ {34346EC5-1EE8-49D5-AF24-D915B4D7D144}.Release|Win32.ActiveCfg = Release|Win32
+ {34346EC5-1EE8-49D5-AF24-D915B4D7D144}.Release|Win32.Build.0 = Release|Win32
+ {47D30DD8-CBB1-4527-811F-F0193E22B317}.Debug|Win32.ActiveCfg = Debug|Win32
+ {47D30DD8-CBB1-4527-811F-F0193E22B317}.Debug|Win32.Build.0 = Debug|Win32
+ {47D30DD8-CBB1-4527-811F-F0193E22B317}.Release|Win32.ActiveCfg = Release|Win32
+ {47D30DD8-CBB1-4527-811F-F0193E22B317}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
Added: sandbox/ggl/formal_review/libs/ggl/example/soci_examples.sln
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/soci_examples.sln 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,37 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x03_a_soci_example", "x03_a_soci_example.vcproj", "{C3B3143D-F354-4036-9DA1-5975D8A4F166}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x03_b_soci_example", "x03_b_soci_example.vcproj", "{5EFD08EE-10CB-4D3E-9907-4E9A7F3AB1C1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x03_c_soci_example", "x03_c_soci_example.vcproj", "{5EFD08FE-10CB-4D3E-9907-4E9A2F3AB1C1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x03_d_soci_example", "x03_d_soci_example.vcproj", "{5EFD08FE-10CB-4D3E-9917-4E9A2F3AB1C1}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {C3B3143D-F354-4036-9DA1-5975D8A4F166}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C3B3143D-F354-4036-9DA1-5975D8A4F166}.Debug|Win32.Build.0 = Debug|Win32
+ {C3B3143D-F354-4036-9DA1-5975D8A4F166}.Release|Win32.ActiveCfg = Release|Win32
+ {C3B3143D-F354-4036-9DA1-5975D8A4F166}.Release|Win32.Build.0 = Release|Win32
+ {5EFD08EE-10CB-4D3E-9907-4E9A7F3AB1C1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5EFD08EE-10CB-4D3E-9907-4E9A7F3AB1C1}.Debug|Win32.Build.0 = Debug|Win32
+ {5EFD08EE-10CB-4D3E-9907-4E9A7F3AB1C1}.Release|Win32.ActiveCfg = Release|Win32
+ {5EFD08EE-10CB-4D3E-9907-4E9A7F3AB1C1}.Release|Win32.Build.0 = Release|Win32
+ {5EFD08FE-10CB-4D3E-9907-4E9A2F3AB1C1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5EFD08FE-10CB-4D3E-9907-4E9A2F3AB1C1}.Debug|Win32.Build.0 = Debug|Win32
+ {5EFD08FE-10CB-4D3E-9907-4E9A2F3AB1C1}.Release|Win32.ActiveCfg = Release|Win32
+ {5EFD08FE-10CB-4D3E-9907-4E9A2F3AB1C1}.Release|Win32.Build.0 = Release|Win32
+ {5EFD08FE-10CB-4D3E-9917-4E9A2F3AB1C1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5EFD08FE-10CB-4D3E-9917-4E9A2F3AB1C1}.Debug|Win32.Build.0 = Debug|Win32
+ {5EFD08FE-10CB-4D3E-9917-4E9A2F3AB1C1}.Release|Win32.ActiveCfg = Release|Win32
+ {5EFD08FE-10CB-4D3E-9917-4E9A2F3AB1C1}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
Added: sandbox/ggl/formal_review/libs/ggl/example/x01_qt_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/x01_qt_example.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,90 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Qt Example
+
+// Qt is a well-known and often used platform independent widget library
+
+// To build and run this example:
+// 1) download (from http://qt.nokia.com), configure and make QT
+// 2) if necessary, adapt Qt clause in include path
+
+#include <sstream>
+
+#include <QtGui>
+
+#include <ggl/ggl.hpp>
+#include <ggl/geometries/register/point.hpp>
+#include <ggl/geometries/register/ring.hpp>
+
+
+// Adapt a QPointF such that it can be handled by GGL
+GEOMETRY_REGISTER_POINT_2D_GET_SET(QPointF, double, cs::cartesian, x, y, setX, setY)
+
+// Adapt a QPolygonF as well.
+// A QPolygonF has no holes (interiors) so it is similar to a GGL ring
+GEOMETRY_REGISTER_RING(QPolygonF)
+
+
+int main(int argc, char *argv[])
+{
+ // This usage QApplication and QLabel is adapted from
+ // http://en.wikipedia.org/wiki/Qt_(toolkit)#Qt_hello_world
+ QApplication app(argc, argv);
+
+ // Declare a polygon. This is just Qt. The Qt Polygon can be used
+ // in GGL as well, just by its oneline registration above.
+ QPolygonF polygon;
+
+ // Qt methods can be used, in this case to add points
+ polygon
+ << QPointF(10, 20) << QPointF(20, 30)
+ << QPointF(30, 20) << QPointF(20, 10)
+ << QPointF(10, 20);
+
+ // GGL methods can be used, e.g. to calculate area
+ std::ostringstream out;
+ out << "GGL area: " << ggl::area(polygon) << std::endl;
+
+ // Some functionality is defined in both Qt and GGL
+ QPointF p(20,20);
+ out << "Qt contains: "
+ << (polygon.containsPoint(p, Qt::WindingFill) ? "yes" : "no")
+ << std::endl
+ << "GGL within: "
+ << (ggl::within(p, polygon) ? "yes" : "no")
+ << std::endl;
+ // Detail: if point is ON boundary, Qt says yes, GGL says no.
+
+
+ // Qt defines an iterator
+ // (which is actually required for GGL, it's part of the ring-concept)
+ // such that GGL can use the points of this polygon
+ QPolygonF::const_iterator it;
+ for (it = polygon.begin(); it != polygon.end(); ++it)
+ {
+ // Stream Delimiter-Separated, just to show something GGL can do
+ out << ggl::dsv(*it) << std::endl;
+ }
+
+ // Stream the polygon as well
+ out << ggl::dsv(polygon) << std::endl;
+
+ // Just show what we did in a label
+ QLabel label(out.str().c_str());
+ label.show();
+ return app.exec();
+
+ // What else could be useful, functionality that GGL has and Qt not (yet)?
+ // - simplify a polygon (to get less points and preserve shape)
+ // - clip a polygon with a box
+ // - calculate the centroid
+ // - calculate the perimeter
+ // - calculate the convex hull
+ // - transform it using matrix transformations
+}
+
Added: sandbox/ggl/formal_review/libs/ggl/example/x01_qt_example.sln
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/x01_qt_example.sln 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x01_qt_example", "x01_qt_example.vcproj", "{242C6ADC-3A10-4B69-81F7-5669E0582A8B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {242C6ADC-3A10-4B69-81F7-5669E0582A8B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {242C6ADC-3A10-4B69-81F7-5669E0582A8B}.Debug|Win32.Build.0 = Debug|Win32
+ {242C6ADC-3A10-4B69-81F7-5669E0582A8B}.Release|Win32.ActiveCfg = Release|Win32
+ {242C6ADC-3A10-4B69-81F7-5669E0582A8B}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
Added: sandbox/ggl/formal_review/libs/ggl/example/x01_qt_example.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/x01_qt_example.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="x01_qt_example"
+ ProjectGUID="{242C6ADC-3A10-4B69-81F7-5669E0582A8B}"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x01_qt_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="c:\Qt\2009.03\qt\include;c:\Qt\2009.03\qt\include\QtGui;../../../boost"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;QT_NO_DEBUG;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="qtmain.lib QtGui4.lib QtCore4.lib"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="c:\Qt\2009.03\qt\lib "
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x01_qt_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="c:\Qt\2009.03\qt\include;c:\Qt\2009.03\qt\include\QtGui;../../../boost"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;QT_NO_DEBUG;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="qtmain.lib QtGui4.lib QtCore4.lib"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="c:\Qt\2009.03\qt\lib "
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\x01_qt_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/example/x02_numeric_adaptor_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/x02_numeric_adaptor_example.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,137 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Numeric Adaptor Example
+
+// The Numeric Adaptor is introduced to the Boost mailing list
+// It is a proxy to high precision arithmetic libraries such as gmp
+// However, it might be that the same effect can be used using the
+// Boost.Math bindings.
+
+// To build and run this example:
+// 1) download gmp, it should be somewhere in the include path
+// 2) download numeric_adaptor from the Boost.Sandbox
+
+#include <iostream>
+#include <iomanip>
+#include <typeinfo>
+
+#include <boost/numeric_adaptor/numeric_adaptor.hpp>
+#include <boost/numeric_adaptor/gmp_value_type.hpp>
+
+#include <ggl/ggl.hpp>
+#include <ggl/geometries/cartesian2d.hpp>
+
+template <typename Type, typename AssignType>
+void calculate(AssignType const& x1,
+ AssignType const& y1,
+ AssignType const& x2,
+ AssignType const& y2,
+ AssignType const& x3,
+ AssignType const& y3
+ )
+{
+ // gmp can be used instead of "double" for any point type
+ typedef ggl::point_xy<Type> point_type;
+
+ point_type a, b, c;
+ ggl::assign(a, boost::to<Type>(x1), boost::to<Type>(y1));
+ ggl::assign(b, boost::to<Type>(x2), boost::to<Type>(y2));
+ ggl::assign(c, boost::to<Type>(x3), boost::to<Type>(y3));
+
+ ggl::linear_ring<point_type> r;
+ r.push_back(a);
+ r.push_back(b);
+ r.push_back(c);
+ r.push_back(a);
+
+ // What also is possible is define point coordinates using IEEE double,
+ // but doing calculations using the gmp type.
+ // To do that, specify the strategy explicitly
+ Type ab = ggl::distance(a, b);
+ Type bc = ggl::distance(b, c);
+ Type ca = ggl::distance(c, a);
+
+ std::cout << std::endl << typeid(Type).name() << std::endl;
+
+ std::cout << "a-b: " << ab << std::endl;
+ std::cout << "b-c: " << bc << std::endl;
+ std::cout << "c-a: " << ca << std::endl;
+
+ std::cout << "area: " << ggl::area(r,
+ ggl::strategy::area::by_triangles<point_type, Type>())
+ << std::endl;
+
+ // Heron formula is "famous" for its imprecision. It should give
+ // same result as area, but is sensible for rounding errors.
+ Type s = ab + bc + ca;
+ s /= 2.0;
+ Type ar = boost::sqrt(s * (s - ab) * (s - bc) * (s - ca));
+ std::cout << "heron: " << ar << std::endl;
+
+ // Area's given:
+ // float: 740.74078369140625
+ // double: 740.74073407406990554591
+ // long double: 740.74073407406991376156
+ // GMP: 0.74074073407407e3 (right!)
+
+ // SQL Server: 740.740724252642
+ // Postgis: 740.74073407407 (might be rounded from (long) double)
+ // MySQL: 740.74073407406991000000
+}
+
+int main(int argc, char *argv[])
+{
+ typedef boost::numeric_adaptor::gmp_value_type type;
+ //typedef long double type;
+
+ // gmp can be used instead of "double" for any point type
+ typedef ggl::point_xy<type> point_type;
+
+ // Points, polygons or other geometries are gmp now
+ point_type p;
+
+ // They can be used normally
+ ggl::set<0>(p, 123456.78900001);
+ std::cout << "x coordinate: " << ggl::get<0>(p) << std::endl;
+
+ // But the value above cannot be expressed with that precision in IEEE 64 bits.
+ // Points can therefore also be assigned by string with ggl::set
+ ggl::set<0>(p, boost::to<type>(std::string("123456.78900001")));
+ // and streamed (as a string representation)
+ std::cout << "x coordinate: " << ggl::get<0>(p) << std::endl;
+
+
+ // The ggl::assign function also supports custom numeric types
+ point_type p1, p2;
+ ggl::assign(p1,
+ boost::to<type>(std::string("123456.78900001")),
+ boost::to<type>(std::string("234567.89100001")));
+ ggl::assign(p2,
+ boost::to<type>(std::string("987654.32100001")),
+ boost::to<type>(std::string("876543.21900001")));
+
+ type d = ggl::distance(p1, p2);
+ std::cout << "Exact distance: " << d << std::endl;
+ // It gives: 0.1076554 54858339556783e7
+ // my calculator gives: 1076554.5485833955678294387789057
+ // CLN gives : 1076554.5485833955
+
+ // All algorithms will automatically use the gmp-type
+ // We show and compare that in the calculate function, with type and
+ // assigning type as template parameters
+
+ std::cout << std::fixed << std::setprecision(20);
+ calculate<float>(0.0, 0.0, 0.0, 0.0012, 1234567.89012345, 0.0);
+ calculate<double>(0.0, 0.0, 0.0, 0.0012, 1234567.89012345, 0.0);
+ calculate<long double>(0.0, 0.0, 0.0, 0.0012, 1234567.89012345, 0.0);
+ calculate<type, std::string>("0.0", "0.0", "0.0", "0.0012", "1234567.89012345", "0.0");
+
+ return 0;
+}
+
Added: sandbox/ggl/formal_review/libs/ggl/example/x02_numeric_adaptor_example.sln
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/x02_numeric_adaptor_example.sln 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x02_numeric_adaptor_example", "x02_numeric_adaptor_example.vcproj", "{242C6ADC-3A10-4B69-81F7-5669E0582A8B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {242C6ADC-3A10-4B69-81F7-5669E0582A8B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {242C6ADC-3A10-4B69-81F7-5669E0582A8B}.Debug|Win32.Build.0 = Debug|Win32
+ {242C6ADC-3A10-4B69-81F7-5669E0582A8B}.Release|Win32.ActiveCfg = Release|Win32
+ {242C6ADC-3A10-4B69-81F7-5669E0582A8B}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
Added: sandbox/ggl/formal_review/libs/ggl/example/x02_numeric_adaptor_example.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/x02_numeric_adaptor_example.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="x02_numeric_adaptor_example"
+ ProjectGUID="{242C6ADC-3A10-4B69-81F7-5669E0582A8B}"
+ RootNamespace="x02_numeric_adaptor_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x02_numeric_adaptor_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""c:\gmp\gmp-dynamic";c:\svn\numeric_adaptor;../../../boost"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="gmp.lib"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""C:\gmp\gmp-dynamic""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x02_numeric_adaptor_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""c:\gmp\gmp-dynamic";c:\svn\numeric_adaptor;../../../boost"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="gmp.lib"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""C:\gmp\gmp-dynamic""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\x02_numeric_adaptor_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/example/x03_a_soci_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/x03_a_soci_example.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,78 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// SOCI example
+
+// a: using boost::tuple to retrieve points
+
+// SOCI is a generic C++ template interface to access relational databases
+
+// To build and run this example:
+// 1) download SOCI from http://soci.sourceforge.net/
+// 2) put it in contrib/soci-3.0.0 (or another version/folder, but then update this VCPROJ)
+// 3) adapt your makefile or use this VCPROJ file
+// (note that SOCI sources are included directly, building SOCI is not necessary)
+// 4) load the demo-data, see script data/cities.sql (for PostgreSQL)
+
+#include <soci.h>
+#include <soci-postgresql.h>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/optional.hpp>
+#include <boost/timer.hpp>
+#include <boost/random.hpp>
+#include <boost/tuple/tuple.hpp>
+
+#include <iostream>
+#include <istream>
+#include <ostream>
+#include <sstream>
+#include <string>
+#include <exception>
+
+#include <ggl/ggl.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+#include <ggl/extensions/gis/io/wkt/wkt.hpp>
+
+
+
+int main()
+{
+ try
+ {
+ soci::session sql(soci::postgresql, "dbname=ggl user=ggl password=ggl");
+
+ int count;
+ sql << "select count(*) from cities", soci::into(count);
+ std::cout << "# Capitals: " << count << std::endl;
+
+ typedef std::vector<boost::tuple<double, double> > V;
+
+ soci::rowset<boost::tuple<double, double> > rows
+ = sql.prepare << "select x(location),y(location) from cities";
+ V vec;
+ std::copy(rows.begin(), rows.end(), std::back_inserter(vec));
+
+ for (V::const_iterator it = vec.begin(); it != vec.end(); ++it)
+ {
+ std::cout << it->get<0>() << " " << it->get<1>() << std::endl;
+ }
+ // Calculate distances
+ for (V::const_iterator it1 = vec.begin(); it1 != vec.end(); ++it1)
+ {
+ for (V::const_iterator it2 = vec.begin(); it2 != vec.end(); ++it2)
+ {
+ std::cout << ggl::dsv(*it1) << " " << ggl::distance(*it1, *it2) << std::endl;
+ }
+ }
+ }
+ catch (std::exception const &e)
+ {
+ std::cerr << "Error: " << e.what() << '\n';
+ }
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/example/x03_a_soci_example.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/x03_a_soci_example.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,727 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="x03_a_soci_example"
+ ProjectGUID="{C3B3143D-F354-4036-9DA1-5975D8A4F166}"
+ RootNamespace="x03_a_soci_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)/x03_a_soci_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../boost;"contrib\soci-3.0.0\src\backends\postgresql";"contrib\soci-3.0.0\src\core";"c:\Program Files\PostgreSQL\8.3\include";c:\oraclexe\app\oracle\product\10.2.0\server\OCI\include;"c:\Program Files\MySQL\MySQL Server 5.0\include""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;SOCI_USE_BOOST;BOOST_ALL_NO_LIB;_CRT_SECURE_NO_WARNINGS"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libpq.lib"
+ AdditionalLibraryDirectories=""c:\Program Files\MySQL\MySQL Server 5.0\lib\opt";c:\oraclexe\app\oracle\product\10.2.0\server\OCI\lib\MSVC;"C:\Program Files\PostgreSQL\8.3\lib""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x03_a_soci_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="0"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../boost;"contrib\soci-3.0.0\src\backends\postgresql";"contrib\soci-3.0.0\src\core";"c:\Program Files\PostgreSQL\8.3\include";c:\oraclexe\app\oracle\product\10.2.0\server\OCI\include;"c:\Program Files\MySQL\MySQL Server 5.0\include""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;SOCI_USE_BOOST;BOOST_ALL_NO_LIB;_CRT_SECURE_NO_WARNINGS"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libpq.lib"
+ AdditionalLibraryDirectories=""c:\Program Files\MySQL\MySQL Server 5.0\lib\opt";c:\oraclexe\app\oracle\product\10.2.0\server\OCI\lib\MSVC;"C:\Program Files\PostgreSQL\8.3\lib""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="soci_postgresql"
+ >
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\blob.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\common.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\factory.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\row-id.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\session.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\standard-into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\standard-use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\vector-into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\vector-use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="soci_core"
+ >
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\backend-loader.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\blob.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\connection-pool.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\error.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\once-temp-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\prepare-temp-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\procedure.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\ref-counted-prepare-info.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\ref-counted-statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\row.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\rowid.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\session.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\transaction.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\values.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\x03_a_soci_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/example/x03_b_soci_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/x03_b_soci_example.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,100 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// SOCI example
+
+// b: using WKT to retrieve points
+
+// To build and run this example, see comments in example a
+
+#include <soci.h>
+#include <soci-postgresql.h>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/optional.hpp>
+#include <boost/timer.hpp>
+#include <boost/random.hpp>
+#include <boost/tuple/tuple.hpp>
+
+#include <iostream>
+#include <istream>
+#include <ostream>
+#include <sstream>
+#include <string>
+#include <exception>
+
+#include <ggl/ggl.hpp>
+#include <ggl/geometries/geometries.hpp>
+
+#include <ggl/extensions/gis/io/wkt/wkt.hpp>
+
+
+struct city
+{
+ ggl::point<float, 2, ggl::cs::geographic<ggl::degree> > location;
+ std::string name;
+};
+
+namespace soci
+{
+ template <>
+ struct type_conversion<city>
+ {
+ typedef soci::values base_type;
+
+ static void from_base(const base_type& v, soci::indicator ind, city& value)
+ {
+ try
+ {
+ value.name = v.get<std::string>("name");
+ ggl::read_wkt(v.get<std::string>("wkt"), value.location);
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << e.what() << std::endl;
+ }
+ }
+
+ static void to_base(const city& value, base_type& v, soci::indicator& ind)
+ {
+ v.set("name", value.name);
+ std::ostringstream out;
+ out << ggl::wkt(value.location);
+ v.set("wkt", out.str());
+ ind = i_ok;
+ }
+ };
+}
+
+int main()
+{
+ try
+ {
+ soci::session sql(soci::postgresql, "dbname=ggl user=ggl password=ggl");
+
+
+ typedef std::vector<city> V;
+
+ soci::rowset<city> rows = sql.prepare << "select name,astext(location) as wkt from cities";
+ V vec;
+ std::copy(rows.begin(), rows.end(), std::back_inserter(vec));
+
+ for (V::const_iterator it = vec.begin(); it != vec.end(); ++it)
+ {
+ static const double sqrkm = 1000.0 * 1000.0;
+ std::cout << it->name
+ << " " << ggl::dsv(it->location)
+ //<< " " << ggl::area(it->shape) / sqrkm << " km2"
+ << std::endl;
+ }
+ }
+ catch (std::exception const &e)
+ {
+ std::cerr << "Error: " << e.what() << '\n';
+ }
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/example/x03_b_soci_example.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/x03_b_soci_example.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,727 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="x03_b_soci_example"
+ ProjectGUID="{5EFD08EE-10CB-4D3E-9907-4E9A7F3AB1C1}"
+ RootNamespace="x03_b_soci_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)/x03_b_soci_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../boost;"contrib\soci-3.0.0\src\backends\postgresql";"contrib\soci-3.0.0\src\core";"c:\Program Files\PostgreSQL\8.3\include";c:\oraclexe\app\oracle\product\10.2.0\server\OCI\include;"c:\Program Files\MySQL\MySQL Server 5.0\include""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;SOCI_USE_BOOST;BOOST_ALL_NO_LIB;_CRT_SECURE_NO_WARNINGS"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libpq.lib"
+ AdditionalLibraryDirectories=""c:\Program Files\MySQL\MySQL Server 5.0\lib\opt";c:\oraclexe\app\oracle\product\10.2.0\server\OCI\lib\MSVC;"C:\Program Files\PostgreSQL\8.3\lib""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x03_b_soci_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="0"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../boost;"contrib\soci-3.0.0\src\backends\postgresql";"contrib\soci-3.0.0\src\core";"c:\Program Files\PostgreSQL\8.3\include";c:\oraclexe\app\oracle\product\10.2.0\server\OCI\include;"c:\Program Files\MySQL\MySQL Server 5.0\include""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;SOCI_USE_BOOST;BOOST_ALL_NO_LIB;_CRT_SECURE_NO_WARNINGS"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libpq.lib"
+ AdditionalLibraryDirectories=""c:\Program Files\MySQL\MySQL Server 5.0\lib\opt";c:\oraclexe\app\oracle\product\10.2.0\server\OCI\lib\MSVC;"C:\Program Files\PostgreSQL\8.3\lib""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="soci_postgresql"
+ >
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\blob.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\common.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\factory.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\row-id.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\session.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\standard-into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\standard-use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\vector-into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\vector-use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="soci_core"
+ >
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\backend-loader.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\blob.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\connection-pool.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\error.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\once-temp-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\prepare-temp-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\procedure.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\ref-counted-prepare-info.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\ref-counted-statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\row.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\rowid.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\session.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\transaction.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\values.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\x03_b_soci_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/example/x03_c_soci_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/x03_c_soci_example.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,118 @@
+// Generic Geometry Library
+//
+// Copyright Mateusz Loskot 2009, mateusz_at_[hidden]
+//
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// Generic Geometry Library
+// SOCI example
+
+// c: using WKB to retrieve geometries
+
+// SOCI is a generic C++ template interface to access relational databases
+
+// To build and run this example, see comments in example a
+// Alternatively compile composing and executing compiler command directoy in examples directory,
+// for example using GCC compiler:
+// g++ -I../../../boost -I/home/mloskot/usr/include/soci \
+// -I /home/mloskot/usr/include/soci/postgresql -I/usr/include/postgresql \
+// -L/home/mloskot/usr/lib -lsoci_core-gcc-3_0 -lsoci_postgresql-gcc-3_0 x03_c_soci_example.cpp
+
+#include <soci.h>
+#include <soci-postgresql.h>
+
+#include <exception>
+#include <iostream>
+#include <iterator>
+#include <string>
+#include <vector>
+
+#include <ggl/ggl.hpp>
+#include <ggl/geometries/geometries.hpp>
+#include <ggl/extensions/gis/io/wkb/read_wkb.hpp>
+#include <ggl/extensions/gis/io/wkb/utility.hpp>
+#include <ggl/extensions/gis/io/wkt/wkt.hpp>
+
+// user-defined type with GGL geometry
+struct tree
+{
+ int id;
+ ggl::point<float, 2, ggl::cs::geographic<ggl::degree> > location;
+};
+
+// conversion of row of result to user-defined type - performs WKB parsing
+namespace soci
+{
+ template <>
+ struct type_conversion<tree>
+ {
+ typedef soci::values base_type;
+
+ static void from_base(base_type const& v, soci::indicator ind, tree& value)
+ {
+ try
+ {
+ value.id = v.get<int>("id");
+
+ // intermediate step: hex-encoded binary string to raw WKB
+ std::string const& hex = v.get<std::string>("wkb");
+ std::vector<unsigned char> wkb;
+ if (!ggl::hex2wkb(hex, std::back_inserter(wkb)))
+ throw std::runtime_error("hex2wkb translation failed");
+
+ // parse WKB and construct point geometry
+ if (!ggl::read_wkb(wkb.begin(), wkb.end(), value.location))
+ throw std::runtime_error("read_wkb failed");
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << e.what() << std::endl;
+ }
+ }
+
+ static void to_base(tree const& value, base_type& v, soci::indicator& ind)
+ {
+ throw std::runtime_error("todo: wkb writer not yet implemented");
+ }
+ };
+}
+
+int main()
+{
+ try
+ {
+ // establish database connection
+ soci::session sql(soci::postgresql, "dbname=ggl user=ggl password=ggl");
+
+ // construct schema of table for trees (point geometries)
+ sql << "DELETE FROM geometry_columns WHERE f_table_name = 'trees'";
+ sql << "DROP TABLE IF EXISTS trees CASCADE";
+ sql << "CREATE TABLE trees (id INTEGER)";
+ sql << "SELECT AddGeometryColumn('trees', 'geom', -1, 'POINT', 2)";
+
+ // insert sample data using plain WKT input
+ sql << "INSERT INTO trees VALUES(1, ST_GeomFromText('POINT(1.23 2.34)', -1))";
+ sql << "INSERT INTO trees VALUES(2, ST_GeomFromText('POINT(3.45 4.56)', -1))";
+ sql << "INSERT INTO trees VALUES(3, ST_GeomFromText('POINT(5.67 6.78)', -1))";
+ sql << "INSERT INTO trees VALUES(4, ST_GeomFromText('POINT(7.89 9.01)', -1))";
+
+ // query data in WKB form and read to geometry object
+ typedef std::vector<tree> trees_t;
+ soci::rowset<tree> rows = (sql.prepare << "SELECT id, encode(ST_AsBinary(geom), 'hex') AS wkb FROM trees");
+ trees_t trees;
+ std::copy(rows.begin(), rows.end(), std::back_inserter(trees));
+
+ // print trees output
+ for (trees_t::const_iterator it = trees.begin(); it != trees.end(); ++it)
+ {
+ std::cout << "Tree #" << it->id << " located at\t" << ggl::wkt(it->location) << std::endl;
+ }
+ }
+ catch (std::exception const &e)
+ {
+ std::cerr << "Error: " << e.what() << '\n';
+ }
+ return 0;
+}
+
Added: sandbox/ggl/formal_review/libs/ggl/example/x03_c_soci_example.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/x03_c_soci_example.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,727 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="x03_c_soci_example"
+ ProjectGUID="{5EFD08FE-10CB-4D3E-9907-4E9A2F3AB1C1}"
+ RootNamespace="x03_c_soci_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)/x03_c_soci_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../boost;"contrib\soci-3.0.0\src\backends\postgresql";"contrib\soci-3.0.0\src\core";"c:\Program Files\PostgreSQL\8.3\include";c:\oraclexe\app\oracle\product\10.2.0\server\OCI\include;"c:\Program Files\MySQL\MySQL Server 5.0\include""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;SOCI_USE_BOOST;BOOST_ALL_NO_LIB;_CRT_SECURE_NO_WARNINGS"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libpq.lib"
+ AdditionalLibraryDirectories=""c:\Program Files\MySQL\MySQL Server 5.0\lib\opt";c:\oraclexe\app\oracle\product\10.2.0\server\OCI\lib\MSVC;"C:\Program Files\PostgreSQL\8.3\lib""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x03_c_soci_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="0"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../boost;"contrib\soci-3.0.0\src\backends\postgresql";"contrib\soci-3.0.0\src\core";"c:\Program Files\PostgreSQL\8.3\include";c:\oraclexe\app\oracle\product\10.2.0\server\OCI\include;"c:\Program Files\MySQL\MySQL Server 5.0\include""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;SOCI_USE_BOOST;BOOST_ALL_NO_LIB;_CRT_SECURE_NO_WARNINGS"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libpq.lib"
+ AdditionalLibraryDirectories=""c:\Program Files\MySQL\MySQL Server 5.0\lib\opt";c:\oraclexe\app\oracle\product\10.2.0\server\OCI\lib\MSVC;"C:\Program Files\PostgreSQL\8.3\lib""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="soci_postgresql"
+ >
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\blob.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\common.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\factory.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\row-id.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\session.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\standard-into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\standard-use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\vector-into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\vector-use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="soci_core"
+ >
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\backend-loader.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\blob.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\connection-pool.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\error.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\once-temp-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\prepare-temp-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\procedure.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\ref-counted-prepare-info.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\ref-counted-statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\row.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\rowid.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\session.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\transaction.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\values.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\x03_c_soci_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/example/x03_d_soci_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/x03_d_soci_example.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,84 @@
+// Generic Geometry Library
+//
+// Copyright Mateusz Loskot 2009, mateusz_at_[hidden]
+//
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// Generic Geometry Library
+// SOCI example
+
+// d: using WKB to retrieve geometries
+
+// SOCI is a generic C++ template interface to access relational databases
+
+// To build and run this example, see comments in example a
+// Alternatively compile composing and executing compiler command directoy in examples directory,
+// for example using GCC compiler:
+// g++ -I../../../boost -I/home/mloskot/usr/include/soci \
+// -I /home/mloskot/usr/include/soci/postgresql -I/usr/include/postgresql \
+// -L/home/mloskot/usr/lib -lsoci_core-gcc-3_0 -lsoci_postgresql-gcc-3_0 x03_c_soci_example.cpp
+
+#include <soci.h>
+#include <soci-postgresql.h>
+
+#include <exception>
+#include <iostream>
+#include <iterator>
+#include <string>
+#include <vector>
+
+#include <ggl/ggl.hpp>
+#include <ggl/algorithms/area.hpp>
+#include <ggl/geometries/cartesian2d.hpp>
+#include <ggl/geometries/geometries.hpp>
+#include <ggl/extensions/gis/io/wkb/read_wkb.hpp>
+#include <ggl/extensions/gis/io/wkb/utility.hpp>
+#include <ggl/extensions/gis/io/wkt/wkt.hpp>
+
+int main()
+{
+ try
+ {
+ // establish database connection
+ soci::session sql(soci::postgresql, "dbname=ggl user=ggl password=ggl");
+
+ // construct schema of table for trees (point geometries)
+ sql << "DELETE FROM geometry_columns WHERE f_table_name = 'parcels'";
+ sql << "DROP TABLE IF EXISTS parcels CASCADE";
+ sql << "CREATE TABLE parcels (id INTEGER)";
+ sql << "SELECT AddGeometryColumn('parcels', 'geom', -1, 'GEOMETRY', 2)";
+
+ // insert sample data using plain WKT input
+ sql << "INSERT INTO parcels VALUES(1, ST_GeomFromText('POLYGON ((10 10, 10 20, 20 20, 20 15, 10 10))', -1))";
+ sql << "INSERT INTO parcels VALUES(2, ST_GeomFromText('POLYGON ((0 0, 4 0, 4 4, 0 4, 0 0))', -1))";
+ sql << "INSERT INTO parcels VALUES(3, ST_GeomFromText('POLYGON((1 1,2 1,2 2,1 2,1 1))', -1))";
+
+ // query data in WKB form and read to geometry object
+ soci::rowset<std::string> rows = (sql.prepare << "SELECT encode(ST_AsBinary(geom), 'hex') AS wkb FROM parcels");
+
+ // calculate area of each parcel
+ for (soci::rowset<std::string>::iterator it = rows.begin(); it != rows.end(); ++it)
+ {
+ // parse WKB and construct geometry object
+ std::string const& hex = *it;
+ std::vector<unsigned char> wkb;
+ if (!ggl::hex2wkb(*it, std::back_inserter(wkb)))
+ throw std::runtime_error("hex2wkb translation failed");
+
+ ggl::polygon_2d parcel;
+ if (!ggl::read_wkb(wkb.begin(), wkb.end(), parcel))
+ throw std::runtime_error("read_wkb failed");
+
+ double a = ggl::area(parcel);
+ std::cout << "Parcel geometry: " << ggl::wkt(parcel) << std::endl
+ << "\thas area is " << a << " in coordinate units" << std::endl;
+ }
+ }
+ catch (std::exception const &e)
+ {
+ std::cerr << "Error: " << e.what() << '\n';
+ }
+ return 0;
+}
+
Added: sandbox/ggl/formal_review/libs/ggl/example/x03_d_soci_example.vcproj
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/example/x03_d_soci_example.vcproj 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,727 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="x03_d_soci_example"
+ ProjectGUID="{5EFD08FE-10CB-4D3E-9917-4E9A2F3AB1C1}"
+ RootNamespace="x03_d_soci_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)/x03_d_soci_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../boost;"contrib\soci-3.0.0\src\backends\postgresql";"contrib\soci-3.0.0\src\core";"c:\Program Files\PostgreSQL\8.3\include";c:\oraclexe\app\oracle\product\10.2.0\server\OCI\include;"c:\Program Files\MySQL\MySQL Server 5.0\include""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;SOCI_USE_BOOST;BOOST_ALL_NO_LIB;_CRT_SECURE_NO_WARNINGS"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libpq.lib"
+ AdditionalLibraryDirectories=""c:\Program Files\MySQL\MySQL Server 5.0\lib\opt";c:\oraclexe\app\oracle\product\10.2.0\server\OCI\lib\MSVC;"C:\Program Files\PostgreSQL\8.3\lib""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x03_d_soci_example"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="0"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../boost;"contrib\soci-3.0.0\src\backends\postgresql";"contrib\soci-3.0.0\src\core";"c:\Program Files\PostgreSQL\8.3\include";c:\oraclexe\app\oracle\product\10.2.0\server\OCI\include;"c:\Program Files\MySQL\MySQL Server 5.0\include""
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;SOCI_USE_BOOST;BOOST_ALL_NO_LIB;_CRT_SECURE_NO_WARNINGS"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libpq.lib"
+ AdditionalLibraryDirectories=""c:\Program Files\MySQL\MySQL Server 5.0\lib\opt";c:\oraclexe\app\oracle\product\10.2.0\server\OCI\lib\MSVC;"C:\Program Files\PostgreSQL\8.3\lib""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="soci_postgresql"
+ >
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\blob.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\common.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\factory.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\row-id.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\session.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\standard-into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\standard-use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\vector-into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\backends\postgresql\vector-use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="soci_core"
+ >
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\backend-loader.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\blob.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\connection-pool.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\error.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\once-temp-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\prepare-temp-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\procedure.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\ref-counted-prepare-info.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\ref-counted-statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\row.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\rowid.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\session.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\transaction.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="contrib\soci-3.0.0\src\core\values.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\x03_d_soci_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: sandbox/ggl/formal_review/libs/ggl/test/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/Jamfile.v2 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,26 @@
+# test/Jamfile.v2 controls building of Generic Geometry Library unit tests
+#
+# Copyright (c) 2009 Mateusz Loskot <mateusz_at_[hidden]>
+#
+# Use, modification and distribution is subject to the Boost Software License,
+# Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+import testing ;
+
+project ggl-test
+ :
+ requirements
+ <include>.
+ ;
+
+build-project core ;
+build-project point_concept ;
+# build-project geometries ;
+build-project arithmetic ;
+build-project algorithms ;
+build-project iterators ;
+build-project strategies ;
+build-project policies ;
+# build-project util ;
+build-project multi ;
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/Jamfile.v2 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,35 @@
+# test/algorithms/Jamfile.v2
+#
+# Copyright (c) 2009 Mateusz Loskot <mateusz_at_[hidden]>
+#
+# Use, modification and distribution is subject to the Boost Software License,
+# Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+test-suite ggl-algorithms
+ :
+ [ run append.cpp ]
+ [ run area.cpp ]
+ [ run assign.cpp ]
+ [ run centroid.cpp ]
+ [ run combine.cpp ]
+ [ run convert.cpp ]
+ [ run convex_hull.cpp ]
+ [ run correct.cpp ]
+ [ run disjoint.cpp ]
+ [ run equals.cpp ]
+ [ run distance.cpp ]
+ [ run envelope.cpp ]
+ [ run for_each.cpp ]
+ [ run intersection.cpp ]
+ [ run intersects.cpp ]
+ [ run length.cpp ]
+ [ run make.cpp ]
+ [ run overlaps.cpp ]
+ [ run perimeter.cpp ]
+ [ run sectionalize.cpp ]
+ [ run simplify.cpp ]
+ [ run transform.cpp ]
+ [ run union.cpp ]
+ [ run within.cpp ]
+ ;
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/append.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/append.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,60 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <deque>
+#include <vector>
+
+#include <boost/concept/requires.hpp>
+#include <ggl_test_common.hpp>
+
+#include <ggl/core/access.hpp>
+#include <ggl/algorithms/make.hpp>
+#include <ggl/algorithms/clear.hpp>
+#include <ggl/algorithms/append.hpp>
+#include <ggl/algorithms/num_points.hpp>
+#include <ggl/geometries/geometries.hpp>
+#include <ggl/geometries/adapted/std_as_linestring.hpp>
+#include <ggl/geometries/adapted/boost_array_as_linestring.hpp>
+
+#include <test_common/test_point.hpp>
+
+template <typename G>
+void test_geometry()
+{
+ G geometry;
+ typedef typename ggl::point_type<G>::type P;
+
+ ggl::append(geometry, ggl::make_zero<P>());
+ BOOST_CHECK_EQUAL(ggl::num_points(geometry), 1);
+
+ ggl::clear(geometry);
+ BOOST_CHECK_EQUAL(ggl::num_points(geometry), 0);
+ //P p = boost::range::front(geometry);
+}
+
+template <typename P>
+void test_all()
+{
+ test_geometry<ggl::linestring<P> >();
+ test_geometry<ggl::linear_ring<P> >();
+ test_geometry<ggl::polygon<P> >();
+
+ test_geometry<std::vector<P> >();
+ test_geometry<std::deque<P> >();
+ //test_geometry<std::list<P> >();
+}
+
+int test_main(int, char* [])
+{
+ test_all<test::test_point>();
+ test_all<ggl::point<int, 2, ggl::cs::cartesian> >();
+ test_all<ggl::point<float, 2, ggl::cs::cartesian> >();
+ test_all<ggl::point<double, 2, ggl::cs::cartesian> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/area.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/area.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,86 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <algorithms/test_area.hpp>
+
+#include <ggl/geometries/point.hpp>
+#include <ggl/geometries/box.hpp>
+#include <ggl/geometries/linear_ring.hpp>
+#include <ggl/geometries/polygon.hpp>
+
+//#define GGL_TEST_DEBUG
+
+
+
+
+template <typename P>
+void test_all()
+{
+ //test_area_circle<P, double>();
+ test_geometry<ggl::box<P> >("POLYGON((0 0,2 2))", 4.0);
+ test_geometry<ggl::box<P> >("POLYGON((2 2,0 0))", 4.0);
+
+ // clockwise rings (second is wrongly ordered)
+ test_geometry<ggl::linear_ring<P> >("POLYGON((0 0,0 7,4 2,2 0,0 0))", 16.0);
+ test_geometry<ggl::linear_ring<P> >("POLYGON((0 0,2 0,4 2,0 7,0 0))", -16.0);
+
+ // counter clockwise rings (first is wrongly ordered)
+ test_geometry<ggl::linear_ring<P, std::vector, false> >
+ ("POLYGON((0 0,0 7,4 2,2 0,0 0))", -16.0);
+ test_geometry<ggl::linear_ring<P, std::vector, false> >
+ ("POLYGON((0 0,2 0,4 2,0 7,0 0))", 16.0);
+
+ test_geometry<ggl::polygon<P> >("POLYGON((0 0,0 7,4 2,2 0,0 0))", 16.0);
+ test_geometry<ggl::polygon<P> >("POLYGON((1 1,2 1,2 2,1 2,1 1))", -1.0);
+ test_geometry<ggl::polygon<P> >
+ ("POLYGON((0 0,0 7,4 2,2 0,0 0), (1 1,2 1,2 2,1 2,1 1))", 15.0);
+ test_geometry<ggl::polygon<P, std::vector, std::vector, false> >
+ ("POLYGON((0 0,0 7,4 2,2 0,0 0), (1 1,2 1,2 2,1 2,1 1))", -15.0);
+}
+
+template <typename Point>
+void test_spherical()
+{
+ ggl::polygon<Point> geometry;
+
+ // unit-sphere has area of 4-PI. Polygon covering 1/8 of it:
+ double expected = 4.0 * ggl::math::pi / 8.0;
+ ggl::read_wkt("POLYGON((0 0,0 90,90 0,0 0))", geometry);
+
+ double area = ggl::area(geometry);
+ BOOST_CHECK_CLOSE(area, expected, 0.0001);
+
+ // With strategy, radius 2 -> 4 pi r^2
+ ggl::strategy::area::huiller
+ <
+ typename ggl::point_type<Point>::type
+ > strategy(2.0);
+
+ area = ggl::area(geometry, strategy);
+ BOOST_CHECK_CLOSE(area, 2.0 * 2.0 * expected, 0.0001);
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<ggl::point<int, 2, ggl::cs::cartesian> >();
+ test_all<ggl::point<float, 2, ggl::cs::cartesian> >();
+ test_all<ggl::point<double, 2, ggl::cs::cartesian> >();
+
+ test_spherical<ggl::point<double, 2, ggl::cs::spherical<ggl::degree> > >();
+
+#if defined(HAVE_CLN)
+ test_all<ggl::point_xy<boost::numeric_adaptor::cln_value_type> >();
+#endif
+#if defined(HAVE_GMP)
+ test_all<ggl::point_xy<boost::numeric_adaptor::gmp_value_type> >();
+#endif
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/assign.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/assign.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,162 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/assign.hpp>
+#include <ggl/algorithms/num_points.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+#include <test_common/test_point.hpp>
+
+using namespace ggl;
+
+template <typename L>
+void check_linestring_2d(const L& line)
+{
+ BOOST_CHECK((boost::size(line) == 3));
+ BOOST_CHECK((ggl::num_points(line) == 3));
+
+ typedef typename point_type<L>::type P;
+ const P& p0 = line[0];
+ BOOST_CHECK(get<0>(p0) == 1);
+ BOOST_CHECK(get<1>(p0) == 2);
+
+ const P& p1 = line[1];
+ BOOST_CHECK(get<0>(p1) == 3);
+ BOOST_CHECK(get<1>(p1) == 4);
+
+ const P& p2 = line[2];
+ BOOST_CHECK(get<0>(p2) == 5);
+ BOOST_CHECK(get<1>(p2) == 6);
+}
+
+template <typename P>
+void test_assign_linestring_2d()
+{
+ ggl::linestring<P> line;
+
+ // Test assignment of plain array (note that this is only possible if adapted c-array is included!
+ const double coors[3][2] = { {1, 2}, {3, 4}, {5, 6} };
+ ggl::assign(line, coors);
+ check_linestring_2d(line);
+
+ // Test assignment of point array
+ P points[3];
+ ggl::assign(points[0], 1, 2);
+ ggl::assign(points[1], 3, 4);
+ ggl::assign(points[2], 5, 6);
+ ggl::assign(line, points);
+ check_linestring_2d(line);
+
+ // Test assignment of array with different point-type
+ boost::tuple<float, float> tuples[3];
+ tuples[0] = boost::make_tuple(1, 2);
+ tuples[1] = boost::make_tuple(3, 4);
+ tuples[2] = boost::make_tuple(5, 6);
+ ggl::assign(line, tuples);
+ check_linestring_2d(line);
+}
+
+template <typename P>
+void test_assign_box_2d()
+{
+
+ typedef box<P> B;
+ B b;
+ ggl::assign(b, 1, 2, 3, 4);
+ BOOST_CHECK((get<min_corner, 0>(b) == 1));
+ BOOST_CHECK((get<min_corner, 1>(b) == 2));
+ BOOST_CHECK((get<max_corner, 0>(b) == 3));
+ BOOST_CHECK((get<max_corner, 1>(b) == 4));
+
+ ggl::assign_zero(b);
+ BOOST_CHECK((get<min_corner, 0>(b) == 0));
+ BOOST_CHECK((get<min_corner, 1>(b) == 0));
+ BOOST_CHECK((get<max_corner, 0>(b) == 0));
+ BOOST_CHECK((get<max_corner, 1>(b) == 0));
+
+ ggl::assign_inverse(b);
+ BOOST_CHECK((get<min_corner, 0>(b) > 9999));
+ BOOST_CHECK((get<min_corner, 1>(b) > 9999));
+ BOOST_CHECK((get<max_corner, 0>(b) < 9999));
+ BOOST_CHECK((get<max_corner, 1>(b) < 9999));
+
+}
+
+template <typename P>
+void test_assign_point_3d()
+{
+ P p;
+ ggl::assign(p, 1, 2, 3);
+ BOOST_CHECK(get<0>(p) == 1);
+ BOOST_CHECK(get<1>(p) == 2);
+ BOOST_CHECK(get<2>(p) == 3);
+
+ ggl::detail::assign::assign_value(p, 123);
+ BOOST_CHECK(get<0>(p) == 123);
+ BOOST_CHECK(get<1>(p) == 123);
+ BOOST_CHECK(get<2>(p) == 123);
+
+ ggl::assign_zero(p);
+ BOOST_CHECK(get<0>(p) == 0);
+ BOOST_CHECK(get<1>(p) == 0);
+ BOOST_CHECK(get<2>(p) == 0);
+
+}
+
+template <typename P>
+void test_assign_point_2d()
+{
+ P p;
+ ggl::assign(p, 1, 2);
+ BOOST_CHECK(get<0>(p) == 1);
+ BOOST_CHECK(get<1>(p) == 2);
+
+ ggl::detail::assign::assign_value(p, 123);
+ BOOST_CHECK(get<0>(p) == 123);
+ BOOST_CHECK(get<1>(p) == 123);
+
+ ggl::assign_zero(p);
+ BOOST_CHECK(get<0>(p) == 0);
+ BOOST_CHECK(get<1>(p) == 0);
+}
+
+int test_main(int, char* [])
+{
+ test_assign_point_3d<int[3]>();
+ test_assign_point_3d<float[3]>();
+ test_assign_point_3d<double[3]>();
+ test_assign_point_3d<test::test_point>();
+ test_assign_point_3d<point<int, 3, ggl::cs::cartesian> >();
+ test_assign_point_3d<point<float, 3, ggl::cs::cartesian> >();
+ test_assign_point_3d<point<double, 3, ggl::cs::cartesian> >();
+
+ test_assign_point_2d<int[2]>();
+ test_assign_point_2d<float[2]>();
+ test_assign_point_2d<double[2]>();
+ test_assign_point_2d<point<int, 2, ggl::cs::cartesian> >();
+ test_assign_point_2d<point<float, 2, ggl::cs::cartesian> >();
+ test_assign_point_2d<point<double, 2, ggl::cs::cartesian> >();
+
+ test_assign_box_2d<int[2]>();
+ test_assign_box_2d<float[2]>();
+ test_assign_box_2d<double[2]>();
+ test_assign_box_2d<point<int, 2, ggl::cs::cartesian> >();
+ test_assign_box_2d<point<float, 2, ggl::cs::cartesian> >();
+ test_assign_box_2d<point<double, 2, ggl::cs::cartesian> >();
+
+ test_assign_linestring_2d<point<int, 2, ggl::cs::cartesian> >();
+ test_assign_linestring_2d<point<float, 2, ggl::cs::cartesian> >();
+ test_assign_linestring_2d<point<double, 2, ggl::cs::cartesian> >();
+
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/centroid.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/centroid.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,76 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <algorithms/test_centroid.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+
+template <typename P>
+void test_2d()
+{
+ test_centroid<ggl::linestring<P> >("LINESTRING(1 1, 2 2, 3 3)", 2.0, 2.0);
+ test_centroid<ggl::linestring<P> >("LINESTRING(0 0,0 4, 4 4)", 1.0, 3.0);
+ test_centroid<ggl::linestring<P> >("LINESTRING(0 0,3 3,0 6,3 9,0 12)", 1.5, 6.0);
+
+ test_centroid<ggl::linear_ring<P> >(
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2"
+ ",3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))",
+ 4.06923363095238, 1.65055803571429);
+ test_centroid<ggl::polygon<P> >(
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2"
+ ",3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))",
+ 4.06923363095238, 1.65055803571429);
+
+ // with holes
+ test_centroid<ggl::polygon<P> >(
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2"
+ ",3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"
+ ",(4 2,4.2 1.4,4.8 1.9,4.4 2.2,4 2))"
+ ,
+ 4.0466264962959677, 1.6348996057331333);
+
+
+ // ccw
+ test_centroid<ggl::linear_ring<P, std::vector, false> >(
+ "POLYGON((2 1.3,2.9 0.7,4.9 0.8,5.4 1.2,5.3 2.6,4.1 3,3.4 2"
+ ",3.7 1.6,3.4 1.2,2.8 1.8,2.4 1.7,2 1.3))",
+ 4.06923363095238, 1.65055803571429);
+
+
+ test_centroid<ggl::box<P> >("POLYGON((1 2,3 4))", 2, 3);
+ test_centroid<P>("POINT(3 3)", 3, 3);
+}
+
+
+template <typename P>
+void test_3d()
+{
+ test_centroid<ggl::box<P> >("POLYGON((1 2 3,5 6 7))", 3, 4, 5);
+ test_centroid<P>("POINT(1 2 3)", 1, 2, 3);
+}
+
+
+int test_main(int, char* [])
+{
+ test_2d<ggl::point_xy<double> >();
+ test_2d<boost::tuple<float, float> >();
+ test_2d<ggl::point_xy<float> >();
+
+ test_3d<boost::tuple<double, double, double> >();
+
+#if defined(HAVE_CLN)
+ //test_2d<ggl::point_xy<boost::numeric_adaptor::cln_value_type> >();
+#endif
+#if defined(HAVE_GMP)
+ //test_2d<ggl::point_xy<boost::numeric_adaptor::gmp_value_type> >();
+#endif
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/combine.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/combine.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,151 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <algorithms/test_combine.hpp>
+
+
+#include <ggl/algorithms/make.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+#include <ggl/geometries/adapted/std_pair_as_segment.hpp>
+#include <test_common/test_point.hpp>
+
+
+
+template <typename Point>
+void test_point_3d()
+{
+ ggl::box<Point> b = ggl::make_inverse<ggl::box<Point> >();
+
+ test_combine<Point>(b, "POINT(1 2 5)", "(1,2,5),(1,2,5)");
+ test_combine<Point>(b, "POINT(3 4 6)", "(1,2,5),(3,4,6)");
+
+ test_combine<Point>(b, "POINT(4 4 5)", "(1,2,5),(4,4,6)");
+ test_combine<Point>(b, "POINT(4 5 5)", "(1,2,5),(4,5,6)");
+ test_combine<Point>(b, "POINT(10 10 4)", "(1,2,4),(10,10,6)");
+ test_combine<Point>(b, "POINT(9 9 4)", "(1,2,4),(10,10,6)");
+
+ test_combine<Point>(b, "POINT(0 2 7)", "(0,2,4),(10,10,7)");
+ test_combine<Point>(b, "POINT(0 0 7)", "(0,0,4),(10,10,7)");
+ test_combine<Point>(b, "POINT(-1 -1 5)", "(-1,-1,4),(10,10,7)");
+ test_combine<Point>(b, "POINT(0 0 5)", "(-1,-1,4),(10,10,7)");
+
+ test_combine<Point>(b, "POINT(15 -1 0)", "(-1,-1,0),(15,10,7)");
+ test_combine<Point>(b, "POINT(-1 15 10)", "(-1,-1,0),(15,15,10)");
+}
+
+template <typename Point>
+void test_box_3d()
+{
+ typedef ggl::box<Point> box_type;
+ box_type b = ggl::make_inverse<box_type>();
+
+ test_combine<box_type>(b, "BOX(0 2 5,4 4 6)", "(0,2,5),(4,4,6)");
+ test_combine<box_type>(b, "BOX(0 1 5,4 6 6)", "(0,1,5),(4,6,6)");
+ test_combine<box_type>(b, "BOX(-1 -1 6,10 10 5)", "(-1,-1,5),(10,10,6)");
+ test_combine<box_type>(b, "BOX(3 3 6,3 3 5)", "(-1,-1,5),(10,10,6)");
+
+ test_combine<box_type>(b, "BOX(3 15 7,-1 3 4)", "(-1,-1,4),(10,15,7)");
+ test_combine<box_type>(b, "BOX(-15 3 7,3 20 4)", "(-15,-1,4),(10,20,7)");
+ test_combine<box_type>(b, "BOX(3 -20 8,3 20 3)", "(-15,-20,3),(10,20,8)");
+ test_combine<box_type>(b, "BOX(-20 3 8,20 3 3)", "(-20,-20,3),(20,20,8)");
+}
+
+
+
+template <typename P>
+void test_3d()
+{
+ test_point_3d<P>();
+ test_box_3d<P>();
+}
+
+template <typename Point>
+void test_2d()
+{
+ typedef ggl::box<Point> box_type;
+ typedef std::pair<Point, Point> segment_type;
+
+ box_type b = ggl::make_inverse<box_type>();
+
+ test_combine<box_type>(b, "BOX(1 1,2 2)", "(1,1),(2,2)");
+
+ // Test an 'incorrect' box -> should also correctly update the bbox
+ test_combine<box_type>(b, "BOX(3 4,0 1)", "(0,1),(3,4)");
+
+ // Test a segment
+ test_combine<segment_type>(b, "SEGMENT(5 6,7 8)", "(0,1),(7,8)");
+}
+
+template <typename Point>
+void test_spherical_degree()
+{
+ ggl::box<Point> b = ggl::make_inverse<ggl::box<Point> >();
+
+ test_combine<Point>(b, "POINT(179.73 71.56)",
+ "(179.73,71.56),(179.73,71.56)");
+ test_combine<Point>(b, "POINT(177.47 71.23)",
+ "(177.47,71.23),(179.73,71.56)");
+
+ // It detects that this point is lying RIGHT of the others,
+ // and then it "combines" it.
+ // It might be argued that "181.22" is displayed instead. However, they are
+ // the same.
+ test_combine<Point>(b, "POINT(-178.78 70.78)",
+ "(177.47,70.78),(-178.78,71.56)");
+}
+
+
+template <typename Point>
+void test_spherical_radian()
+{
+ ggl::box<Point> b = ggl::make_inverse<ggl::box<Point> >();
+
+ test_combine<Point>(b, "POINT(3.128 1.249)",
+ "(3.128,1.249),(3.128,1.249)");
+ test_combine<Point>(b, "POINT(3.097 1.243)",
+ "(3.097,1.243),(3.128,1.249)");
+
+ // It detects that this point is lying RIGHT of the others,
+ // and then it "combines" it.
+ // It might be argued that "181.22" is displayed instead. However, they are
+ // the same.
+ test_combine<Point>(b, "POINT(-3.121 1.235)",
+ "(3.097,1.235),(-3.121,1.249)");
+}
+
+int test_main(int, char* [])
+{
+ test_2d<ggl::point<int, 2, ggl::cs::cartesian> >();
+
+
+ test_3d<test::test_point>();
+ test_3d<ggl::point<int, 3, ggl::cs::cartesian> >();
+ test_3d<ggl::point<float, 3, ggl::cs::cartesian> >();
+ test_3d<ggl::point<double, 3, ggl::cs::cartesian> >();
+
+ test_spherical_degree<ggl::point<double, 2, ggl::cs::spherical<ggl::degree> > >();
+ test_spherical_radian<ggl::point<double, 2, ggl::cs::spherical<ggl::radian> > >();
+
+
+/***
+GMP/CLN still fails, due to boost::numeric_limits<T>, waiting for solution
+#if defined(HAVE_CLN)
+ test_3d<ggl::point<boost::numeric_adaptor::cln_value_type,
+ 3, ggl::cs::cartesian> >();
+#endif
+#if defined(HAVE_GMP)
+ test_3d<ggl::point<boost::numeric_adaptor::gmp_value_type,
+ 3, ggl::cs::cartesian> >();
+#endif
+***/
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/convert.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/convert.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,95 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <ggl_test_common.hpp>
+
+
+#include <ggl/algorithms/assign.hpp>
+#include <ggl/algorithms/convert.hpp>
+#include <ggl/algorithms/make.hpp>
+#include <ggl/algorithms/num_points.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+#include <test_common/test_point.hpp>
+
+template <typename P>
+void test_all()
+{
+ typedef ggl::box<P> box_type;
+
+ P p;
+ ggl::assign(p, 1, 2);
+
+ box_type b;
+ ggl::convert(p, b);
+
+ BOOST_CHECK_CLOSE(double(ggl::get<0, 0>(b)), 1.0, 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<0, 1>(b)), 2.0, 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<1, 0>(b)), 1.0, 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<1, 1>(b)), 2.0, 0.001);
+}
+
+template <typename P>
+void test_std()
+{
+ test_all<P>();
+
+ typedef ggl::box<P> box_type;
+ typedef ggl::linear_ring<P> ring_type;
+ typedef ggl::polygon<P> polygon_type;
+
+ box_type b;
+ ggl::set<ggl::min_corner, 0>(b, 1);
+ ggl::set<ggl::min_corner, 1>(b, 2);
+ ggl::set<ggl::max_corner, 0>(b, 3);
+ ggl::set<ggl::max_corner, 1>(b, 4);
+
+ ring_type ring;
+ ggl::convert(b, ring);
+
+ //std::cout << ggl::wkt(b) << std::endl;
+ //std::cout << ggl::wkt(ring) << std::endl;
+
+ typename boost::range_const_iterator<ring_type>::type it = ring.begin();
+ BOOST_CHECK_CLOSE(double(ggl::get<0>(*it)), 1.0, 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<1>(*it)), 2.0, 0.001);
+ it++;
+ BOOST_CHECK_CLOSE(double(ggl::get<0>(*it)), 1.0, 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<1>(*it)), 4.0, 0.001);
+ it++;
+ BOOST_CHECK_CLOSE(double(ggl::get<0>(*it)), 3.0, 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<1>(*it)), 4.0, 0.001);
+ it++;
+ BOOST_CHECK_CLOSE(double(ggl::get<0>(*it)), 3.0, 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<1>(*it)), 2.0, 0.001);
+ it++;
+ BOOST_CHECK_CLOSE(double(ggl::get<0>(*it)), 1.0, 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<1>(*it)), 2.0, 0.001);
+
+ BOOST_CHECK_EQUAL(ring.size(), 5);
+
+
+ polygon_type polygon;
+
+ ggl::convert(ring, polygon);
+ BOOST_CHECK_EQUAL(ggl::num_points(polygon), 5);
+
+ ggl::convert(polygon, ring);
+ BOOST_CHECK_EQUAL(ggl::num_points(ring), 5);
+}
+
+int test_main(int, char* [])
+{
+ test_std<ggl::point<int, 2, ggl::cs::cartesian> >();
+ test_std<ggl::point<float, 2, ggl::cs::cartesian> >();
+ test_std<ggl::point<double, 2, ggl::cs::cartesian> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/convex_hull.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/convex_hull.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,62 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <cstddef>
+#include <string>
+
+#include <algorithms/test_convex_hull.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+
+
+
+template <typename P>
+void test_all(bool do_rectangular = true)
+{
+ // from sample linestring
+
+ test_geometry<ggl::linestring<P> >(
+ "linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)", 5, 4, 3.8);
+
+ if (do_rectangular)
+ {
+ // rectangular, with concavity
+ test_geometry<ggl::polygon<P> >(
+ "polygon((1 1, 1 4, 3 4, 3 3, 4 3, 4 4, 5 4, 5 1, 1 1))",
+ 9, 5, 12.0);
+ }
+
+ // from sample polygon, with concavity
+ test_geometry<ggl::polygon<P> >(
+ "polygon((2.0 1.3, 2.4 1.7, 2.8 1.8, 3.4 1.2, 3.7 1.6,3.4 2.0, 4.1 3.0"
+ ", 5.3 2.6, 5.4 1.2, 4.9 0.8, 2.9 0.7,2.0 1.3))",
+ 12, 8, 5.245);
+}
+
+int test_main(int, char* [])
+{
+ //test_all<ggl::point_xy<int> >();
+ //test_all<ggl::point_xy<float> >();
+ test_all<ggl::point_xy<double> >();
+
+#if defined(HAVE_CLN)
+ test_all<ggl::point_xy<boost::numeric_adaptor::cln_value_type> >();
+#endif
+#if defined(HAVE_GMP)
+ // GMP compiles, but gives 'errors' in results (6 points in hull instead of 5)
+ // This is because of a vertex on the line, which is OK for the convex hull,
+ // but not OK for the strictly convex hull.
+ // Actually this is unexpected from a high-precision arithmetic library, the
+ // problem is the comparison (something is non-zero which should be calculated
+ // zero, in the direction).
+
+ test_all<ggl::point_xy<boost::numeric_adaptor::gmp_value_type> >(false);
+#endif
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/correct.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/correct.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,160 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <sstream>
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/correct.hpp>
+#include <ggl/strategies/strategies.hpp>
+
+#include <ggl/util/write_dsv.hpp>
+
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+#include <ggl/extensions/gis/io/wkt/write_wkt.hpp>
+
+#include <ggl/geometries/point_xy.hpp>
+#include <ggl/geometries/box.hpp>
+#include <ggl/geometries/linear_ring.hpp>
+#include <ggl/geometries/polygon.hpp>
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt, std::string const& expected)
+{
+ Geometry geometry;
+
+ ggl::read_wkt(wkt, geometry);
+ ggl::correct(geometry);
+
+ std::ostringstream out;
+ out << ggl::wkt(geometry);
+
+ BOOST_CHECK_EQUAL(out.str(), expected);
+}
+
+
+// Note: 3D/box test cannot be done using WKT because:
+// -> wkt-box does not exist
+// -> so it is converted to a ring
+// -> ring representation of 3d-box is not supported, nor feasible
+// -> so it uses DSV which can represent a box
+template <typename Geometry>
+void test_geometry_dsv(std::string const& wkt, std::string const& expected)
+{
+ Geometry geometry;
+
+ ggl::read_wkt(wkt, geometry);
+ ggl::correct(geometry);
+
+ std::ostringstream out;
+ out << ggl::dsv(geometry);
+
+ BOOST_CHECK_EQUAL(out.str(), expected);
+}
+
+
+
+
+
+
+template <typename P>
+void test_all()
+{
+ // Define clockwise and counter clockwise polygon
+ std::string cw_ring =
+ "POLYGON((0 0,0 1,1 1,1 0,0 0))";
+ std::string ccw_ring =
+ "POLYGON((0 0,1 0,1 1,0 1,0 0))";
+
+ // already cw_ring
+ test_geometry<ggl::linear_ring<P> >(cw_ring, cw_ring);
+
+ // wrong order
+ test_geometry<ggl::linear_ring<P> >(ccw_ring, cw_ring);
+
+ // not closed
+ test_geometry<ggl::linear_ring<P> >(
+ "POLYGON((0 0,1 0,1 1,0 1))",
+ cw_ring);
+
+ // counter clockwise, cw_ring
+ test_geometry<ggl::linear_ring<P, std::vector, false> >
+ (ccw_ring, ccw_ring);
+
+ test_geometry<ggl::linear_ring<P, std::vector, false> >
+ (cw_ring, ccw_ring);
+
+
+ // polygon: cw_ring
+ test_geometry<ggl::polygon<P> >(cw_ring, cw_ring);
+ // wrong order
+ test_geometry<ggl::polygon<P> >(
+ "POLYGON((0 0,1 0,1 1,0 1,0 0))",
+ cw_ring);
+ // wrong order & not closed
+ test_geometry<ggl::polygon<P> >(
+ "POLYGON((0 0,1 0,1 1,0 1))",
+ cw_ring);
+
+
+ std::string cw_holey_polygon =
+ "POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,2 1,2 2,1 2,1 1))";
+ std::string ccw_holey_polygon =
+ "POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1,1 2,2 2,2 1,1 1))";
+
+ // with holes: cw_ring
+ test_geometry<ggl::polygon<P> >(
+ cw_holey_polygon,
+ cw_holey_polygon);
+ // wrong order of main
+ test_geometry<ggl::polygon<P> >(
+ "POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1))",
+ cw_holey_polygon);
+ // wrong order of hole
+ test_geometry<ggl::polygon<P> >(
+ "POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,1 2,2 2,2 1,1 1))",
+ cw_holey_polygon);
+
+ // wrong order of main and hole
+ test_geometry<ggl::polygon<P> >(ccw_holey_polygon, cw_holey_polygon);
+
+ // test the counter-clockwise
+ test_geometry<ggl::polygon<P, std::vector, std::vector, false> >(
+ ccw_holey_polygon, ccw_holey_polygon);
+
+ // Boxes
+ std::string proper_box = "POLYGON((0 0,0 2,2 2,2 0,0 0))";
+ test_geometry<ggl::box<P> >(proper_box, proper_box);
+ test_geometry<ggl::box<P> >("BOX(0 0,2 2)", proper_box);
+ test_geometry<ggl::box<P> >("BOX(2 2,0 0)", proper_box);
+ test_geometry<ggl::box<P> >("BOX(0 2,2 0)", proper_box);
+
+ // Cubes
+ typedef ggl::box<ggl::point<double, 3, ggl::cs::cartesian> > box3d;
+ std::string proper_3d_dsv_box = "((0, 0, 0), (2, 2, 2))";
+ test_geometry_dsv<box3d>("BOX(0 0 0,2 2 2)", proper_3d_dsv_box);
+ test_geometry_dsv<box3d>("BOX(2 2 2,0 0 0)", proper_3d_dsv_box);
+ test_geometry_dsv<box3d>("BOX(0 2 2,2 0 0)", proper_3d_dsv_box);
+ test_geometry_dsv<box3d>("BOX(2 0 2,0 2 0)", proper_3d_dsv_box);
+ test_geometry_dsv<box3d>("BOX(0 0 2,2 2 0)", proper_3d_dsv_box);
+}
+
+
+int test_main(int, char* [])
+{
+ //test_all<int[2]>();
+ //test_all<float[2]>(); not yet because cannot be copied, for polygon
+ //test_all<double[2]>();
+
+ //test_all<point_xy<int> >();
+ //test_all<point_xy<float> >();
+ test_all<ggl::point_xy<double> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/disjoint.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/disjoint.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,106 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <iostream>
+#include <string>
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/disjoint.hpp>
+#include <ggl/geometries/geometries.hpp>
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+#include <ggl/strategies/strategies.hpp>
+
+#include <test_common/test_point.hpp>
+
+
+
+template <typename G1, typename G2>
+void test_disjoint(std::string const& wkt1, std::string const& wkt2, bool expected)
+{
+ G1 g1;
+ ggl::read_wkt(wkt1, g1);
+
+ G2 g2;
+ ggl::read_wkt(wkt2, g2);
+
+ bool detected = ggl::disjoint(g1, g2);
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "disjoint: " << wkt1
+ << " and " << wkt2
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
+
+
+
+template <typename P>
+void test_all()
+{
+ typedef ggl::box<P> box;
+
+ test_disjoint<P, P>("point(1 1)", "point(1 1)", false);
+ test_disjoint<P, P>("point(1 1)", "point(1.001 1)", true);
+
+ // left-right
+ test_disjoint<box, box>("box(1 1, 2 2)", "box(3 1, 4 2)", true);
+ test_disjoint<box, box>("box(1 1, 2 2)", "box(2 1, 3 2)", false);
+ test_disjoint<box, box>("box(1 1, 2 2)", "box(2 2, 3 3)", false);
+ test_disjoint<box, box>("box(1 1, 2 2)", "box(2.001 2, 3 3)", true);
+
+ // up-down
+ test_disjoint<box, box>("box(1 1, 2 2)", "box(1 3, 2 4)", true);
+ test_disjoint<box, box>("box(1 1, 2 2)", "box(1 2, 2 3)", false);
+ // right-left
+ test_disjoint<box, box>("box(1 1, 2 2)", "box(0 1, 1 2)", false);
+ test_disjoint<box, box>("box(1 1, 2 2)", "box(0 1, 1 2)", false);
+
+ // point-box
+ test_disjoint<P, box>("point(1 1)", "box(0 0, 2 2)", false);
+ test_disjoint<P, box>("point(2 2)", "box(0 0, 2 2)", false);
+ test_disjoint<P, box>("point(2.0001 2)", "box(1 1, 2 2)", true);
+ test_disjoint<P, box>("point(0.9999 2)", "box(1 1, 2 2)", true);
+
+ // box-point (to test reverse compiling)
+ test_disjoint<box, P>("box(1 1, 2 2)", "point(2 2)", false);
+
+ // Test triangles for polygons/rings, boxes
+ // Note that intersections are tested elsewhere, they don't need
+ // thorough test at this place
+ typedef ggl::polygon<P> polygon;
+ typedef ggl::linear_ring<P> ring;
+
+ // Four times same test with other types
+ test_disjoint<polygon, polygon>("POLYGON((0 0,0 2,2 2,0 0))", "POLYGON((1 0,3 2,3 0,1 0))", true);
+ test_disjoint<ring, polygon>("POLYGON((0 0,0 2,2 2,0 0))", "POLYGON((1 0,3 2,3 0,1 0))", true);
+ test_disjoint<ring, ring>("POLYGON((0 0,0 2,2 2,0 0))", "POLYGON((1 0,3 2,3 0,1 0))", true);
+ test_disjoint<polygon, ring>("POLYGON((0 0,0 2,2 2,0 0))", "POLYGON((1 0,3 2,3 0,1 0))", true);
+
+ // Testing touch
+ test_disjoint<polygon, polygon>("POLYGON((0 0,0 2,2 2,0 0))", "POLYGON((2 2,3 2,3 0,2 2))", false);
+
+ // Testing overlap (and test compiling with box)
+ test_disjoint<polygon, polygon>("POLYGON((0 0,0 2,2 2,2 0,0 0))", "POLYGON((1 1,3 2,3 0,1 1))", false);
+ test_disjoint<box, polygon>("POLYGON((0 0,0 2,2 2,2 0,0 0))", "POLYGON((1 1,3 2,3 0,1 1))", false);
+ test_disjoint<box, ring>("POLYGON((0 0,0 2,2 2,2 0,0 0))", "POLYGON((1 1,3 2,3 0,1 1))", false);
+ test_disjoint<polygon, box>("POLYGON((1 1,3 2,3 0,1 1))", "POLYGON((0 0,0 2,2 2,2 0,0 0))", false);
+ test_disjoint<ring, box>("POLYGON((1 1,3 2,3 0,1 1))", "POLYGON((0 0,0 2,2 2,2 0,0 0))", false);
+
+ // Test if within(a,b) returns false for disjoint
+ test_disjoint<ring, ring>("POLYGON((0 0,0 3,3 3,3 0,0 0))", "POLYGON((1 1,1 2,2 2,2 1,1 1))", false);
+ test_disjoint<ring, ring>("POLYGON((1 1,1 2,2 2,2 1,1 1))", "POLYGON((0 0,0 3,3 3,3 0,0 0))", false);
+}
+
+int test_main(int, char* [])
+{
+ test_all<ggl::point_xy<float> >();
+ test_all<ggl::point_xy<double> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/distance.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/distance.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,204 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//#define TEST_ARRAY
+
+#include <sstream>
+
+#include <boost/mpl/if.hpp>
+#include <ggl_test_common.hpp>
+
+
+#include <ggl/algorithms/distance.hpp>
+#include <ggl/strategies/strategies.hpp>
+
+#ifndef TEST_ARRAY
+#include <ggl/algorithms/make.hpp>
+#endif
+
+#include <ggl/geometries/geometries.hpp>
+#include <ggl/geometries/adapted/boost_array_as_linestring.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+#include <test_common/test_point.hpp>
+
+
+template <typename P>
+void test_distance_result()
+{
+ typedef typename ggl::distance_result<P, P>::type distance_type;
+
+#ifndef TEST_ARRAY
+ P p1 = ggl::make<P>(0, 0);
+ P p2 = ggl::make<P>(3, 0);
+ P p3 = ggl::make<P>(0, 4);
+#else
+ P p1, p2, p3;
+ ggl::set<0>(p1, 0); ggl::set<1>(p1, 0);
+ ggl::set<0>(p2, 3); ggl::set<1>(p2, 0);
+ ggl::set<0>(p3, 0); ggl::set<1>(p3, 4);
+#endif
+
+ distance_type dr12 = ggl::distance(p1, p2);
+ distance_type dr13 = ggl::distance(p1, p3);
+ distance_type dr23 = ggl::distance(p2, p3);
+
+ BOOST_CHECK_CLOSE(double(dr12), 3.000, 0.001);
+ BOOST_CHECK_CLOSE(double(dr13), 4.000, 0.001);
+ BOOST_CHECK_CLOSE(double(dr23), 5.000, 0.001);
+
+ // COMPILATION TESTS
+ distance_type comparable = ggl::make_distance_result<distance_type>(3);
+ //BOOST_CHECK_CLOSE(comparable.value(), 9.000, 0.001);
+
+
+ // Question: how to check if the implemented operator is used, and not the auto-conversion to double?
+ if (comparable == dr12) {};
+ if (comparable < dr12) {};
+ if (comparable > dr12) {};
+
+ // Check streamability
+ std::ostringstream s;
+ s << comparable;
+
+ // Check comparisons with plain double
+ double d = 3.0;
+ if (dr12 == d) {};
+ if (dr12 < d) {};
+ if (dr12 > d) {};
+
+}
+
+template <typename P>
+void test_distance_point()
+{
+ P p1;
+ ggl::set<0>(p1, 1);
+ ggl::set<1>(p1, 1);
+
+ P p2;
+ ggl::set<0>(p2, 2);
+ ggl::set<1>(p2, 2);
+
+ double d = ggl::distance(p1, p2);
+ BOOST_CHECK_CLOSE(d, 1.4142135, 0.001);
+}
+
+template <typename P>
+void test_distance_segment()
+{
+ typedef typename ggl::coordinate_type<P>::type coordinate_type;
+
+ P s1; ggl::set<0>(s1, 2); ggl::set<1>(s1, 2);
+ P s2; ggl::set<0>(s2, 3); ggl::set<1>(s2, 3);
+
+ // Check points left, right, projected-left, projected-right, on segment
+ P p1; ggl::set<0>(p1, 0); ggl::set<1>(p1, 0);
+ P p2; ggl::set<0>(p2, 4); ggl::set<1>(p2, 4);
+ P p3; ggl::set<0>(p3, coordinate_type(2.4)); ggl::set<1>(p3, coordinate_type(2.6));
+ P p4; ggl::set<0>(p4, coordinate_type(2.6)); ggl::set<1>(p4, coordinate_type(2.4));
+ P p5; ggl::set<0>(p5, 2.5); ggl::set<1>(p5, 2.5);
+
+ const ggl::segment<const P> seg(s1, s2);
+
+ double d1 = ggl::distance(p1, seg); BOOST_CHECK_CLOSE(d1, 2.8284271, 0.001);
+ double d2 = ggl::distance(p2, seg); BOOST_CHECK_CLOSE(d2, 1.4142135, 0.001);
+ double d3 = ggl::distance(p3, seg); BOOST_CHECK_CLOSE(d3, 0.141421, 0.001);
+ double d4 = ggl::distance(p4, seg); BOOST_CHECK_CLOSE(d4, 0.141421, 0.001);
+ double d5 = ggl::distance(p5, seg); BOOST_CHECK_CLOSE(d5, 0.0, 0.001);
+
+ // Reverse case
+ double dr1 = ggl::distance(seg, p1); BOOST_CHECK_CLOSE(dr1, d1, 0.001);
+ double dr2 = ggl::distance(seg, p2); BOOST_CHECK_CLOSE(dr2, d2, 0.001);
+}
+
+template <typename P>
+void test_distance_linestring()
+{
+ typedef typename ggl::coordinate_type<P>::type coordinate_type;
+
+ boost::array<P, 2> points;
+ ggl::set<0>(points[0], 1);
+ ggl::set<1>(points[0], 1);
+ ggl::set<0>(points[1], 3);
+ ggl::set<1>(points[1], 3);
+
+#ifndef TEST_ARRAY
+ P p = ggl::make<P>(2, 1);
+#else
+ P p;
+ ggl::set<0>(p, 2); ggl::set<1>(p, 1);
+#endif
+
+ double d = ggl::distance(p, points);
+ BOOST_CHECK_CLOSE(d, 0.70710678, 0.001);
+
+#ifndef TEST_ARRAY
+ p = ggl::make<P>(5, 5);
+#else
+ ggl::set<0>(p, 5); ggl::set<1>(p, 5);
+#endif
+ d = ggl::distance(p, points);
+ BOOST_CHECK_CLOSE(d, 2.828427, 0.001);
+
+
+ ggl::linestring<P> line;
+#ifndef TEST_ARRAY
+ line.push_back(ggl::make<P>(1,1));
+ line.push_back(ggl::make<P>(2,2));
+ line.push_back(ggl::make<P>(3,3));
+#else
+ {
+ P lp;
+ ggl::set<0>(lp, 1); ggl::set<1>(lp, 1); line.push_back(lp);
+ ggl::set<0>(lp, 2); ggl::set<1>(lp, 2); line.push_back(lp);
+ ggl::set<0>(lp, 3); ggl::set<1>(lp, 3); line.push_back(lp);
+ }
+#endif
+
+#ifndef TEST_ARRAY
+ p = ggl::make<P>(5, 5);
+#else
+ ggl::set<0>(p, 5); ggl::set<1>(p, 5);
+#endif
+
+ d = ggl::distance(p, line);
+ BOOST_CHECK_CLOSE(d, 2.828427, 0.001);
+
+ // Reverse case
+ d = ggl::distance(line, p);
+ BOOST_CHECK_CLOSE(d, 2.828427, 0.001);
+}
+
+template <typename P>
+void test_all()
+{
+ test_distance_result<P>();
+ test_distance_point<P>();
+ test_distance_segment<P>();
+#ifndef TEST_ARRAY
+ test_distance_linestring<P>();
+#endif
+}
+
+int test_main(int, char* [])
+{
+#ifdef TEST_ARRAY
+ //test_all<int[2]>();
+ test_all<float[2]>();
+ test_all<double[2]>();
+ test_all<test::test_point>(); // located here because of 3D
+#endif
+
+ //test_all<ggl::point_xy<int> >();
+ test_all<boost::tuple<float, float> >();
+ test_all<ggl::point_xy<float> >();
+ test_all<ggl::point_xy<double> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/envelope.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/envelope.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,57 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <algorithms/test_envelope.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+#include <ggl/geometries/adapted/std_pair_as_segment.hpp>
+#include <test_common/test_point.hpp>
+
+
+
+template <typename P>
+void test_2d()
+{
+ test_envelope<P>("POINT(1 1)", 1, 1, 1, 1);
+ test_envelope<ggl::linestring<P> >("LINESTRING(1 1,2 2)", 1, 2, 1, 2);
+ test_envelope<ggl::polygon<P> >("POLYGON((1 1,1 3,3 3,3 1,1 1))", 1, 3, 1, 3);
+
+ test_envelope<ggl::linear_ring<P> >("POLYGON((1 1,1 3,3 3,3 1,1 1))", 1, 3, 1, 3);
+ test_envelope<ggl::box<P> >("BOX(1 1,3 3)", 1, 3, 1, 3);
+
+ typedef std::pair<P, P> segment_type;
+ test_envelope<segment_type>("SEGMENT(1 1,3 3)", 1, 3, 1, 3);
+}
+
+template <typename P>
+void test_3d()
+{
+ test_envelope<P>("POINT(1 2 3)", 1, 1, 2, 2, 3, 3);
+ test_envelope<P>("POINT(3 2 1)", 3, 3, 2, 2, 1, 1);
+ test_envelope<ggl::linestring<P> >("LINESTRING(1 1 1,2 2 2)", 1, 2, 1, 2, 1, 2);
+ test_envelope<ggl::box<P> >("BOX(1 1 1,3 3 3)", 1, 3, 1, 3, 1, 3);
+}
+
+
+int test_main(int, char* [])
+{
+ //test_2d<int[2]>();
+ //test_2d<float[2]>();
+ //test_2d<double[2]>();
+ test_2d<boost::tuple<float, float> >();
+ test_2d<ggl::point_xy<int> >();
+ test_2d<ggl::point_xy<float> >();
+ test_2d<ggl::point_xy<double> >();
+
+ test_3d<test::test_point>();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/equals.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/equals.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,86 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels, Geodan B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <algorithms/test_equals.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ typedef ggl::box<P> box;
+ typedef ggl::linear_ring<P> ring;
+ typedef ggl::polygon<P> polygon;
+
+
+ test_geometry<P, P>("POINT(1 1)", "POINT(1 1)", true);
+ test_geometry<P, P>("POINT(1 1)", "POINT(1 2)", false);
+ test_geometry<box, box>("BOX(1 1,2 2)", "BOX(1 2,2 2)", false);
+ test_geometry<box, box>("BOX(1 2,3 4)", "BOX(1 2,3 4)", true);
+
+ // Completely equal
+ test_geometry<ring, ring>("POLYGON((0 0,0 2,2 2,0 0))", "POLYGON((0 0,0 2,2 2,0 0))", true);
+ // Shifted
+ test_geometry<ring, ring>("POLYGON((2 2,0 0,0 2,2 2))", "POLYGON((0 0,0 2,2 2,0 0))", true);
+ // Extra coordinate
+ test_geometry<ring, ring>("POLYGON((0 0,0 2,2 2,0 0))", "POLYGON((0 0,0 2,2 2,1 1,0 0))", true);
+ // Degenerate points
+ test_geometry<ring, ring>("POLYGON((0 0,0 2,2 2,2 2,0 0))", "POLYGON((0 0,0 2,0 2,2 2,0 0))", true);
+
+ // Two different bends, same area, unequal
+ test_geometry<ring, ring>(
+ "POLYGON((4 0,5 3,8 4,7 7,4 8,0 4,4 0))",
+ "POLYGON((4 0,7 1,8 4,5 5,4 8,0 4,4 0))", false);
+
+ // Unequal (but same area)
+ test_geometry<ring, ring>("POLYGON((0 0,0 2,2 2,0 0))", "POLYGON((1 1,1 3,3 3,1 1))", false);
+
+ // Polygons, exterior rings equal (shifted)
+ test_geometry<polygon, polygon>("POLYGON((0 0,0 2,2 2,0 0))", "POLYGON((0 2,2 2,0 0,0 2))", true);
+
+ // One having hole
+ test_geometry<polygon, polygon>("POLYGON((0 0,0 4,4 4,0 0))", "POLYGON((0 0,0 4,4 4,0 0),(1 1,2 1,2 2,1 2,1 1))", false);
+
+ // Both having holes
+ test_geometry<polygon, polygon>(
+ "POLYGON((0 0,0 4,4 4,0 0),(1 1,2 1,2 2,1 2,1 1))",
+ "POLYGON((0 0,0 4,4 4,0 0),(1 1,2 1,2 2,1 2,1 1))", true);
+
+ // Both having holes, outer equal, inner not equal
+ test_geometry<polygon, polygon>(
+ "POLYGON((0 0,0 4,4 4,0 0),(1 1,2 1,2 2,1 2,1 1))",
+ "POLYGON((0 0,0 4,4 4,0 0),(2 2,3 2,3 3,2 3,2 2))", false);
+
+ // Both having 2 holes, equal but in different order
+ test_geometry<polygon, polygon>(
+ "POLYGON((0 0,0 4,4 4,0 0),(1 1,2 1,2 2,1 2,1 1),(2 2,3 2,3 3,2 3,2 2))",
+ "POLYGON((0 0,0 4,4 4,0 0),(2 2,3 2,3 3,2 3,2 2),(1 1,2 1,2 2,1 2,1 1))", true);
+
+ // Both having 5 holes, equal but in different order
+ test_geometry<polygon, polygon>(
+ "POLYGON((0 0,0 10,10 10,0 0),(1 1,2 1,2 2,1 2,1 1),(4 1,5 1,5 2,4 2,4 1),(2 2,3 2,3 3,2 3,2 2))",
+ "POLYGON((0 0,0 10,10 10,0 0),(4 1,5 1,5 2,4 2,4 1),(2 2,3 2,3 3,2 3,2 2),(1 1,2 1,2 2,1 2,1 1))", true);
+}
+
+
+
+
+int test_main( int , char* [] )
+{
+ //test_all<ggl::point_xy<int> >();
+ test_all<ggl::point_xy<double> >();
+
+#if defined(HAVE_CLN)
+// test_all<ggl::point_xy<boost::numeric_adaptor::cln_value_type> >();
+#endif
+#if defined(HAVE_GMP)
+// test_all<ggl::point_xy<boost::numeric_adaptor::gmp_value_type> >();
+#endif
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/for_each.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/for_each.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,74 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <algorithms/test_for_each.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+
+
+
+template <typename P>
+void test_all()
+{
+ test_geometry<P>
+ (
+ "POINT(1 1)"
+
+ // per point
+ , 1
+ , "POINT(101 1)"
+ , "POINT(101 100)"
+ // per segment
+ , ""
+ , 0
+ , "POINT(1 1)"
+ );
+ test_geometry<ggl::linestring<P> >
+ (
+ "LINESTRING(1 1,2 2)"
+
+ , 3
+ , "LINESTRING(101 1,102 2)"
+ , "LINESTRING(101 100,102 200)"
+
+ , "((1, 1), (2, 2))"
+ , std::sqrt(2.0)
+ , "LINESTRING(10 1,2 2)"
+ );
+ test_geometry<ggl::linear_ring<P> >
+ (
+ "POLYGON((1 1,1 4,4 4,4 1,1 1))"
+
+ , 11
+ , "POLYGON((101 1,101 4,104 4,104 1,101 1))"
+ , "POLYGON((101 100,101 400,104 400,104 100,101 100))"
+
+ , "((1, 1), (1, 4)) ((1, 4), (4, 4)) ((4, 4), (4, 1)) ((4, 1), (1, 1))"
+ , 4 * 3.0
+ , "POLYGON((10 1,10 4,4 4,4 1,1 1))"
+ );
+ test_geometry<ggl::polygon<P> >
+ (
+ "POLYGON((1 1,1 4,4 4,4 1,1 1),(2 2,3 2,3 3,2 3,2 2))"
+
+ , 23
+ , "POLYGON((101 1,101 4,104 4,104 1,101 1),(102 2,103 2,103 3,102 3,102 2))"
+ , "POLYGON((101 100,101 400,104 400,104 100,101 100),(102 200,103 200,103 300,102 300,102 200))"
+
+ , "((1, 1), (1, 4)) ((1, 4), (4, 4)) ((4, 4), (4, 1)) ((4, 1), (1, 1)) "
+ "((2, 2), (3, 2)) ((3, 2), (3, 3)) ((3, 3), (2, 3)) ((2, 3), (2, 2))"
+ , 4 * 3.0 + 4 * 1.0
+ , "POLYGON((10 1,10 4,4 4,4 1,1 1),(2 2,3 2,3 3,2 3,2 2))"
+ );
+}
+
+int test_main(int, char* [])
+{
+ test_all<ggl::point<double, 2, ggl::cs::cartesian> >();
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/intersection.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/intersection.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,196 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <iostream>
+#include <string>
+
+
+#include <algorithms/test_intersection.hpp>
+#include <algorithms/test_overlay.hpp>
+
+#include <ggl/geometries/adapted/std_as_linestring.hpp>
+
+#include <test_common/test_point.hpp>
+#include <test_common/with_pointer.hpp>
+
+
+
+template <typename P>
+void test_all()
+{
+ typedef ggl::linestring<P> linestring;
+ typedef ggl::polygon<P> polygon;
+ typedef ggl::box<P> box;
+
+ std::string clip = "box(2 2,8 8)";
+
+ // Basic check: box/linestring, is clipping OK? should compile in any order
+ test_one<linestring, linestring, box>(1, "LINESTRING(0 0,10 10)", clip, 1, 2, sqrt(2.0 * 6.0 * 6.0));
+ test_one<linestring, box, linestring>(2, clip, "LINESTRING(0 0,10 10)", 1, 2, sqrt(2.0 * 6.0 * 6.0));
+
+ // Completely inside
+ test_one<linestring, linestring, box>(3, "LINESTRING(3 3,7 7)", clip, 1, 2, sqrt(2.0 * 4.0 * 4.0));
+
+ // Completely outside
+ test_one<linestring, linestring, box>(4, "LINESTRING(9 9,10 10)", clip, 0, 0, 0);
+
+ // Touching with point (-> output linestring with ONE point)
+ //std::cout << "Note: this line is degenerate! Might be removed!" << std::endl;
+ test_one<linestring, linestring, box>(5, "LINESTRING(8 8,10 10)", clip, 1, 2, 0.0);
+
+ // Along border
+ test_one<linestring, linestring, box>(6, "LINESTRING(2 2,2 8)", clip, 1, 2, 6);
+
+ // Outputting two lines (because of 3-4-5 constructions (0.3,0.4,0.5)
+ // which occur 4 times, the length is expected to be 2.0)
+ test_one<linestring, linestring, box>(7, "LINESTRING(1.7 1.6,2.3 2.4,2.9 1.6,3.5 2.4,4.1 1.6)", clip, 2, 6, 4 * 0.5);
+
+
+ test_one<polygon, box, polygon>(10, example_box, example_ring,
+ 2, 12, 1.09125);
+
+ test_one<polygon, box, polygon>(11, example_box, example_polygon,
+ 3, 19, 0.840166);
+
+ test_one<polygon, polygon, polygon>(12, example_star, example_ring,
+ 1, 18, 2.80983);
+
+ test_one<polygon, polygon, polygon>(13, example_star, example_polygon,
+ 1, 22, 2.5020508);
+
+
+ test_one<polygon, box, polygon>(20, example_box,
+ "POLYGON((3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2))",
+ 2, 12, 1.09125);
+
+ test_one<polygon, box, polygon>(21, example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,5.3 2.5,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))",
+ 2, 12, 1.00375);
+ test_one<polygon, box, polygon>(22, example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,4.5 2.5,4.5 1.2,4.9 0.8,2.9 0.7,2 1.3))",
+ 2, 12, 1.00375);
+ test_one<polygon, box, polygon>(23, example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,4.5 2.5,4.5 2.3,5.0 2.3,5.0 2.1,4.5 2.1,4.5 1.9,4.0 1.9,4.5 1.2,4.9 0.8,2.9 0.7,2 1.3))",
+ 2, 14, 0.860892);
+
+ test_one<polygon, box, polygon>(24, example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,4.5 1.2,2.9 0.7,2 1.3))",
+ 2, 11, 0.7575961);
+
+ test_one<polygon, box, polygon>(25, example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.0 3.0,5.0 2.0,2.9 0.7,2 1.3))",
+ 2, 13, 1.0744456);
+
+ test_one<polygon, box, polygon>(26, "box(0 0, 3 3)",
+ "POLYGON((2 2, 1 4, 2 4, 3 3, 2 2))", 1, 4, 0.75);
+
+ test_one<polygon, polygon, polygon>(27,
+ first_within_second[0], first_within_second[1],
+ 1, 5, 1.0);
+
+ test_one<polygon, polygon, polygon>(28,
+ first_within_second[1], first_within_second[0],
+ 1, 5, 1.0);
+
+ test_one<polygon, polygon, polygon>(29,
+ first_within_hole_of_second[0], first_within_hole_of_second[1],
+ 0, 0, 0.0);
+
+ // Two forming new hole
+ test_one<polygon, polygon, polygon>(30,
+ new_hole[0], new_hole[1],
+ 2, 10, 2.0);
+
+ // Two identical
+ test_one<polygon, polygon, polygon>(31,
+ identical[0], identical[1],
+ 1, 5, 1.0);
+
+ // Two, inside each other, having intersections but holes are disjoint
+ test_one<polygon, polygon, polygon>(32,
+ intersect_holes_disjoint[0], intersect_holes_disjoint[1],
+ 1, 15, 18.0);
+
+ // Two, inside each other, having no intersections but holes are disjoint
+ test_one<polygon, polygon, polygon>(33,
+ intersect_holes_disjoint[0], intersect_holes_disjoint[1],
+ 1, 15, 18.0);
+
+ // Two, inside each other, having intersections; holes separate intersections
+ test_one<polygon, polygon, polygon>(34,
+ intersect_holes_intersect[0], intersect_holes_intersect[1],
+ 1, 14, 18.25);
+
+ test_one<polygon, polygon, polygon>(35,
+ intersect_holes_intersect_and_disjoint[0], intersect_holes_intersect_and_disjoint[1],
+ 1, 19, 17.25);
+
+ test_one<polygon, polygon, polygon>(36,
+ intersect_holes_intersect_and_touch[0], intersect_holes_intersect_and_touch[1],
+ 1, 24, 17.25);
+
+
+ test_one<polygon, polygon, polygon>(37,
+ winded[0], winded[1],
+ 1, 22, 40.0);
+
+ test_one<polygon, polygon, polygon>(38,
+ two_bends[0], two_bends[1],
+ 1, 7, 24.0);
+
+
+
+
+ /*
+ test_one<polygon, box, polygon>(99, "box(115041.10 471900.10, 118334.60 474523.40)",
+ "POLYGON ((115483.40 474533.40, 116549.40 474059.20, 117199.90 473762.50, 117204.90 473659.50, 118339.40 472796.90, 118334.50 472757.90, 118315.10 472604.00, 118344.60 472520.90, 118277.90 472419.10, 118071.40 472536.80, 118071.40 472536.80, 117943.10 472287.70, 117744.90 472248.40, 117708.00 472034.50, 117481.90 472056.90, 117481.90 472056.90, 117272.30 471890.10, 117077.90 472161.20, 116146.60 473054.50, 115031.10 473603.30, 115483.40 474533.40))",
+ 1, 26, 3727690.74);
+ */
+
+}
+
+void test_pointer_version()
+{
+ std::vector<test::test_point_xy*> ln;
+ test::test_point_xy* p;
+ p = new test::test_point_xy; p->x = 0; p->y = 0; ln.push_back(p);
+ p = new test::test_point_xy; p->x = 10; p->y = 10; ln.push_back(p);
+
+ ggl::box<ggl::point_xy<double> > box;
+ ggl::assign(box, 2, 2, 8, 8);
+
+ typedef ggl::linestring<ggl::point_xy<double> > output_type;
+ std::vector<output_type> clip;
+ ggl::intersection_inserter<output_type>(box, ln, std::back_inserter(clip));
+
+ double length = 0;
+ int n = 0;
+ for (std::vector<output_type>::const_iterator it = clip.begin();
+ it != clip.end(); ++it)
+ {
+ length += ggl::length(*it);
+ n += ggl::num_points(*it);
+ }
+
+ BOOST_CHECK_EQUAL(clip.size(), 1);
+ BOOST_CHECK_EQUAL(n, 2);
+ BOOST_CHECK_CLOSE(length, sqrt(2.0 * 6.0 * 6.0), 0.001);
+
+
+ for (unsigned int i = 0; i < ln.size(); i++)
+ {
+ delete ln[i];
+ }
+}
+
+int test_main(int, char* [])
+{
+ test_all<ggl::point_xy<double> >();
+ test_pointer_version();
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/intersects.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/intersects.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,83 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels, Geodan B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <algorithms/test_intersects.hpp>
+
+
+#include <ggl/geometries/box.hpp>
+#include <ggl/geometries/cartesian2d.hpp>
+#include <ggl/geometries/linear_ring.hpp>
+#include <ggl/geometries/linestring.hpp>
+#include <ggl/geometries/point.hpp>
+#include <ggl/geometries/point_xy.hpp>
+#include <ggl/geometries/polygon.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ // intersect <=> ! disjoint
+ // so most tests are done in disjoint test.
+ // We only test compilation of one case.
+ test_geometry<P, ggl::box<P> >("POINT(1 1)", "BOX(0 0,2 2)", true);
+
+ // self-intersecting is not tested in disjoint, so that is done here.
+ typedef ggl::polygon<P> polygon;
+
+ // Just a normal polygon
+ test_self_intersects<polygon>("POLYGON((0 0,0 4,1.5 2.5,2.5 1.5,4 0,0 0))", false);
+
+ // Self intersecting
+ test_self_intersects<polygon>("POLYGON((1 2,1 1,2 1,2 2.25,3 2.25,3 0,0 0,0 3,3 3,2.75 2,1 2))", true);
+
+ // Self intersecting in last segment
+ test_self_intersects<polygon>("POLYGON((0 2,2 4,2 0,4 2,0 2))", true);
+
+ // Self tangent
+ test_self_intersects<polygon>("POLYGON((0 0,0 4,4 4,4 0,2 4,0 0))", true);
+
+ // Self tangent in corner
+ test_self_intersects<polygon>("POLYGON((0 0,0 4,4 4,4 0,0 4,2 0,0 0))", true);
+
+ // With spike
+ test_self_intersects<polygon>("POLYGON((0 0,0 4,4 4,4 2,6 2,4 2,4 0,0 0))", true);
+
+ // Non intersection, but with duplicate
+ test_self_intersects<polygon>("POLYGON((0 0,0 4,4 0,4 0,0 0))", false);
+
+ // With many duplicates
+ test_self_intersects<polygon>(
+ "POLYGON((0 0,0 1,0 1,0 1,0 2,0 2,0 3,0 3,0 3,0 3,0 4,2 4,2 4,4 4,4 0,4 0,3 0,3 0,3 0,3 0,3 0,0 0))",
+ false);
+
+ // Hole: interior tangent to exterior
+ test_self_intersects<polygon>("POLYGON((0 0,0 4,4 4,4 0,0 0),(1 2,2 4,3 2,1 2))", true);
+
+ // Hole: interior intersecting exterior
+ test_self_intersects<polygon>("POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,1 3,5 4,1 1))", true);
+
+ // Hole: two intersecting holes
+ test_self_intersects<polygon>(
+ "POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,1 3,3 3,3 1,1 1),(2 2,2 3.5,3.5 3.5,3.5 2,2 2))", true);
+}
+
+
+
+
+int test_main( int , char* [] )
+{
+ test_all<ggl::point_xy<double> >();
+
+#if defined(HAVE_CLN)
+ //test_all<ggl::point_xy<boost::numeric_adaptor::cln_value_type> >();
+#endif
+#if defined(HAVE_GMP)
+ //test_all<ggl::point_xy<boost::numeric_adaptor::gmp_value_type> >();
+#endif
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/length.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/length.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,45 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <algorithms/test_length.hpp>
+
+
+#include <ggl/geometries/geometries.hpp>
+#include <ggl/geometries/adapted/std_pair_as_segment.hpp>
+
+
+
+
+template <typename P>
+void test_all()
+{
+ // 3-4-5 triangle
+ test_geometry<std::pair<P, P> >("LINESTRING(0 0,3 4)", 5);
+
+ // 3-4-5 plus 1-1
+ test_geometry<ggl::linestring<P> >("LINESTRING(0 0,3 4,4 3)", 5 + sqrt(2.0));
+
+ // Geometries with length zero
+ test_geometry<P>("POINT(0 0)", 0);
+ test_geometry<ggl::polygon<P> >("POLYGON((0 0,0 1,1 1,1 0,0 0))", 0);
+}
+
+int test_main(int, char* [])
+{
+ test_all<ggl::point_xy<int> >();
+ test_all<ggl::point_xy<float> >();
+ test_all<ggl::point_xy<double> >();
+
+#if defined(HAVE_CLN)
+ test_all<ggl::point_xy<boost::numeric_adaptor::cln_value_type> >();
+#endif
+#if defined(HAVE_GMP)
+ test_all<ggl::point_xy<boost::numeric_adaptor::gmp_value_type> >();
+#endif
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/make.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/make.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,125 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/make.hpp>
+
+#include <ggl/extensions/gis/io/wkt/write_wkt.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+#include <test_common/test_point.hpp>
+
+
+using namespace ggl;
+
+template <typename T, typename P>
+void test_point_2d()
+{
+ P p = make<P>((T) 123, (T) 456);
+ BOOST_CHECK_CLOSE( ((double) get<0>(p)), (double) 123, 1.0e-6);
+ BOOST_CHECK_CLOSE( ((double) get<1>(p)), (double) 456, 1.0e-6);
+
+}
+
+template <typename T, typename P>
+void test_point_3d()
+{
+ P p = make<P>((T) 123, (T) 456, (T) 789);
+ BOOST_CHECK_CLOSE( ((double) get<0>(p)), (double) 123, 1.0e-6);
+ BOOST_CHECK_CLOSE( ((double) get<1>(p)), (double) 456, 1.0e-6);
+ BOOST_CHECK_CLOSE( ((double) get<2>(p)), (double) 789, 1.0e-6);
+}
+
+template <typename T, typename P>
+void test_box_2d()
+{
+ typedef box<P> B;
+ B b = make<B>((T) 123, (T) 456, (T) 789, (T) 1011);
+ BOOST_CHECK_CLOSE( ((double) get<min_corner, 0>(b)), (double) 123, 1.0e-6);
+ BOOST_CHECK_CLOSE( ((double) get<min_corner, 1>(b)), (double) 456, 1.0e-6);
+ BOOST_CHECK_CLOSE( ((double) get<max_corner, 0>(b)), (double) 789, 1.0e-6);
+ BOOST_CHECK_CLOSE( ((double) get<max_corner, 1>(b)), (double) 1011, 1.0e-6);
+
+ b = make_inverse<B>();
+}
+
+template <typename T, typename P>
+void test_linestring_2d()
+{
+ typedef linestring<P> L;
+
+ T coors[][2] = {{1,2}, {3,4}};
+
+ L line = make<L>(coors);
+
+ BOOST_CHECK_EQUAL(line.size(), 2);
+}
+
+template <typename T, typename P>
+void test_linestring_3d()
+{
+ typedef linestring<P> L;
+
+ T coors[][3] = {{1,2,3}, {4,5,6}};
+
+ L line = make<L>(coors);
+
+ BOOST_CHECK_EQUAL(line.size(), 2);
+ //std::cout << dsv(line) << std::endl;
+
+}
+
+template <typename T, typename P>
+void test_2d_t()
+{
+ test_point_2d<T, P>();
+ test_box_2d<T, P>();
+ test_linestring_2d<T, P>();
+}
+
+template <typename P>
+void test_2d()
+{
+ test_2d_t<int, P>();
+ test_2d_t<float, P>();
+ test_2d_t<double, P>();
+}
+
+template <typename T, typename P>
+void test_3d_t()
+{
+ test_linestring_3d<T, P>();
+// test_point_3d<T, test_point>();
+}
+
+template <typename P>
+void test_3d()
+{
+ test_3d_t<int, P>();
+ test_3d_t<float, P>();
+ test_3d_t<double, P>();
+}
+
+int test_main(int, char* [])
+{
+ //test_2d<int[2]>();
+ //test_2d<float[2]>();
+ //test_2d<double[2]>();
+ test_2d<point<int, 2, cs::cartesian> >();
+ test_2d<point<float, 2, cs::cartesian> >();
+ test_2d<point<double, 2, cs::cartesian> >();
+
+
+ test_3d<point<double, 3, cs::cartesian> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/overlaps.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/overlaps.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,63 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels, Geodan B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <algorithms/test_overlaps.hpp>
+
+
+#include <ggl/geometries/box.hpp>
+#include <ggl/geometries/cartesian2d.hpp>
+#include <ggl/geometries/linear_ring.hpp>
+#include <ggl/geometries/linestring.hpp>
+#include <ggl/geometries/point.hpp>
+#include <ggl/geometries/point_xy.hpp>
+#include <ggl/geometries/polygon.hpp>
+
+
+template <typename P>
+void test_2d()
+{
+ test_geometry<ggl::box<P>, ggl::box<P> >("BOX(1 1, 3 3)", "BOX(0 0,2 2)", true);
+
+ // touch -> false
+ test_geometry<ggl::box<P>, ggl::box<P> >("BOX(1 1, 3 3)", "BOX(3 3,5 5)", false);
+
+ // disjoint -> false
+ test_geometry<ggl::box<P>, ggl::box<P> >("BOX(1 1, 3 3)", "BOX(4 4,6 6)", false);
+
+ // within -> false
+ test_geometry<ggl::box<P>, ggl::box<P> >("BOX(1 1, 5 5)", "BOX(2 2,3 3)", false);
+
+ // within+touch -> false
+ test_geometry<ggl::box<P>, ggl::box<P> >("BOX(1 1, 5 5)", "BOX(2 2,5 5)", false);
+}
+
+template <typename P>
+void test_3d()
+{
+ test_geometry<ggl::box<P>, ggl::box<P> >("BOX(1 1 1, 3 3 3)", "BOX(0 0 0,2 2 2)", true);
+ test_geometry<ggl::box<P>, ggl::box<P> >("BOX(1 1 1, 3 3 3)", "BOX(3 3 3,5 5 5)", false);
+ test_geometry<ggl::box<P>, ggl::box<P> >("BOX(1 1 1, 3 3 3)", "BOX(4 4 4,6 6 6)", false);
+}
+
+
+
+int test_main( int , char* [] )
+{
+ test_2d<ggl::point_xy<int> >();
+ test_2d<ggl::point_xy<double> >();
+
+#if defined(HAVE_CLN)
+ test_2d<ggl::point_xy<boost::numeric_adaptor::cln_value_type> >();
+#endif
+#if defined(HAVE_GMP)
+ test_2d<ggl::point_xy<boost::numeric_adaptor::gmp_value_type> >();
+#endif
+
+ //test_3d<ggl::point<double, 3, ggl::cs::cartesian> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/perimeter.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/perimeter.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,42 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl/geometries/geometries.hpp>
+
+#include <algorithms/test_perimeter.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ // 3-4-5 triangle
+ //test_geometry<std::pair<P, P> >("LINESTRING(0 0,3 4)", 5);
+
+ test_geometry<ggl::linear_ring<P> >(
+ "POLYGON((0 0,0 1,1 1,1 0,0 0))", 4);
+ test_geometry<ggl::polygon<P> >(
+ "POLYGON((0 0,0 1,1 0,0 0))", 1.0 + 1.0 + sqrt(2.0));
+ test_geometry<ggl::polygon<P> >(
+ "POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,2 1,2 2,1 2,1 1))", 20);
+}
+
+int test_main(int, char* [])
+{
+ //test_all<ggl::point_xy<int> >();
+ test_all<ggl::point_xy<float> >();
+ test_all<ggl::point_xy<double> >();
+
+#if defined(HAVE_CLN)
+ test_all<ggl::point_xy<boost::numeric_adaptor::cln_value_type> >();
+#endif
+#if defined(HAVE_GMP)
+ test_all<ggl::point_xy<boost::numeric_adaptor::gmp_value_type> >();
+#endif
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/sectionalize.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/sectionalize.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,154 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <iostream>
+#include <string>
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/make.hpp>
+#include <ggl/algorithms/sectionalize.hpp>
+#include <ggl/geometries/geometries.hpp>
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+#include <ggl/extensions/gis/io/wkt/write_wkt.hpp>
+
+#include <test_common/test_point.hpp>
+
+template <int DimensionCount, typename G>
+void test_sectionalize(G const& g, int section_count,
+ std::string const& index_check, std::string const& dir_check)
+{
+ typedef typename ggl::point_type<G>::type point;
+ typedef ggl::box<point> box;
+ typedef ggl::sections<box, DimensionCount> sections;
+
+ sections s;
+ ggl::sectionalize(g, s);
+
+ BOOST_CHECK_EQUAL(s.size(), section_count);
+
+ // Output streams for sections, boxes, other
+ std::ostringstream out_sections;
+ std::ostringstream out_boxes;
+ std::ostringstream out_dirs;
+
+ for (typename sections::size_type i = 0; i < s.size(); i++)
+ {
+ box const& b = s[i].bounding_box;
+
+ if (i > 0)
+ {
+ out_sections << "|";
+ out_dirs << "|";
+ out_boxes << "|";
+ }
+
+ out_sections << s[i].begin_index << ".." << s[i].end_index;
+ out_boxes << ggl::get<0,0>(b) << " " << ggl::get<0,1>(b)
+ << ".." << ggl::get<1,0>(b) << " " << ggl::get<1,1>(b);
+ for (int d = 0; d < DimensionCount; d++)
+ {
+ out_dirs << (d == 0 ? "" : " ");
+ switch(s[i].directions[d])
+ {
+ case -99: out_dirs << "DUP"; break;
+ case -1 : out_dirs << "-"; break;
+ case 0 : out_dirs << "."; break;
+ case +1 : out_dirs << "+"; break;
+ }
+ }
+ }
+
+ if (! index_check.empty())
+ {
+ BOOST_CHECK_EQUAL(out_sections.str(), index_check);
+ }
+ if (! dir_check.empty())
+ {
+ BOOST_CHECK_EQUAL(out_dirs.str(), dir_check);
+ }
+ else
+ {
+ std::cout << std::endl << ggl::wkt(g) << std::endl;
+ std::cout << out_sections.str() << std::endl;
+ //std::cout << out_boxes.str() << std::endl;
+ std::cout << out_dirs.str() << std::endl;
+ }
+}
+
+template <typename G>
+void test_sectionalize(std::string const& wkt,
+ int count2, std::string const& s2, std::string const d2,
+ int count1, std::string const& s1, std::string const d1)
+{
+ G g;
+ ggl::read_wkt(wkt, g);
+ test_sectionalize<2>(g, count2, s2, d2);
+ test_sectionalize<1>(g, count1, s1, d1);
+}
+
+template <typename P>
+void test_all()
+{
+ test_sectionalize<ggl::linestring<P> >(
+ "LINESTRING(1 1,2 2,3 0,5 0,5 8)",
+ 4, "0..1|1..2|2..3|3..4", "+ +|+ -|+ .|. +",
+ 2, "0..3|3..4", "+|.");
+
+ test_sectionalize<ggl::polygon<P> >(
+ "POLYGON((0 0,0 7,4 2,2 0,0 0))",
+ 4, "0..1|1..2|2..3|3..4", ". +|+ -|- -|- .",
+ // . + - - -> 3 sections
+ 3, "0..1|1..2|2..4", ".|+|-");
+
+ test_sectionalize<ggl::polygon<P> >
+ ("polygon((2.0 1.3, 2.4 1.7, 2.8 1.8, 3.4 1.2, 3.7 1.6,3.4 2.0, 4.1 3.0, 5.3 2.6, 5.4 1.2, 4.9 0.8, 2.9 0.7,2.0 1.3))",
+ 8, "0..2|2..3|3..4|4..5|5..6|6..8|8..10|10..11", "+ +|+ -|+ +|- +|+ +|+ -|- -|- +",
+ 4, "0..4|4..5|5..8|8..11", "+|-|+|-");
+
+
+ test_sectionalize<ggl::polygon<P> >(
+ "POLYGON((3 1,2 2,1 3,2 4,3 5,4 4,5 3,4 2,3 1))",
+ 4, "0..2|2..4|4..6|6..8", "- +|+ +|+ -|- -",
+ // - - - + + + + - - -> 3 sections
+ 3, "0..2|2..6|6..8", "-|+|-");
+
+ // With holes
+ test_sectionalize<ggl::polygon<P> >(
+ "POLYGON((3 1,2 2,1 3,2 4,3 5,4 4,5 3,4 2,3 1), (3 2,2 2,3 4,3 2))",
+ 7, "0..2|2..4|4..6|6..8|0..1|1..2|2..3", "- +|+ +|+ -|- -|- .|+ +|. -",
+ // - - - + + + + - - - + . -> 6 sections
+ 6, "0..2|2..6|6..8|0..1|1..2|2..3", "-|+|-|-|+|.");
+
+ // With duplicates
+ test_sectionalize<ggl::linestring<P> >(
+ "LINESTRING(1 1,2 2,3 0,3 0,5 0,5 8)",
+ 5, "0..1|1..2|2..3|3..4|4..5", "+ +|+ -|DUP DUP|+ .|. +",
+ 4, "0..2|2..3|3..4|4..5", "+|DUP|+|.");
+ // With two subsequent duplicate segments
+ test_sectionalize<ggl::linestring<P> >(
+ "LINESTRING(1 1,2 2,3 0,3 0,3 0,5 0,5 0,5 0,5 0,5 8)",
+ 6, "0..1|1..2|2..4|4..5|5..8|8..9", "+ +|+ -|DUP DUP|+ .|DUP DUP|. +",
+ 5, "0..2|2..4|4..5|5..8|8..9", "+|DUP|+|DUP|.");
+
+
+ typedef ggl::box<P> B;
+ test_sectionalize<2, B>(ggl::make<B>(0,0,4,4),
+ 4, "0..1|1..2|2..3|3..4", ". +|+ .|. -|- .");
+ test_sectionalize<1, B>(ggl::make<B>(0,0,4,4),
+ 4, "0..1|1..2|2..3|3..4", ".|+|.|-");
+}
+
+int test_main(int, char* [])
+{
+ //test_all<ggl::point_xy<float> >();
+ test_all<ggl::point_xy<double> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/simplify.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/simplify.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,86 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <iterator>
+
+
+#include <algorithms/test_simplify.hpp>
+#include <ggl/geometries/geometries.hpp>
+
+
+#include <test_common/test_point.hpp>
+
+
+
+
+template <typename P>
+void test_all()
+{
+ test_geometry<ggl::linestring<P> >(
+ "LINESTRING(0 0,5 5,10 10)",
+ "LINESTRING(0 0,10 10)", 1.0);
+
+ test_geometry<ggl::linestring<P> >(
+ "LINESTRING(0 0, 5 5, 6 5, 10 10)",
+ "LINESTRING(0 0,10 10)", 1.0);
+
+ test_geometry<ggl::linestring<P> >(
+ "LINESTRING(0 0,5 5,7 5,10 10)",
+ "LINESTRING(0 0,5 5,7 5,10 10)", 1.0);
+
+ test_geometry<ggl::polygon<P> >(
+ "POLYGON((4 0,8 2,8 7,4 9,0 7,0 2,2 1,4 0))",
+ "POLYGON((4 0,8 2,8 7,4 9,0 7,0 2,4 0))", 1.0);
+
+ test_geometry<ggl::polygon<P> >(
+ "POLYGON((4 0,8 2,8 7,4 9,0 7,0 2,2 1,4 0),(7 3,7 6,1 6,1 3,4 3,7 3))",
+ "POLYGON((4 0,8 2,8 7,4 9,0 7,0 2,4 0),(7 3,7 6,1 6,1 3,7 3))", 1.0);
+
+/*
+
+Above can be checked in PostGIS by:
+
+select astext(ST_Simplify(geomfromtext('LINESTRING(0 0, 5 5, 10 10)'),1.0)) as simplified
+union all select astext(ST_Simplify(geomfromtext('LINESTRING(0 0, 5 5, 6 5, 10 10)'),1.0))
+union all select astext(ST_Simplify(geomfromtext('LINESTRING(0 0, 5 5, 7 5, 10 10)'),1.0))
+union all select astext(ST_Simplify(geomfromtext('POLYGON((4 0, 8 2, 8 7, 4 9, 0 7, 0 2, 2 1, 4 0))'),1.0))
+union all select astext(ST_Simplify(geomfromtext('POLYGON((4 0, 8 2, 8 7, 4 9, 0 7, 0 2, 2 1, 4 0),(7 3, 7 6, 1 6, 1 3, 4 3, 7 3))'),1.0))
+*/
+
+ // Just check compilation
+ test_geometry<P>(
+ "POINT(0 0)",
+ "POINT(0 0)", 1.0);
+
+
+ test_geometry<ggl::linear_ring<P> >(
+ "POLYGON((4 0,8 2,8 7,4 9,0 7,0 2,2 1,4 0))",
+ "POLYGON((4 0,8 2,8 7,4 9,0 7,0 2,4 0))", 1.0);
+}
+
+
+template <typename P>
+void test_spherical()
+{
+ test_geometry<ggl::linestring<P> >(
+ "LINESTRING(4.1 52.1,4.2 52.2,4.3 52.3)",
+ "LINESTRING(4.1 52.1,4.3 52.3)", 0.01);
+}
+
+
+int test_main(int, char* [])
+{
+ // Integer compiles, but simplify-process fails (due to distances)
+ //test_all<ggl::point_xy<int> >();
+ //test_all<ggl::point_xy<float> >();
+ test_all<ggl::point_xy<double> >();
+
+ test_spherical<ggl::point<double, 2, ggl::cs::spherical<ggl::degree> > >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_area.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_area.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,65 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_AREA_HPP
+#define GGL_TEST_AREA_HPP
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/area.hpp>
+#include <ggl/strategies/strategies.hpp>
+
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+
+
+template <typename Geometry>
+void test_area(Geometry const& geometry, long double expected_area)
+{
+ long double area = ggl::area(geometry);
+
+#ifdef GGL_TEST_DEBUG
+ std::ostringstream out;
+ out << typeid(typename ggl::coordinate_type<Geometry>::type).name()
+ << " "
+ << typeid(typename ggl::area_result<Geometry>::type).name()
+ << " "
+ << "area : " << ggl::area(geometry)
+ << std::endl;
+ std::cout << out.str();
+#endif
+
+ BOOST_CHECK_CLOSE(area, expected_area, 0.0001);
+
+ // Test with explicitly defined strategies
+ ggl::strategy::area::by_triangles
+ <
+ typename ggl::point_type<Geometry>::type
+ > strategy1;
+
+ area = ggl::area(geometry, strategy1);
+
+ ggl::strategy::area::by_triangles
+ <
+ typename ggl::point_type<Geometry>::type,
+ long double
+ > strategy2;
+
+ area = ggl::area(geometry, strategy2);
+
+}
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt, double expected_area)
+{
+ Geometry geometry;
+ ggl::read_wkt(wkt, geometry);
+ test_area(geometry, expected_area);
+}
+
+
+#endif
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_centroid.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_centroid.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,95 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_CENTROID_HPP
+#define GGL_TEST_CENTROID_HPP
+
+// Test-functionality, shared between single and multi tests
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/strategies/strategies.hpp>
+#include <ggl/algorithms/centroid.hpp>
+#include <ggl/algorithms/distance.hpp>
+
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+
+
+template<std::size_t D>
+struct check_result
+{
+};
+
+template <>
+struct check_result<2>
+{
+ template <typename Point, typename T>
+ static void apply(Point const& p, T const& x, T const& y, T const&)
+ {
+ BOOST_CHECK_CLOSE(double(ggl::get<0>(p)), double(x), 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<1>(p)), double(y), 0.001);
+ }
+};
+
+
+template <>
+struct check_result<3>
+{
+ template <typename Point, typename T>
+ static void apply(Point const& p, T const& x, T const& y, T const& z)
+ {
+ BOOST_CHECK_CLOSE(double(ggl::get<0>(p)), double(x), 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<1>(p)), double(y), 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<2>(p)), double(z), 0.001);
+ }
+};
+
+
+
+template <typename CalculationType, typename Geometry, typename Point>
+void test_with_other_calculation_type(Geometry const& geometry, Point& c1)
+{
+ typedef typename ggl::point_type<Geometry>::type point_type;
+ // Calculate it with user defined strategy
+ point_type c2;
+ ggl::centroid(geometry, c2,
+ ggl::strategy::centroid_::bashein_detmer<point_type, point_type, CalculationType>());
+
+ std::cout << typeid(CalculationType).name() << ": " << std::setprecision(20)
+ << ggl::get<0>(c2) << " " << ggl::get<1>(c2)
+ << " -> difference: " << ggl::distance(c1, c2)
+ << std::endl;
+}
+
+template <typename Geometry, typename T>
+void test_centroid(std::string const& wkt, T const& x, T const& y, T const& z = T())
+{
+ Geometry geometry;
+ ggl::read_wkt(wkt, geometry);
+ typedef typename ggl::point_type<Geometry>::type point_type;
+ point_type c1;
+ ggl::centroid(geometry, c1);
+ check_result<ggl::dimension<Geometry>::type::value>::apply(c1, x, y, z);
+
+#ifdef REPORT_RESULTS
+ std::cout << "normal: " << std::setprecision(20) << ggl::get<0>(c1) << " " << ggl::get<1>(c1) << std::endl;
+
+ //test_with_other_calculation_type<long long>(geometry, c1);
+ test_with_other_calculation_type<float>(geometry, c1);
+ test_with_other_calculation_type<long double>(geometry, c1);
+#if defined(HAVE_GMP)
+ test_with_other_calculation_type<boost::numeric_adaptor::gmp_value_type>(geometry, c1);
+#endif
+#if defined(HAVE_CLN)
+ test_with_other_calculation_type<boost::numeric_adaptor::cln_value_type>(geometry, c1);
+#endif
+
+#endif
+}
+
+
+#endif
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_combine.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_combine.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,55 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_COMBINE_HPP
+#define GGL_TEST_COMBINE_HPP
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/combine.hpp>
+#include <ggl/strategies/strategies.hpp>
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+#include <ggl/algorithms/assign.hpp>
+#include <ggl/util/write_dsv.hpp>
+
+
+template <typename Geometry, typename Box>
+void test_combine(Box& box,
+ std::string const& wkt,
+ std::string const& expected)
+{
+ Geometry geometry;
+ ggl::read_wkt(wkt, geometry);
+
+ ggl::combine(box, geometry);
+
+ std::ostringstream out;
+ out << ggl::dsv(box, ",", "(", ")", ",", "", "");
+
+ BOOST_CHECK_EQUAL(out.str(), expected);
+}
+
+template <typename Geometry, typename Box>
+void test_combine_other_strategy(Box& box,
+ std::string const& wkt,
+ std::string const& expected)
+{
+ Geometry geometry;
+ ggl::read_wkt(wkt, geometry);
+
+
+ ggl::combine(box, geometry);
+
+ std::ostringstream out;
+ out << ggl::dsv(box, ",", "(", ")", ",", "", "");
+
+ BOOST_CHECK_EQUAL(out.str(), expected);
+}
+
+
+#endif
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_convex_hull.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_convex_hull.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,113 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_CONVEX_HULL_HPP
+#define GGL_TEST_CONVEX_HULL_HPP
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/convex_hull.hpp>
+#include <ggl/algorithms/area.hpp>
+#include <ggl/algorithms/num_points.hpp>
+
+#include <ggl/strategies/strategies.hpp>
+
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+#include <ggl/extensions/gis/io/wkt/write_wkt.hpp>
+
+#include <ggl/geometries/polygon.hpp>
+
+
+template <typename Geometry, typename Hull>
+void test_convex_hull(Geometry const& geometry, Hull const& hull,
+ std::size_t size_original, std::size_t size_hull,
+ double expected_area, bool reverse)
+{
+
+ std::size_t n = ggl::num_points(hull);
+
+ BOOST_CHECK_MESSAGE(n == size_hull,
+ "convex hull: " << ggl::wkt(geometry)
+ << " -> " << ggl::wkt(hull)
+ << " type "
+ << (typeid(typename ggl::coordinate_type<Hull>::type).name())
+ << " -> Expected: " << size_hull
+ << " detected: " << n);
+
+
+ BOOST_CHECK(ggl::num_points(geometry) == size_original);
+
+ double ah = ggl::area(hull);
+ if (reverse)
+ {
+ ah = -ah;
+ }
+
+//std::cout << "Area: " << ggl::area(geometry) << std::endl;
+//std::cout << ggl::wkt(hull) << std::endl;
+
+ BOOST_CHECK_CLOSE(ah, expected_area, 0.001);
+}
+
+template <typename Geometry, bool Clockwise>
+void test_geometry_order(std::string const& wkt,
+ std::size_t size_original, std::size_t size_hull,
+ double expected_area)
+{
+ Geometry geometry;
+ ggl::read_wkt(wkt, geometry);
+
+ ggl::polygon
+ <
+ typename ggl::point_type<Geometry>::type,
+ std::vector,
+ std::vector,
+ Clockwise
+ > hull;
+
+ // Test version with output iterator
+ convex_hull_inserter(geometry, std::back_inserter(hull.outer()));
+ test_convex_hull(geometry, hull,
+ size_original, size_hull, expected_area, ! Clockwise);
+
+ // Test version with ring as output
+ ggl::clear(hull);
+ ggl::convex_hull(geometry, hull.outer());
+ test_convex_hull(geometry, hull, size_original, size_hull, expected_area, false);
+
+ // Test version with polygon as output
+ ggl::clear(hull);
+ ggl::convex_hull(geometry, hull);
+ test_convex_hull(geometry, hull, size_original, size_hull, expected_area, false);
+
+ // Test version with strategy
+ ggl::clear(hull);
+ ggl::strategy::convex_hull::graham_andrew
+ <
+ Geometry,
+ typename ggl::point_type<Geometry>::type
+ > graham;
+ ggl::convex_hull(geometry, hull.outer(), graham);
+ test_convex_hull(geometry, hull, size_original, size_hull, expected_area, false);
+
+ // Test version with output iterator and strategy
+ ggl::clear(hull);
+ ggl::convex_hull_inserter(geometry, std::back_inserter(hull.outer()), graham);
+ test_convex_hull(geometry, hull, size_original, size_hull, expected_area, ! Clockwise);
+}
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt,
+ std::size_t size_original, std::size_t size_hull,
+ double expected_area)
+{
+ test_geometry_order<Geometry, true>(wkt, size_original, size_hull, expected_area);
+ test_geometry_order<Geometry, false>(wkt, size_original, size_hull, expected_area);
+}
+
+
+#endif
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_envelope.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_envelope.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,88 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_ENVELOPE_HPP
+#define GGL_TEST_ENVELOPE_HPP
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/envelope.hpp>
+#include <ggl/geometries/box.hpp>
+#include <ggl/strategies/strategies.hpp>
+
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+
+
+template<std::size_t DimensionCount>
+struct check_result
+{};
+
+template <>
+struct check_result<2>
+{
+ template <typename Box, typename T>
+ static void apply(Box const& b, const T& x1, const T& y1, const T& z1,
+ const T& x2, const T& y2, const T& z2)
+ {
+ BOOST_CHECK_CLOSE(double(ggl::get<ggl::min_corner, 0>(b)), double(x1), 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<ggl::min_corner, 1>(b)), double(y1), 0.001);
+
+ BOOST_CHECK_CLOSE(double(ggl::get<ggl::max_corner, 0>(b)), double(x2), 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<ggl::max_corner, 1>(b)), double(y2), 0.001);
+ }
+};
+
+template <>
+struct check_result<3>
+{
+ template <typename Box, typename T>
+ static void apply(Box const& b, const T& x1, const T& y1, const T& z1,
+ const T& x2, const T& y2, const T& z2)
+ {
+ BOOST_CHECK_CLOSE(double(ggl::get<ggl::min_corner, 0>(b)), double(x1), 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<ggl::min_corner, 1>(b)), double(y1), 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<ggl::min_corner, 2>(b)), double(z1), 0.001);
+
+ BOOST_CHECK_CLOSE(double(ggl::get<ggl::max_corner, 0>(b)), double(x2), 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<ggl::max_corner, 1>(b)), double(y2), 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<ggl::max_corner, 2>(b)), double(z2), 0.001);
+ }
+};
+
+
+template <typename Geometry, typename T>
+void test_envelope(std::string const& wkt,
+ const T& x1, const T& x2,
+ const T& y1, const T& y2,
+ const T& z1 = 0, const T& z2 = 0)
+{
+ Geometry geometry;
+ ggl::read_wkt(wkt, geometry);
+ ggl::box<typename ggl::point_type<Geometry>::type > b;
+ ggl::envelope(geometry, b);
+
+ check_result<ggl::dimension<Geometry>::type::value>::apply(b, x1, y1, z1, x2, y2, z2);
+}
+
+template <typename Geometry, typename T>
+void test_envelope_strategy(std::string const& wkt,
+ const T& x1, const T& x2,
+ const T& y1, const T& y2,
+ const T& z1 = 0, const T& z2 = 0)
+{
+ Geometry geometry;
+ ggl::read_wkt(wkt, geometry);
+ ggl::box<typename ggl::point_type<Geometry>::type > b;
+ ggl::envelope(geometry, b);
+
+ check_result<ggl::dimension<Geometry>::type::value>::apply(b, x1, y1, z1, x2, y2, z2);
+}
+
+
+
+#endif
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_equals.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_equals.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,40 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_EQUALS_HPP
+#define GGL_TEST_EQUALS_HPP
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/core/ring_type.hpp>
+#include <ggl/algorithms/equals.hpp>
+#include <ggl/strategies/strategies.hpp>
+
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+
+
+template <typename Geometry1, typename Geometry2>
+void test_geometry(std::string const& wkt1,
+ std::string const& wkt2, bool expected)
+{
+ Geometry1 geometry1;
+ Geometry2 geometry2;
+
+ ggl::read_wkt(wkt1, geometry1);
+ ggl::read_wkt(wkt2, geometry2);
+
+ bool detected = ggl::equals(geometry1, geometry2);
+
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "equals: " << wkt1
+ << " to " << wkt2
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
+
+#endif
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_for_each.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_for_each.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,216 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_FOR_EACH_HPP
+#define GGL_TEST_FOR_EACH_HPP
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/for_each.hpp>
+
+#include <ggl/algorithms/distance.hpp>
+#include <ggl/strategies/strategies.hpp>
+#include <ggl/extensions/gis/io/wkt/wkt.hpp>
+#include <ggl/util/write_dsv.hpp>
+
+
+template<typename Point>
+inline void translate_x_function(Point& p)
+{
+ ggl::set<0>(p, ggl::get<0>(p) + 100.0);
+}
+
+template<typename Point>
+struct scale_y_functor
+{
+ inline void operator()(Point& p)
+ {
+ ggl::set<1>(p, ggl::get<1>(p) * 100.0);
+ }
+};
+
+template<typename Point>
+struct sum_x_functor
+{
+ int sum;
+
+ sum_x_functor()
+ : sum(0)
+ {}
+
+ inline void operator()(Point const& p)
+ {
+ sum += int(ggl::get<0>(p));
+ }
+};
+
+// Per segment
+static std::ostringstream g_out;
+
+template<typename Segment>
+inline void stream_segment(Segment const& s)
+{
+ g_out << ggl::dsv(s) << " ";
+}
+
+template<typename Segment>
+struct sum_segment_length
+{
+ double sum;
+
+ sum_segment_length()
+ : sum(0)
+ {}
+ inline void operator()(Segment const& s)
+ {
+ sum += ggl::distance(s.first, s.second);
+ }
+};
+
+template<typename Segment>
+inline void modify_segment(Segment& s)
+{
+ if (ggl::math::equals(ggl::get<0,0>(s), 1.0))
+ {
+ ggl::set<0,0>(s, 10.0);
+ }
+}
+
+
+template <typename Geometry>
+void test_per_point_const(Geometry const& geometry, int expected)
+{
+ typedef typename ggl::point_type<Geometry>::type point_type;
+
+ sum_x_functor<point_type> functor;
+ functor = ggl::for_each_point(geometry, functor);
+ BOOST_CHECK_EQUAL(functor.sum, expected);
+}
+
+template <typename Geometry>
+void test_per_point_non_const(Geometry& geometry,
+ std::string const& expected1,
+ std::string const& expected2)
+{
+ typedef typename ggl::point_type<Geometry>::type point_type;
+
+ // function
+ ggl::for_each_point(geometry, translate_x_function<point_type>);
+ std::ostringstream out1;
+ out1 << ggl::wkt(geometry);
+
+ BOOST_CHECK_MESSAGE(out1.str() == expected1,
+ "for_each_point: "
+ << " expected " << expected1
+ << " got " << ggl::wkt(geometry));
+
+ // functor
+ ggl::for_each_point(geometry, scale_y_functor<point_type>());
+
+ std::ostringstream out2;
+ out2 << ggl::wkt(geometry);
+
+ BOOST_CHECK_MESSAGE(out2.str() == expected2,
+ "for_each_point: "
+ << " expected " << expected2
+ << " got " << ggl::wkt(geometry));
+}
+
+
+template <typename Geometry>
+void test_per_point(std::string const& wkt
+ , int expected_sum_x
+ , std::string const& expected1
+ , std::string const& expected2
+ )
+{
+ Geometry geometry;
+ ggl::read_wkt(wkt, geometry);
+ test_per_point_const(geometry, expected_sum_x);
+ test_per_point_non_const(geometry, expected1, expected2);
+}
+
+
+
+template <typename Geometry>
+void test_per_segment_const(Geometry const& geometry,
+ std::string const& expected_dsv,
+ double expected_length)
+{
+ typedef typename ggl::point_type<Geometry>::type point_type;
+
+ // function
+ g_out.str("");
+ g_out.clear();
+ ggl::for_each_segment(geometry,
+ stream_segment<ggl::segment<const point_type> >);
+ std::string out = g_out.str();
+ boost::trim(out);
+ BOOST_CHECK_EQUAL(out, expected_dsv);
+
+ // functor
+ sum_segment_length<ggl::segment<const point_type> > functor;
+ functor = ggl::for_each_segment(geometry, functor);
+
+ BOOST_CHECK_EQUAL(functor.sum, expected_length);
+}
+
+
+template <typename Geometry>
+void test_per_segment_non_const(Geometry& geometry,
+ std::string const& expected_wkt)
+{
+ typedef typename ggl::point_type<Geometry>::type point_type;
+
+ // function
+ ggl::for_each_segment(geometry,
+ modify_segment<ggl::segment<point_type> >);
+
+ std::ostringstream out;
+ out << ggl::wkt(geometry);
+
+ BOOST_CHECK_MESSAGE(out.str() == expected_wkt,
+ "for_each_segment: "
+ << " expected " << expected_wkt
+ << " got " << ggl::wkt(geometry));
+
+ // function is working here, functor works for all others,
+ // it will also work here.
+}
+
+
+template <typename Geometry>
+void test_per_segment(std::string const& wkt
+ , std::string const& expected_dsv
+ , double expected_length
+ , std::string const& expected_wkt
+ )
+{
+ Geometry geometry;
+ ggl::read_wkt(wkt, geometry);
+ test_per_segment_const(geometry, expected_dsv, expected_length);
+ test_per_segment_non_const(geometry, expected_wkt);
+}
+
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt
+ , int expected_sum_x
+ , std::string const& expected1
+ , std::string const& expected2
+ , std::string const& expected_dsv
+ , double expected_length
+ , std::string const& expected_wkt
+ )
+{
+ test_per_point<Geometry>(wkt, expected_sum_x, expected1, expected2);
+ test_per_segment<Geometry>(wkt, expected_dsv, expected_length, expected_wkt);
+}
+
+
+#endif
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_intersection.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_intersection.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,112 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_INTERSECTION_HPP
+#define GGL_TEST_INTERSECTION_HPP
+
+#include <fstream>
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/intersection.hpp>
+#include <ggl/algorithms/area.hpp>
+#include <ggl/algorithms/length.hpp>
+#include <ggl/algorithms/num_points.hpp>
+#include <ggl/algorithms/simplify.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+
+#include <ggl/strategies/strategies.hpp>
+
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+
+
+#if defined(TEST_WITH_SVG)
+# include <test_util/svg_mapper.hpp>
+#endif
+
+
+template <typename OutputType, typename G1, typename G2>
+void test_intersection(int caseid, G1 const& g1, G2 const& g2,
+ int expected_count = 0, int expected_point_count = 0,
+ double expected_length_or_area = 0)
+{
+ static const bool is_line = ggl::geometry_id<OutputType>::type::value == 2;
+
+ std::vector<OutputType> clip;
+ ggl::intersection_inserter<OutputType>(g1, g2, std::back_inserter(clip));
+
+ double length_or_area = 0;
+ int n = 0;
+ for (typename std::vector<OutputType>::const_iterator it = clip.begin();
+ it != clip.end(); ++it)
+ {
+ // instead of specialization we check it run-time here
+ length_or_area += is_line
+ ? ggl::length(*it)
+ : ggl::area(*it);
+
+ // Simplify to get a correct point-count without duplicate points
+ // (note that overlay might be adapted to avoid duplicates)
+ OutputType simplified;
+ ggl::simplify(*it, simplified, 0.0001);
+ n += ggl::num_points(simplified);
+
+ //std::cout << std::endl << "case " << caseid << " ";
+ //std::cout << ggl::dsv(*it) << std::endl;
+ }
+
+
+ BOOST_CHECK_EQUAL(clip.size(), expected_count);
+ BOOST_CHECK_EQUAL(n, expected_point_count);
+ BOOST_CHECK_CLOSE(length_or_area, expected_length_or_area, 0.001);
+
+
+#if defined(TEST_WITH_SVG)
+ {
+ std::ostringstream filename;
+ filename << "intersection" << caseid << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ svg_mapper<typename ggl::point_type<G2>::type> mapper(svg, 500, 500);
+ mapper.add(g1);
+ mapper.add(g2);
+
+ mapper.map(g1, is_line
+ ? "opacity:0.6;stroke:rgb(0,0,255);stroke-width:5"
+ : "opacity:0.6;fill:rgb(0,0,255);stroke:rgb(0,0,0);stroke-width:1");
+ mapper.map(g2, "opacity:0.6;fill:rgb(0,255,0);stroke:rgb(0,0,0);stroke-width:1");
+
+ for (typename std::vector<OutputType>::const_iterator it = clip.begin();
+ it != clip.end(); ++it)
+ {
+ mapper.map(*it, "opacity:0.6;fill:none;stroke:rgb(255,0,0);stroke-width:5");
+ }
+ }
+#endif
+}
+
+template <typename OutputType, typename G1, typename G2>
+void test_one(int caseid, std::string const& wkt1, std::string const& wkt2,
+ int expected_count = 0, int expected_point_count = 0,
+ double expected_length_or_area = 0)
+{
+ G1 g1;
+ ggl::read_wkt(wkt1, g1);
+
+ G2 g2;
+ ggl::read_wkt(wkt2, g2);
+
+ test_intersection<OutputType>(caseid, g1, g2,
+ expected_count, expected_point_count,
+ expected_length_or_area);
+}
+
+
+
+#endif
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_intersects.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_intersects.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,60 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_INTERSECTS_HPP
+#define GGL_TEST_INTERSECTS_HPP
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/core/ring_type.hpp>
+#include <ggl/algorithms/intersects.hpp>
+#include <ggl/strategies/strategies.hpp>
+#include <ggl/geometries/linear_ring.hpp>
+#include <ggl/geometries/polygon.hpp>
+
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+
+
+template <typename Geometry1, typename Geometry2>
+void test_geometry(std::string const& wkt1,
+ std::string const& wkt2, bool expected)
+{
+ Geometry1 geometry1;
+ Geometry2 geometry2;
+
+ ggl::read_wkt(wkt1, geometry1);
+ ggl::read_wkt(wkt2, geometry2);
+
+ bool detected = ggl::intersects(geometry1, geometry2);
+
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "intersects: " << wkt1
+ << " with " << wkt2
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
+
+
+template <typename Geometry>
+void test_self_intersects(std::string const& wkt, bool expected)
+{
+ Geometry geometry;
+
+ ggl::read_wkt(wkt, geometry);
+
+ bool detected = ggl::intersects(geometry);
+
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "intersects: " << wkt
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
+
+
+
+#endif
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_length.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_length.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,47 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_LENGTH_HPP
+#define GGL_TEST_LENGTH_HPP
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/length.hpp>
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+#include <ggl/strategies/strategies.hpp>
+
+
+template <typename Geometry>
+void test_length(Geometry const& geometry, long double expected_length)
+{
+ long double length = ggl::length(geometry);
+
+#ifdef GGL_TEST_DEBUG
+ std::ostringstream out;
+ out << typeid(typename ggl::coordinate_type<Geometry>::type).name()
+ << std::endl
+ << typeid(typename ggl::length_result<Geometry>::type).name()
+ << std::endl
+ << "length : " << ggl::length(geometry)
+ << std::endl;
+ std::cout << out.str();
+#endif
+
+ BOOST_CHECK_CLOSE(length, expected_length, 0.0001);
+}
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt, double expected_length)
+{
+ Geometry geometry;
+ ggl::read_wkt(wkt, geometry);
+ test_length(geometry, expected_length);
+}
+
+
+#endif
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_overlaps.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_overlaps.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,43 @@
+// Generic Geometry2 Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_OVERLAPS_HPP
+#define GGL_TEST_OVERLAPS_HPP
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/core/ring_type.hpp>
+#include <ggl/algorithms/overlaps.hpp>
+#include <ggl/strategies/strategies.hpp>
+#include <ggl/geometries/linear_ring.hpp>
+#include <ggl/geometries/polygon.hpp>
+
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+
+
+template <typename Geometry1, typename Geometry2>
+void test_geometry(std::string const& wkt1,
+ std::string const& wkt2, bool expected)
+{
+ Geometry1 geometry1;
+ Geometry2 geometry2;
+
+ ggl::read_wkt(wkt1, geometry1);
+ ggl::read_wkt(wkt2, geometry2);
+
+ bool detected = ggl::overlaps(geometry1, geometry2);
+
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "overlaps: " << wkt1
+ << " with " << wkt2
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
+
+
+#endif
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_overlay.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_overlay.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,83 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_OVERLAY_HPP
+#define GGL_TEST_OVERLAY_HPP
+
+#include <string>
+
+static std::string example_box = "box(1.5 1.5, 4.5 2.5)";
+static std::string example_ring =
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))";
+
+static std::string example_polygon =
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"
+ "(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))";
+
+
+
+static std::string example_star =
+ "POLYGON((4.0 -0.5 , 3.5 1.0 , 2.0 1.5 , 3.5 2.0 , 4.0 3.5 , 4.5 2.0 , 6.0 1.5 , 4.5 1.0 , 4.0 -0.5))";
+
+static std::string identical[2] =
+ {"POLYGON((0 0,0 1,1 1,1 0,0 0))",
+ "POLYGON((1 1,1 0,0 0,0 1,1 1))"};
+
+
+static std::string new_hole[2] =
+ {"POLYGON((2 2,2 5,5 5,5 2,2 2))",
+ "POLYGON((0 0,0 6,3 6,3 4,1 4,1 3,3 3,3 0,0 0))"};
+
+static std::string two_bends[2] =
+ {"POLYGON((0 4,4 8,7 7,8 4,5 3,4 0,0 4))",
+ "POLYGON((0 4,4 8,5 5,8 4,7 1,4 0,0 4))"};
+
+static std::string side_side[2] =
+ {"POLYGON((0 0,0 1,1 1,1 0,0 0))",
+ "POLYGON((1 0,1 1,2 1,2 0,1 0))"};
+
+
+ // First within second
+static std::string first_within_second[2] =
+ {"POLYGON((2 2,2 3,3 3,3 2,2 2))",
+ "POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))"};
+
+
+ // First within hole of second
+static std::string first_within_hole_of_second[2] =
+ {"POLYGON((2 2,2 3,3 3,3 2,2 2))",
+ "POLYGON((0 0, 0 5, 5 5, 5 0, 0 0),(1 1,4 1,4 4,1 4,1 1))"};
+
+
+// within each other, having no intersections but many holes within each other
+static std::string winded[2] =
+ {"POLYGON((0 0,0 11,11 11,11 0,0 0),(3 3,4 3,4 4,3 4,3 3),(5 3,6 3,6 4,5 4,5 3),(2 6,7 6,7 6,7 9,2 9,2 6),(9 2,10 2,10 5,9 5,9 2))",
+ "POLYGON((1 1,1 10,10 10,10 6,8 6,8 1,1 1),(2 2,7 2,7 5,2 5,2 2),(3 7,4 7,4 8,3 8,3 7),(5 7,6 7,6 8,5 8,5 7),(8 7,9 7,9 8,8 8,8 7))"};
+
+static std::string intersect_holes_disjoint[2] =
+ {"POLYGON((0 0,0 7,5 7,5 0,0 0),(2 2,3 2,3 3,2 3,2 2))",
+ "POLYGON((1 1,1 6,6 6,6 1,1 1),(2 4,3 4,3 5,2 5,2 4))"};
+
+static std::string within_holes_disjoint[2] =
+ {"POLYGON((0 0,0 7,7 7,7 0,0 0),(2 2,3 2,3 3,2 3,2 2))",
+ "POLYGON((1 1,1 6,6 6,6 1,1 1),(2 4,3 4,3 5,2 5,2 4))"};
+
+static std::string intersect_holes_intersect[2] =
+ {"POLYGON((0 0,0 7,5 7,5 0,0 0),(2 2,3 2,3 3,2 3,2 2))",
+ "POLYGON((1 1,1 6,6 6,6 1,1 1),(2.5 2.5,3.5 2.5,3.5 3.5,2.5 3.5,2.5 2.5))"};
+
+static std::string intersect_holes_intersect_and_disjoint[2] =
+ {"POLYGON((0 0,0 7,5 7,5 0,0 0),(2 2,3 2,3 3,2 3,2 2),(2 4,3 4,3 5,2 5,2 4))",
+ "POLYGON((1 1,1 6,6 6,6 1,1 1),(2.5 2.5,3.5 2.5,3.5 3.5,2.5 3.5,2.5 2.5))"};
+
+
+static std::string intersect_holes_intersect_and_touch[2] =
+ {"POLYGON((0 0,0 7,5 7,5 0,0 0),(2 2,3 2,3 3,2 3,2 2),(2.5 4,3 4.5,2.5 5,2 4.5,2.5 4))",
+ "POLYGON((1 1,1 6,6 6,6 1,1 1),(2.5 2.5,3.5 2.5,3.5 3.5,2.5 3.5,2.5 2.5),(3.5 4,4 4.5,3.5 5,3 4.5,3.5 4))"};
+
+
+#endif
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_perimeter.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_perimeter.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,50 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_PERIMETER_HPP
+#define GGL_TEST_PERIMETER_HPP
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/perimeter.hpp>
+#include <ggl/strategies/strategies.hpp>
+
+
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+
+
+template <typename Geometry>
+void test_perimeter(Geometry const& geometry, long double expected_perimeter)
+{
+ long double perimeter = ggl::perimeter(geometry);
+
+#ifdef GGL_TEST_DEBUG
+ std::ostringstream out;
+ out << typeid(typename ggl::coordinate_type<Geometry>::type).name()
+ << std::endl
+ << typeid(typename ggl::perimeter_result<Geometry>::type).name()
+ << std::endl
+ << "perimeter : " << ggl::perimeter(geometry)
+ << std::endl;
+ std::cout << out.str();
+#endif
+
+ BOOST_CHECK_CLOSE(perimeter, expected_perimeter, 0.0001);
+}
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt, double expected_perimeter)
+{
+ Geometry geometry;
+ ggl::read_wkt(wkt, geometry);
+ test_perimeter(geometry, expected_perimeter);
+}
+
+
+#endif
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_simplify.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_simplify.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,95 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_SIMPLIFY_HPP
+#define GGL_TEST_SIMPLIFY_HPP
+
+// Test-functionality, shared between single and multi tests
+
+#include <ggl_test_common.hpp>
+#include <ggl/algorithms/simplify.hpp>
+#include <ggl/algorithms/distance.hpp>
+#include <ggl/strategies/strategies.hpp>
+
+#include <ggl/extensions/gis/io/wkt/wkt.hpp>
+
+template <typename Tag, typename Geometry>
+struct test_inserter
+{
+ static void apply(Geometry& , std::string const& , double )
+ {}
+};
+
+template <typename Geometry>
+struct test_inserter<ggl::linestring_tag, Geometry>
+{
+ static void apply(Geometry& geometry, std::string const& expected, double distance)
+ {
+ Geometry simplified;
+ ggl::simplify_inserter(geometry,
+ std::back_inserter(simplified), distance);
+
+ std::ostringstream out;
+ out << ggl::wkt(simplified);
+ BOOST_CHECK_EQUAL(out.str(), expected);
+ }
+};
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt, std::string const& expected, double distance)
+{
+ Geometry geometry, simplified;
+
+ // Generate polygon using only integer coordinates and obvious results
+ // Polygon is a hexagon, having one extra point (2,1) on a line which should be filtered out.
+ ggl::read_wkt(wkt, geometry);
+ ggl::simplify(geometry, simplified, distance);
+
+ {
+ std::ostringstream out;
+ out << ggl::wkt(simplified);
+
+ BOOST_CHECK_MESSAGE(out.str() == expected,
+ "simplify: " << ggl::wkt(geometry)
+ << " expected " << expected
+ << " got " << ggl::wkt(simplified));
+ }
+
+ // Check using user-specified strategy
+ typedef typename ggl::point_type<Geometry>::type point_type;
+ typedef typename ggl::cs_tag<point_type>::type tag;
+ typedef ggl::strategy::distance::xy_point_segment
+ <
+ point_type,
+ point_type
+ > strategy;
+ typedef ggl::strategy::simplify::douglas_peucker
+ <
+ point_type,
+ strategy
+ > simplify_strategy_type;
+
+ BOOST_CONCEPT_ASSERT( (ggl::concept::SimplifyStrategy<simplify_strategy_type>) );
+ ggl::simplify(geometry, simplified, distance, simplify_strategy_type());
+
+ {
+ std::ostringstream out;
+ out << ggl::wkt(simplified);
+ BOOST_CHECK_EQUAL(out.str(), expected);
+ }
+
+ // Check inserter (if applicable)
+ test_inserter
+ <
+ typename ggl::tag<Geometry>::type,
+ Geometry
+ >::apply(geometry, expected, distance);
+}
+
+
+#endif
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_union.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_union.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,115 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_UNION_HPP
+#define GGL_TEST_UNION_HPP
+
+#include <fstream>
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/union.hpp>
+
+#include <ggl/algorithms/area.hpp>
+#include <ggl/algorithms/length.hpp>
+#include <ggl/algorithms/num_points.hpp>
+#include <ggl/algorithms/simplify.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+
+#include <ggl/strategies/strategies.hpp>
+
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+
+
+#if defined(TEST_WITH_SVG)
+# include <test_util/svg_mapper.hpp>
+#endif
+
+
+
+template <typename OutputType, typename G1, typename G2>
+void test_union(int caseid, G1 const& g1, G2 const& g2,
+ int expected_count, int expected_hole_count,
+ int expected_point_count, double expected_area)
+{
+ std::vector<OutputType> clip;
+ ggl::union_inserter<OutputType>(g1, g2, std::back_inserter(clip));
+
+ double area = 0;
+ int n = 0;
+ int holes = 0;
+ for (typename std::vector<OutputType>::const_iterator it = clip.begin();
+ it != clip.end(); ++it)
+ {
+ area += ggl::area(*it);
+ holes += ggl::num_interior_rings(*it);
+
+ // Simplify to get a correct point-count without duplicate points
+ // (note that overlay might be adapted to avoid duplicates)
+ OutputType simplified;
+ ggl::simplify(*it, simplified, 0.0001);
+ n += ggl::num_points(simplified);
+ }
+
+
+ /***
+ std::cout << "case: " << caseid
+ << " n: " << n
+ << " area: " << area
+ << " polygons: " << boost::size(clip)
+ << " holes: " << holes
+ << std::endl;
+ ***/
+
+ BOOST_CHECK_EQUAL(clip.size(), expected_count);
+ BOOST_CHECK_EQUAL(n, expected_point_count);
+ BOOST_CHECK_EQUAL(holes, expected_hole_count);
+ BOOST_CHECK_CLOSE(area, expected_area, 0.001);
+
+#if defined(TEST_WITH_SVG)
+ {
+ std::ostringstream filename;
+ filename << "union" << caseid << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ svg_mapper<typename ggl::point_type<G2>::type> mapper(svg, 500, 500);
+ mapper.add(g1);
+ mapper.add(g2);
+
+ mapper.map(g1, "opacity:0.6;fill:rgb(0,0,255);stroke:rgb(0,0,0);stroke-width:1");
+ mapper.map(g2, "opacity:0.6;fill:rgb(0,255,0);stroke:rgb(0,0,0);stroke-width:1");
+
+ for (typename std::vector<OutputType>::const_iterator it = clip.begin();
+ it != clip.end(); ++it)
+ {
+ mapper.map(*it, "opacity:0.6;fill:none;stroke:rgb(255,0,0);stroke-width:5");
+ }
+ }
+#endif
+}
+
+template <typename OutputType, typename G1, typename G2>
+void test_one(int caseid, std::string const& wkt1, std::string const& wkt2,
+ int expected_count, int expected_hole_count,
+ int expected_point_count, double expected_area)
+{
+ G1 g1;
+ ggl::read_wkt(wkt1, g1);
+
+ G2 g2;
+ ggl::read_wkt(wkt2, g2);
+
+ test_union<OutputType>(caseid, g1, g2,
+ expected_count, expected_hole_count, expected_point_count,
+ expected_area);
+}
+
+
+
+#endif
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_within.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/test_within.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,103 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_WITHIN_HPP
+#define GGL_TEST_WITHIN_HPP
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/core/ring_type.hpp>
+#include <ggl/algorithms/within.hpp>
+#include <ggl/strategies/strategies.hpp>
+#include <ggl/geometries/linear_ring.hpp>
+#include <ggl/geometries/polygon.hpp>
+
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+
+
+template <typename Geometry1, typename Geometry2>
+void test_geometry(std::string const& wkt1,
+ std::string const& wkt2, bool expected)
+{
+ Geometry1 geometry1;
+ Geometry2 geometry2;
+
+ ggl::read_wkt(wkt1, geometry1);
+ ggl::read_wkt(wkt2, geometry2);
+
+ bool detected = ggl::within(geometry1, geometry2);
+
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "within: " << wkt1
+ << " in " << wkt2
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
+
+
+template <typename Point, bool CW>
+void test_ordered_ring(std::string const& wkt_point,
+ std::string const& wkt_geometry, bool expected, bool on_border)
+{
+ typedef ggl::linear_ring<Point, std::vector, CW> ring_type;
+ ring_type ring;
+ Point point;
+
+ ggl::read_wkt(wkt_geometry, ring);
+ if (! CW)
+ {
+ std::reverse(boost::begin(ring), boost::end(ring));
+ }
+ ggl::read_wkt(wkt_point, point);
+
+ bool detected = ggl::within(point, ring);
+
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "within: " << wkt_point
+ << " in " << wkt_geometry
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+
+ // other strategy (note that this one cannot detect OnBorder
+ // (without modifications)
+
+ ggl::strategy::within::franklin<Point> franklin;
+ detected = ggl::within(point, ring, franklin);
+ if (! on_border)
+ {
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "within: " << wkt_point
+ << " in " << wkt_geometry
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+ }
+
+
+ ggl::strategy::within::crossings_multiply<Point> cm;
+ detected = ggl::within(point, ring, cm);
+ if (! on_border)
+ {
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "within: " << wkt_point
+ << " in " << wkt_geometry
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+ }
+}
+
+template <typename Point>
+void test_ring(std::string const& wkt_point,
+ std::string const& wkt_geometry,
+ bool expected, bool on_border)
+{
+ test_ordered_ring<Point, true>(wkt_point, wkt_geometry, expected, on_border);
+ test_ordered_ring<Point, false>(wkt_point, wkt_geometry, expected, on_border);
+ test_geometry<Point, ggl::polygon<Point> >(wkt_point, wkt_geometry, expected);
+}
+
+#endif
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/transform.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/transform.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,129 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <iostream>
+#include <sstream>
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/make.hpp>
+#include <ggl/algorithms/transform.hpp>
+#include <ggl/strategies/strategies.hpp>
+#include <ggl/geometries/geometries.hpp>
+
+#include <ggl/util/write_dsv.hpp>
+#include <ggl/extensions/gis/io/wkt/wkt.hpp>
+
+#include <test_common/test_point.hpp>
+
+template <typename P1, typename P2>
+void test_transform_point(double value)
+{
+ P1 p1;
+ ggl::set<0>(p1, 1);
+ ggl::set<1>(p1, 2);
+ P2 p2;
+ ggl::transform(p1, p2);
+
+ BOOST_CHECK_CLOSE(value * ggl::get<0>(p1), double(ggl::get<0>(p2)), 0.001);
+ BOOST_CHECK_CLOSE(value * ggl::get<1>(p1), double(ggl::get<1>(p2)), 0.001);
+}
+
+template <typename P1, typename P2>
+void test_transform_linestring()
+{
+ ggl::linestring<P1> line1;
+ line1.push_back(ggl::make<P1>(1, 1));
+ line1.push_back(ggl::make<P1>(2, 2));
+ ggl::linestring<P2> line2;
+ ggl::transform(line1, line2);
+ BOOST_CHECK_EQUAL(line1.size(), line2.size());
+
+ std::ostringstream out1, out2;
+ out1 << ggl::wkt(line1);
+ out2 << ggl::wkt(line2);
+ BOOST_CHECK_EQUAL(out1.str(), out1.str());
+}
+
+
+template <typename P1, typename P2>
+void test_all(double value = 1.0)
+{
+ test_transform_point<P1, P2>(value);
+ test_transform_linestring<P1, P2>();
+}
+
+template <typename T, typename DegreeOrRadian>
+void test_transformations(double phi, double theta, double r)
+{
+ using namespace ggl;
+
+ typedef point<T, 3, cs::cartesian> cartesian_type;
+ cartesian_type p;
+
+ // 1: using spherical coordinates
+ {
+ typedef point<T, 3, cs::spherical<DegreeOrRadian> > spherical_type;
+ spherical_type sph1;
+ assign(sph1, phi, theta, r);
+ transform(sph1, p);
+
+ spherical_type sph2;
+ transform(p, sph2);
+
+ BOOST_CHECK_CLOSE(double(ggl::get<0>(sph1)), double(ggl::get<0>(sph2)), 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<1>(sph1)), double(ggl::get<1>(sph2)), 0.001);
+
+ //std::cout << dsv(p) << std::endl;
+ //std::cout << dsv(sph2) << std::endl;
+ }
+
+ // 2: using spherical coordinates on unit sphere
+ {
+ typedef point<T, 2, cs::spherical<DegreeOrRadian> > spherical_type;
+ spherical_type sph1, sph2;
+ assign(sph1, phi, theta);
+ transform(sph1, p);
+ transform(p, sph2);
+
+ BOOST_CHECK_CLOSE(double(ggl::get<0>(sph1)), double(ggl::get<0>(sph2)), 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<1>(sph1)), double(ggl::get<1>(sph2)), 0.001);
+
+ //std::cout << dsv(sph1) << " " << dsv(p) << " " << dsv(sph2) << std::endl;
+ }
+}
+
+int test_main(int, char* [])
+{
+ using namespace ggl;
+ using namespace ggl::cs;
+ using namespace ggl::math;
+
+
+ typedef ggl::point_xy<double > P;
+ test_all<P, P>();
+ test_all<ggl::point_xy<int>, ggl::point_xy<float> >();
+
+ test_all<ggl::point<double, 2, spherical<degree> >,
+ ggl::point<double, 2, spherical<radian> > >(d2r);
+ test_all<ggl::point<double, 2, spherical<radian> >,
+ ggl::point<double, 2, spherical<degree> > >(r2d);
+
+ test_all<ggl::point<int, 2, spherical<degree> >,
+ ggl::point<float, 2, spherical<radian> > >(d2r);
+
+ test_transformations<float, degree>(4, 52, 1);
+ test_transformations<double, degree>(4, 52, 1);
+
+ test_transformations<float, radian>(3 * d2r, 51 * d2r, 1);
+ test_transformations<double, radian>(3 * d2r, 51 * d2r, 1);
+
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/union.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/union.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,153 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <iostream>
+#include <string>
+
+#include <algorithms/test_union.hpp>
+#include <algorithms/test_overlay.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ typedef ggl::polygon<P> polygon;
+ typedef ggl::linear_ring<P> ring;
+ typedef ggl::box<P> box;
+
+ test_one<polygon, box, polygon>(1, example_box, example_ring,
+ 1, 1, 15, 6.38875);
+
+ test_one<polygon, box, polygon>(2, example_box, example_polygon,
+ 1, 3, 23, 6.30983);
+
+ test_one<polygon, polygon, polygon>(3, example_star, example_ring,
+ 1, 0, 23, 5.67017141);
+
+ test_one<polygon, polygon, polygon>(4, example_star, example_polygon,
+ 1, 1, 27, 5.647949);
+
+ test_one<polygon, box, polygon>(5, example_box,
+ "POLYGON((3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2))",
+ 1, 1, 15, 6.38875);
+ test_one<polygon, box, polygon>(6, example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,5.3 2.5,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))",
+ 1, 1, 13, 5.93625);
+
+ // Same as 3, but now as polygon
+ // (note, internally, the intersection points is different, so yes,
+ // it has to be tested)
+ test_one<polygon, polygon, polygon>(7, "POLYGON((1.5 1.5 , 1.5 2.5 , 4.5 2.5 , 4.5 1.5 , 1.5 1.5))",
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,5.3 2.5,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))",
+ 1, 1, 13, 5.93625);
+
+ test_one<polygon, box, polygon>(8, example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,4.5 2.5,4.5 1.2,4.9 0.8,2.9 0.7,2 1.3))",
+ 1, 1, 13, 4.651245);
+
+ test_one<polygon, box, polygon>(9, example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,4.5 2.5,4.5 2.3,5.0 2.3,5.0 2.1,4.5 2.1,4.5 1.9,4.0 1.9,4.5 1.2,4.9 0.8,2.9 0.7,2 1.3))",
+ 1, 1, 19, 4.7191);
+
+ test_one<polygon, box, polygon>(10, example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,4.5 1.2,2.9 0.7,2 1.3))",
+ 1, 1, 14, 4.2174);
+
+ test_one<polygon, box, polygon>(11, example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.0 3.0,5.0 2.0,2.9 0.7,2 1.3))",
+ 1, 1, 16, 4.270554);
+
+ test_one<polygon, box, polygon>(12, "box(0 0, 3 3)",
+ "POLYGON((2 2, 1 4, 2 4, 3 3, 2 2))",
+ 1, 0, 8, 10.25);
+
+
+ // First inside second
+ test_one<polygon, polygon, polygon>(13,
+ first_within_second[0], first_within_second[1],
+ 1, 0, 5, 25.0);
+
+ // Second inside first
+ test_one<polygon, polygon, polygon>(14,
+ first_within_second[1], first_within_second[0],
+ 1, 0, 5, 25.0);
+
+ // First inside hole of second
+ test_one<polygon, polygon, polygon>(15,
+ first_within_hole_of_second[0], first_within_hole_of_second[1],
+ 2, 1, 15, 17.0);
+
+ // forming new hole
+ test_one<polygon, polygon, polygon>(16,
+ new_hole[0], new_hole[1],
+ 1, 1, 14, 23.0);
+
+ // side by side
+ test_one<polygon, polygon, polygon>(17,
+ side_side[0], side_side[1], 1, 0, 6, 2.0);
+
+ // identical
+ test_one<polygon, polygon, polygon>(18,
+ identical[0], identical[1], 1, 0, 5, 1.0);
+
+ // inside each other, having intersections; holes separate intersections
+ test_one<polygon, polygon, polygon>(19,
+ intersect_holes_intersect[0], intersect_holes_intersect[1],
+ 1, 1, 14, 39.75);
+
+ test_one<polygon, polygon, polygon>(20,
+ intersect_holes_intersect_and_disjoint[0], intersect_holes_intersect_and_disjoint[1],
+ 1, 1, 14, 39.75);
+
+ test_one<polygon, polygon, polygon>(21,
+ intersect_holes_intersect_and_touch[0], intersect_holes_intersect_and_touch[1],
+ 1, 1, 14, 39.75);
+
+ // inside each other, having intersections but holes are disjoint
+ test_one<polygon, polygon, polygon>(22,
+ intersect_holes_disjoint[0],
+ intersect_holes_disjoint[1],
+ 1, 0, 9, 40.0);
+
+ // inside each other, having no intersections but holes are disjoint
+ test_one<polygon, polygon, polygon>(23,
+ within_holes_disjoint[0], within_holes_disjoint[1],
+ 1, 0, 5, 49.0);
+
+ test_one<polygon, polygon, polygon>(24,
+ winded[0], winded[1],
+ 1, 5, 30, 114.0);
+
+ test_one<polygon, polygon, polygon>(25,
+ two_bends[0], two_bends[1],
+ 1, 0, 7, 40.0);
+
+
+ // test some other input/output types
+
+ // 1 input ring
+ test_one<polygon, polygon, ring>(31, identical[0], identical[1], 1, 0, 5, 1.0);
+ test_one<polygon, ring, polygon>(32, identical[0], identical[1], 1, 0, 5, 1.0);
+
+ // 2 input rings
+ test_one<polygon, ring, ring>(33, identical[0], identical[1], 1, 0, 5, 1.0);
+
+ // output is also ring
+ test_one<ring, ring, ring>(34, identical[0], identical[1], 1, 0, 5, 1.0);
+
+ // "new hole", tested with ring -> the newly formed hole will be omitted
+ test_one<ring, ring, ring>(35, new_hole[0], new_hole[1], 1, 0, 9, 24.0);
+
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<ggl::point_xy<double> >();
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/algorithms/within.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/algorithms/within.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,81 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels, Geodan B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <algorithms/test_within.hpp>
+
+
+#include <ggl/geometries/box.hpp>
+#include <ggl/geometries/cartesian2d.hpp>
+#include <ggl/geometries/linear_ring.hpp>
+#include <ggl/geometries/linestring.hpp>
+#include <ggl/geometries/point.hpp>
+#include <ggl/geometries/point_xy.hpp>
+#include <ggl/geometries/polygon.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ // trivial case
+ test_ring<P>("POINT(1 1)", "POLYGON((0 0,0 2,2 2,2 0,0 0))", true, false);
+
+ // on border/corner
+ test_ring<P>("POINT(0 0)", "POLYGON((0 0,0 2,2 2,2 0,0 0))", false, true);
+ test_ring<P>("POINT(0 1)", "POLYGON((0 0,0 2,2 2,2 0,0 0))", false, true);
+
+ // aligned to segment/vertex
+ test_ring<P>("POINT(1 1)", "POLYGON((0 0,0 3,3 3,3 1,2 1,2 0,0 0))", true, false);
+ test_ring<P>("POINT(1 1)", "POLYGON((0 0,0 3,4 3,3 1,2 2,2 0,0 0))", true, false);
+
+ // same polygon, but point on border
+ test_ring<P>("POINT(3 3)", "POLYGON((0 0,0 3,3 3,3 1,2 1,2 0,0 0))", false, true);
+ test_ring<P>("POINT(3 3)", "POLYGON((0 0,0 3,4 3,3 1,2 2,2 0,0 0))", false, true);
+
+ // holes
+ test_geometry<P, ggl::polygon<P> >("POINT(2 2)",
+ "POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,3 1,3 3,1 3,1 1))", false);
+
+
+ test_geometry<P, ggl::box<P> >("POINT(1 1)", "BOX(0 0,2 2)", true);
+
+ // Mixed point types
+ test_geometry
+ <
+ ggl::point_xy<float>,
+ ggl::polygon<P>
+ >("POINT(1 1)", "POLYGON((0 0,0 2,2 2,2 0,0 0))", true);
+
+
+ // Real-life problem (solved now), point is in the middle, 409623 is also a coordinate
+ // on the border, it was wrong first.
+ test_ring<P>("POINT(146383 409623)",
+ "POLYGON((146351 410597,146521 410659,147906 410363,148088 410420"
+ ",148175 410296,148281 409750,148215 409623,148154 409666,148154 409666"
+ ",148130 409625,148035 409626,148035 409626,148008 409544,147963 409510"
+ ",147993 409457,147961 409352,147261 408687,147008 408586,145714 408840"
+ ",145001 409033,144486 409066,144616 409308,145023 410286,145254 410488"
+ ",145618 410612,145618 410612,146015 410565,146190 410545,146351 410597))",
+ true, false);
+}
+
+
+
+
+int test_main( int , char* [] )
+{
+ test_all<ggl::point_xy<int> >();
+ test_all<ggl::point_xy<double> >();
+
+#if defined(HAVE_CLN)
+ test_all<ggl::point_xy<boost::numeric_adaptor::cln_value_type> >();
+#endif
+#if defined(HAVE_GMP)
+ test_all<ggl::point_xy<boost::numeric_adaptor::gmp_value_type> >();
+#endif
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/arithmetic/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/arithmetic/Jamfile.v2 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,13 @@
+# test/arithmetic/Jamfile.v2
+#
+# Copyright (c) 2009 Mateusz Loskot <mateusz_at_[hidden]>
+#
+# Use, modification and distribution is subject to the Boost Software License,
+# Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+test-suite ggl-arithmetic
+ :
+ [ run arithmetic.cpp ]
+ [ run dot_product.cpp ]
+ ;
Added: sandbox/ggl/formal_review/libs/ggl/test/arithmetic/arithmetic.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/arithmetic/arithmetic.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,119 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+
+#include <ggl/arithmetic/arithmetic.hpp>
+
+#include <ggl/algorithms/assign.hpp>
+
+#include <ggl/geometries/point.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+#include <test_common/test_point.hpp>
+
+
+using namespace ggl;
+
+template <typename P>
+void test_addition()
+{
+ P p1;
+ ggl::assign(p1, 1, 2, 3);
+ ggl::add_value(p1, 10);
+ BOOST_CHECK(get<0>(p1) == 11);
+ BOOST_CHECK(get<1>(p1) == 12);
+ BOOST_CHECK(get<2>(p1) == 13);
+
+ P p2;
+ ggl::assign(p2, 4, 5, 6);
+ ggl::add_point(p1, p2);
+ BOOST_CHECK(get<0>(p1) == 15);
+ BOOST_CHECK(get<1>(p1) == 17);
+ BOOST_CHECK(get<2>(p1) == 19);
+}
+
+template <typename P>
+void test_subtraction()
+{
+ P p1;
+ ggl::assign(p1, 1, 2, 3);
+ ggl::subtract_value(p1, 10);
+ BOOST_CHECK(get<0>(p1) == -9);
+ BOOST_CHECK(get<1>(p1) == -8);
+ BOOST_CHECK(get<2>(p1) == -7);
+
+ P p2;
+ ggl::assign(p2, 4, 6, 8);
+ ggl::subtract_point(p1, p2);
+ BOOST_CHECK(get<0>(p1) == -13);
+ BOOST_CHECK(get<1>(p1) == -14);
+ BOOST_CHECK(get<2>(p1) == -15);
+}
+
+template <typename P>
+void test_multiplication()
+{
+ P p1;
+ ggl::assign(p1, 1, 2, 3);
+ ggl::multiply_value(p1, 5);
+ BOOST_CHECK(get<0>(p1) == 5);
+ BOOST_CHECK(get<1>(p1) == 10);
+ BOOST_CHECK(get<2>(p1) == 15);
+
+ P p2;
+ ggl::assign(p2, 4, 5, 6);
+ ggl::multiply_point(p1, p2);
+ BOOST_CHECK(get<0>(p1) == 20);
+ BOOST_CHECK(get<1>(p1) == 50);
+ BOOST_CHECK(get<2>(p1) == 90);
+}
+
+template <typename P>
+void test_division()
+{
+ P p1;
+ ggl::assign(p1, 50, 100, 150);
+ ggl::divide_value(p1, 5);
+ BOOST_CHECK(get<0>(p1) == 10);
+ BOOST_CHECK(get<1>(p1) == 20);
+ BOOST_CHECK(get<2>(p1) == 30);
+
+ P p2;
+ ggl::assign(p2, 2, 4, 6);
+ ggl::divide_point(p1, p2);
+ BOOST_CHECK(get<0>(p1) == 5);
+ BOOST_CHECK(get<1>(p1) == 5);
+ BOOST_CHECK(get<2>(p1) == 5);
+}
+
+
+template <typename P>
+void test_all()
+{
+ test_addition<P>();
+ test_subtraction<P>();
+ test_multiplication<P>();
+ test_division<P>();
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<int[3]>();
+ test_all<float[3]>();
+ test_all<double[3]>();
+ test_all<test::test_point>();
+ test_all<point<int, 3, ggl::cs::cartesian> >();
+ test_all<point<float, 3, ggl::cs::cartesian> >();
+ test_all<point<double, 3, ggl::cs::cartesian> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/arithmetic/dot_product.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/arithmetic/dot_product.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,46 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/arithmetic/dot_product.hpp>
+
+
+#include <ggl/algorithms/assign.hpp>
+
+#include <ggl/geometries/point.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+#include <test_common/test_point.hpp>
+
+
+using namespace ggl;
+
+template <typename P>
+void test_all()
+{
+ P p1;
+ ggl::assign(p1, 1, 2, 3);
+ P p2;
+ ggl::assign(p2, 4, 5, 6);
+ BOOST_CHECK(ggl::dot_product(p1, p2) == 1*4 + 2*5 + 3*6);
+}
+
+int test_main(int, char* [])
+{
+ test_all<int[3]>();
+ test_all<float[3]>();
+ test_all<double[3]>();
+ test_all<test::test_point>();
+ test_all<point<int, 3, ggl::cs::cartesian> >();
+ test_all<point<float, 3, ggl::cs::cartesian> >();
+ test_all<point<double, 3, ggl::cs::cartesian> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/core/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/core/Jamfile.v2 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,22 @@
+# test/core/Jamfile.v2
+#
+# Copyright (c) 2009 Mateusz Loskot <mateusz_at_[hidden]>
+#
+# Use, modification and distribution is subject to the Boost Software License,
+# Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+test-suite ggl-core
+ :
+ [ run access.cpp ]
+ [ run coordinate_dimension.cpp ]
+ [ run coordinate_system.cpp ]
+ [ run coordinate_type.cpp ]
+ [ run geometry_id.cpp ]
+ [ run point_type.cpp ]
+ [ run radian_access.cpp ]
+ [ run reverse_dispatch.cpp ]
+ [ run ring.cpp ]
+ [ run tag.cpp ]
+ [ run topological_dimension.cpp ]
+ ;
Added: sandbox/ggl/formal_review/libs/ggl/test/core/access.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/core/access.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,125 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+
+#include <ggl/core/access.hpp>
+
+
+#include <ggl/core/coordinate_type.hpp>
+#include <ggl/algorithms/make.hpp>
+
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+
+
+#include <ggl/core/cs.hpp>
+#include <ggl/geometries/point.hpp>
+#include <ggl/geometries/segment.hpp>
+#include <ggl/geometries/box.hpp>
+
+
+
+template <typename G>
+void test_get_set()
+{
+ typedef typename ggl::coordinate_type<G>::type coordinate_type;
+
+ G g;
+ ggl::set<0>(g, coordinate_type(1));
+ ggl::set<1>(g, coordinate_type(2));
+
+ coordinate_type x = ggl::get<0>(g);
+ coordinate_type y = ggl::get<1>(g);
+
+ BOOST_CHECK_CLOSE(double(x), 1.0, 0.0001);
+ BOOST_CHECK_CLOSE(double(y), 2.0, 0.0001);
+}
+
+template <typename G>
+void test_indexed_get_set(G& g)
+{
+ ggl::set<0, 0>(g, 1);
+ ggl::set<0, 1>(g, 2);
+ ggl::set<1, 0>(g, 3);
+ ggl::set<1, 1>(g, 4);
+
+ typedef typename ggl::coordinate_type<G>::type coordinate_type;
+ coordinate_type x1 = ggl::get<0, 0>(g);
+ coordinate_type y1 = ggl::get<0, 1>(g);
+ coordinate_type x2 = ggl::get<1, 0>(g);
+ coordinate_type y2 = ggl::get<1, 1>(g);
+
+ BOOST_CHECK_CLOSE(double(x1), 1.0, 0.0001);
+ BOOST_CHECK_CLOSE(double(y1), 2.0, 0.0001);
+ BOOST_CHECK_CLOSE(double(x2), 3.0, 0.0001);
+ BOOST_CHECK_CLOSE(double(y2), 4.0, 0.0001);
+}
+
+template <typename G, typename T>
+void test_indexed_get(G const& g, T a, T b, T c, T d)
+{
+ T x1 = ggl::get<0, 0>(g);
+ T y1 = ggl::get<0, 1>(g);
+ T x2 = ggl::get<1, 0>(g);
+ T y2 = ggl::get<1, 1>(g);
+
+ BOOST_CHECK_CLOSE(double(x1), double(a), 0.0001);
+ BOOST_CHECK_CLOSE(double(y1), double(b), 0.0001);
+ BOOST_CHECK_CLOSE(double(x2), double(c), 0.0001);
+ BOOST_CHECK_CLOSE(double(y2), double(d), 0.0001);
+}
+
+template <typename P>
+void test_all()
+{
+ typedef typename ggl::coordinate_type<P>::type coordinate_type;
+
+ // POINT, setting coordinate
+ test_get_set<P>();
+
+
+ // BOX, setting left/right/top/bottom
+ ggl::box<P> b;
+ test_indexed_get_set(b);
+
+ // SEGMENT (in GGL not having default constructor; however that is not a requirement)
+ P p1 = ggl::make_zero<P>();
+ P p2 = ggl::make_zero<P>();
+ ggl::segment<P> s(p1, p2);
+ test_indexed_get_set(s);
+
+ // CONST SEGMENT
+ ggl::set<0>(p1, 1); // we don't use assign because dim in {2,3}
+ ggl::set<1>(p1, 2);
+ ggl::set<0>(p2, 3);
+ ggl::set<1>(p2, 4);
+ ggl::segment<const P> cs(p1, p2);
+ test_indexed_get(cs,
+ coordinate_type(1), coordinate_type(2),
+ coordinate_type(3), coordinate_type(4));
+}
+
+
+int test_main(int, char* [])
+{
+ test_get_set<int[2]>();
+ test_get_set<float[2]>();
+ test_get_set<double[2]>();
+ test_get_set<double[3]>();
+
+ test_get_set<boost::tuple<double, double> >();
+
+ test_all<ggl::point<int, 2, ggl::cs::cartesian> >();
+ test_all<ggl::point<float, 2, ggl::cs::cartesian> >();
+ test_all<ggl::point<double, 2, ggl::cs::cartesian> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/core/coordinate_dimension.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/core/coordinate_dimension.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,69 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+
+#include <ggl/core/coordinate_dimension.hpp>
+
+
+#include <ggl/geometries/geometries.hpp>
+
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+
+#include <ggl/geometries/adapted/boost_array_as_linestring.hpp>
+#include <ggl/geometries/adapted/std_as_linestring.hpp>
+
+#include <vector>
+#include <deque>
+
+
+template <typename G, std::size_t Expected>
+void test_geometry()
+{
+ BOOST_CHECK_EQUAL(ggl::dimension<G>::type::value, Expected);
+}
+
+template <typename P, size_t D>
+void test_all()
+{
+ test_geometry<P, D>();
+ test_geometry<const P, D>();
+ test_geometry<ggl::linestring<P> , D>();
+ test_geometry<ggl::linear_ring<P> , D>();
+ test_geometry<ggl::polygon<P> , D>();
+ test_geometry<ggl::box<P> , D>();
+ test_geometry<ggl::segment<P> , D>();
+ test_geometry<ggl::segment<const P> , D>();
+
+ test_geometry<std::vector<P>, D>();
+ test_geometry<std::deque<P>, D>();
+
+ test_geometry<boost::array<P, 5>, D>();
+}
+
+int test_main(int, char* [])
+{
+ test_geometry<int[2], 2>();
+ test_geometry<float[2], 2>();
+ test_geometry<double[2], 2>();
+
+ test_geometry<int[3], 3>();
+ test_geometry<float[3], 3>();
+ test_geometry<double[3], 3>();
+
+ test_geometry<boost::tuple<double, double>, 2>();
+ test_geometry<boost::tuple<double, double, double>, 3>();
+
+ test_all<ggl::point<int, 2, ggl::cs::cartesian>, 2 >();
+ test_all<ggl::point<float, 2, ggl::cs::cartesian>, 2 >();
+ test_all<ggl::point<double, 2, ggl::cs::cartesian>, 2 >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/core/coordinate_system.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/core/coordinate_system.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,96 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+
+#include <ggl/core/coordinate_system.hpp>
+
+
+#include <ggl/geometries/geometries.hpp>
+
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+
+#include <ggl/geometries/adapted/boost_array_as_linestring.hpp>
+#include <ggl/geometries/adapted/std_as_linestring.hpp>
+
+#include <vector>
+#include <deque>
+
+
+template <typename G, typename Expected>
+void test_geometry()
+{
+ BOOST_CHECK_EQUAL(typeid(typename ggl::coordinate_system<G>::type).name(),
+ typeid(Expected).name());
+}
+
+template <typename P, typename Expected>
+void test_all()
+{
+ test_geometry<P, Expected>();
+ test_geometry<const P, Expected>();
+ test_geometry<ggl::linestring<P> , Expected>();
+ test_geometry<ggl::linear_ring<P> , Expected>();
+ test_geometry<ggl::polygon<P> , Expected>();
+ test_geometry<ggl::box<P> , Expected>();
+ test_geometry<ggl::segment<P> , Expected>();
+ test_geometry<ggl::segment<const P> , Expected>();
+
+ test_geometry<std::vector<P>, Expected>();
+ test_geometry<std::deque<P>, Expected>();
+
+ test_geometry<boost::array<P, 5>, Expected>();
+}
+
+int test_main(int, char* [])
+{
+ // Because of the included headerfiles, there are always cartesian
+ test_geometry<int[2], ggl::cs::cartesian>();
+ test_geometry<float[2], ggl::cs::cartesian>();
+ test_geometry<double[2], ggl::cs::cartesian>();
+
+ test_geometry<int[3], ggl::cs::cartesian>();
+ test_geometry<float[3], ggl::cs::cartesian>();
+ test_geometry<double[3], ggl::cs::cartesian>();
+
+ // Because of the included headerfiles, there are always cartesian
+ test_geometry<boost::tuple<double, double>, ggl::cs::cartesian>();
+ test_geometry<boost::tuple<double, double, double>, ggl::cs::cartesian>();
+
+
+ // Test cartesian
+ test_all<ggl::point<int, 2, ggl::cs::cartesian>, ggl::cs::cartesian>();
+ test_all<ggl::point<float, 2, ggl::cs::cartesian>, ggl::cs::cartesian>();
+ test_all<ggl::point<double, 2, ggl::cs::cartesian>, ggl::cs::cartesian>();
+
+ // Test spherical
+ test_all<ggl::point<int, 2, ggl::cs::spherical<ggl::degree> >,
+ ggl::cs::spherical<ggl::degree> >();
+ test_all<ggl::point<float, 2, ggl::cs::spherical<ggl::degree> >,
+ ggl::cs::spherical<ggl::degree> >();
+ test_all<ggl::point<double, 2, ggl::cs::spherical<ggl::degree> >,
+ ggl::cs::spherical<ggl::degree> >();
+
+ test_all<ggl::point<int, 2, ggl::cs::spherical<ggl::radian> >,
+ ggl::cs::spherical<ggl::radian> >();
+ test_all<ggl::point<float, 2, ggl::cs::spherical<ggl::radian> >,
+ ggl::cs::spherical<ggl::radian> >();
+ test_all<ggl::point<double, 2, ggl::cs::spherical<ggl::radian> >,
+ ggl::cs::spherical<ggl::radian> >();
+
+ // Test other
+ test_all<ggl::point<double, 2, ggl::cs::polar<ggl::degree> >,
+ ggl::cs::polar<ggl::degree> >();
+
+ test_all<ggl::point<double, 2, ggl::cs::geographic<ggl::degree> >,
+ ggl::cs::geographic<ggl::degree> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/core/coordinate_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/core/coordinate_type.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,73 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+
+#include <ggl/core/coordinate_type.hpp>
+
+
+#include <ggl/geometries/geometries.hpp>
+
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+
+#include <ggl/geometries/adapted/boost_array_as_linestring.hpp>
+#include <ggl/geometries/adapted/std_as_linestring.hpp>
+
+#include <vector>
+#include <deque>
+
+
+template <typename G, typename Expected>
+void test_geometry()
+{
+ BOOST_CHECK_EQUAL(typeid(typename ggl::coordinate_type<G>::type).name(),
+ typeid(Expected).name());
+}
+
+template <typename P, typename Expected>
+void test_all()
+{
+ test_geometry<P, Expected>();
+ test_geometry<const P, Expected>();
+ test_geometry<ggl::linestring<P> , Expected>();
+ test_geometry<ggl::linear_ring<P> , Expected>();
+ test_geometry<ggl::polygon<P> , Expected>();
+ test_geometry<ggl::box<P> , Expected>();
+ test_geometry<ggl::segment<P> , Expected>();
+ test_geometry<ggl::segment<const P> , Expected>();
+
+ test_geometry<std::vector<P>, Expected>();
+ test_geometry<std::deque<P>, Expected>();
+
+ test_geometry<boost::array<P, 5>, Expected>();
+}
+
+int test_main(int, char* [])
+{
+ test_geometry<int[2], int>();
+ test_geometry<float[2], float>();
+ test_geometry<double[2], double>();
+
+ test_geometry<int[3], int>();
+ test_geometry<float[3], float>();
+ test_geometry<double[3], double>();
+
+ test_geometry<boost::tuple<float, float>, float>();
+ test_geometry<boost::tuple<double, double>, double>();
+ test_geometry<boost::tuple<long double, long double>, long double>();
+ test_geometry<boost::tuple<double, double, double>, double>();
+
+ test_all<ggl::point<int, 2, ggl::cs::cartesian>, int>();
+ test_all<ggl::point<float, 2, ggl::cs::cartesian>, float>();
+ test_all<ggl::point<double, 2, ggl::cs::cartesian>, double>();
+ test_all<ggl::point<long double, 2, ggl::cs::cartesian>, long double>();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/core/geometry_id.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/core/geometry_id.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,68 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+
+#include <ggl/core/geometry_id.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+
+#include <ggl/geometries/adapted/boost_array_as_linestring.hpp>
+#include <ggl/geometries/adapted/std_as_linestring.hpp>
+
+#include <vector>
+#include <deque>
+
+
+template <typename G, std::size_t Expected>
+void test_geometry()
+{
+ BOOST_CHECK_EQUAL(ggl::geometry_id<G>::type::value, Expected);
+}
+
+template <typename P>
+void test_all()
+{
+ test_geometry<P, 1>();
+ test_geometry<const P, 1>();
+ test_geometry<ggl::linestring<P> , 2>();
+ test_geometry<ggl::linear_ring<P> , 93>();
+ test_geometry<ggl::polygon<P> , 3>();
+ test_geometry<ggl::box<P> , 94>();
+ test_geometry<ggl::segment<P> , 92>();
+ test_geometry<ggl::segment<const P> , 92>();
+
+ test_geometry<std::vector<P>, 2>();
+ test_geometry<std::deque<P>, 2>();
+
+ test_geometry<boost::array<P, 5>, 2>();
+}
+
+int test_main(int, char* [])
+{
+ test_geometry<int[2], 1>();
+ test_geometry<float[2], 1>();
+ test_geometry<double[2], 1>();
+
+ test_geometry<int[3], 1>();
+ test_geometry<float[3], 1>();
+ test_geometry<double[3], 1>();
+
+ test_geometry<boost::tuple<double, double>, 1>();
+ test_geometry<boost::tuple<double, double, double>, 1>();
+
+ test_all<ggl::point<int, 2, ggl::cs::cartesian> >();
+ test_all<ggl::point<float, 2, ggl::cs::cartesian> >();
+ test_all<ggl::point<double, 2, ggl::cs::cartesian> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/core/point_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/core/point_type.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,71 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+
+#include <ggl/core/tag.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+
+#include <ggl/geometries/adapted/boost_array_as_linestring.hpp>
+#include <ggl/geometries/adapted/std_as_linestring.hpp>
+
+#include <vector>
+#include <deque>
+
+
+template <typename G, typename Expected>
+void test_geometry()
+{
+ BOOST_CHECK_EQUAL(typeid(typename ggl::point_type<G>::type).name(),
+ typeid(Expected).name());
+}
+
+template <typename P>
+void test_all()
+{
+ test_geometry<P, P>();
+ test_geometry<const P, P>();
+ test_geometry<ggl::linestring<P> , P>();
+ test_geometry<ggl::linear_ring<P> , P>();
+ test_geometry<ggl::polygon<P> , P>();
+ test_geometry<ggl::box<P> , P>();
+ test_geometry<ggl::segment<P> , P>();
+ test_geometry<ggl::segment<const P> , P>();
+
+ test_geometry<std::vector<P>, P>();
+ test_geometry<std::deque<P>, P>();
+
+ test_geometry<boost::array<P, 5>, P>();
+}
+
+int test_main(int, char* [])
+{
+ test_geometry<int[2], int[2]>();
+ test_geometry<float[2], float[2]>();
+ test_geometry<double[2], double[2]>();
+
+ test_geometry<int[3], int[3]>();
+ test_geometry<float[3], float[3]>();
+ test_geometry<double[3], double[3]>();
+
+ test_geometry<boost::tuple<double, double>,
+ boost::tuple<double, double> >();
+ test_geometry<boost::tuple<double, double, double>,
+ boost::tuple<double, double, double> >();
+
+ test_all<ggl::point<int, 2, ggl::cs::cartesian> >();
+ test_all<ggl::point<float, 2, ggl::cs::cartesian> >();
+ test_all<ggl::point<double, 2, ggl::cs::cartesian> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/core/radian_access.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/core/radian_access.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,80 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/core/radian_access.hpp>
+
+#include <ggl/core/cs.hpp>
+#include <ggl/core/coordinate_type.hpp>
+#include <ggl/geometries/point.hpp>
+
+
+template <typename P, typename T>
+void test_get(T const& c1, T const& c2,
+ T const& e1, T const& e2)
+{
+ typedef typename ggl::coordinate_type<P>::type coordinate_type;
+
+ P p;
+ ggl::set<0>(p, coordinate_type(c1));
+ ggl::set<1>(p, coordinate_type(c2));
+
+ coordinate_type g1 = ggl::get_as_radian<0>(p);
+ coordinate_type g2 = ggl::get_as_radian<1>(p);
+
+ BOOST_CHECK_CLOSE(double(g1), double(e1), 0.0001);
+ BOOST_CHECK_CLOSE(double(g2), double(e2), 0.0001);
+}
+
+
+template <typename P, typename T>
+void test_set(T const& c1, T const& c2,
+ T const& e1, T const& e2)
+{
+ typedef typename ggl::coordinate_type<P>::type coordinate_type;
+
+ P p;
+ ggl::set_from_radian<0>(p, coordinate_type(c1));
+ ggl::set_from_radian<1>(p, coordinate_type(c2));
+
+ coordinate_type g1 = ggl::get<0>(p);
+ coordinate_type g2 = ggl::get<1>(p);
+
+ BOOST_CHECK_CLOSE(double(g1), double(e1), 0.0001);
+ BOOST_CHECK_CLOSE(double(g2), double(e2), 0.0001);
+}
+
+
+template <typename T>
+void test()
+{
+ double d2r = 3.1415926535897932384626433832795 / 180.0;
+
+ test_get<ggl::point<T, 2, ggl::cs::spherical<ggl::degree> > >
+ (1.0, 2.0, 1.0 * d2r, 2.0 * d2r);
+
+ test_get<ggl::point<T, 2, ggl::cs::spherical<ggl::radian> > >
+ (1.0, 2.0, 1.0, 2.0);
+
+ test_set<ggl::point<T, 2, ggl::cs::spherical<ggl::radian> > >
+ (1.0, 2.0, 1.0, 2.0);
+ test_set<ggl::point<T, 2, ggl::cs::spherical<ggl::degree> > >
+ (1.0 * d2r, 2.0 * d2r, 1.0, 2.0);
+
+}
+
+
+int test_main(int, char* [])
+{
+ //test<float>();
+ test<double>();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/core/reverse_dispatch.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/core/reverse_dispatch.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,59 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/core/reverse_dispatch.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+
+
+
+template <typename Geometry1, typename Geometry2, bool Expected>
+void test_reversed()
+{
+ BOOST_CHECK_EQUAL((ggl::reverse_dispatch<Geometry1, Geometry2>::type::value),
+ Expected);
+}
+
+
+template <typename P>
+void test_all()
+{
+
+ test_reversed<P, P, false>();
+ test_reversed<P, ggl::linestring<P>, false>();
+ test_reversed<ggl::linestring<P>, P, true>();
+ test_reversed<ggl::linear_ring<P>, P, true>();
+ test_reversed<ggl::linestring<P>, ggl::linear_ring<P>, false>();
+ test_reversed<ggl::linear_ring<P>, ggl::linestring<P>, true>();
+}
+
+template <typename P1, typename P2>
+void test_mixed()
+{
+ test_reversed<P1, P2, false>();
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<ggl::point<int, 2, ggl::cs::cartesian> >();
+ test_mixed
+ <
+ ggl::point<int, 2, ggl::cs::cartesian>,
+ ggl::point<int, 2, ggl::cs::spherical<ggl::degree> >
+ >();
+ test_mixed
+ <
+ ggl::point<int, 2, ggl::cs::spherical<ggl::degree> >,
+ ggl::point<int, 2, ggl::cs::spherical<ggl::radian> >
+ >();
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/core/ring.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/core/ring.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,68 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+
+// To be tested:
+#include <ggl/core/ring_type.hpp>
+#include <ggl/core/exterior_ring.hpp>
+#include <ggl/core/interior_rings.hpp>
+
+// For geometries:
+#include <ggl/core/cs.hpp>
+#include <ggl/geometries/point.hpp>
+#include <ggl/geometries/polygon.hpp>
+
+
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+
+
+
+
+template <typename P>
+void test_ring(std::string const& wkt,
+ int expected_main_count,
+ int expected_interior_ring_count,
+ int expected_first_interior_count)
+{
+ typedef ggl::polygon<P> the_polygon;
+ typedef typename ggl::ring_type<the_polygon>::type the_ring;
+ typedef typename ggl::interior_type<the_polygon>::type the_interior;
+
+ the_polygon poly;
+ read_wkt(wkt, poly);
+
+ the_ring ext = ggl::exterior_ring(poly);
+ the_interior rings = ggl::interior_rings(poly);
+
+ BOOST_CHECK_EQUAL(ggl::num_interior_rings(poly), expected_interior_ring_count);
+ BOOST_CHECK_EQUAL(boost::size(rings), expected_interior_ring_count);
+ BOOST_CHECK_EQUAL(boost::size(ext), expected_main_count);
+ if (boost::size(rings) > 0)
+ {
+ BOOST_CHECK_EQUAL(boost::size(rings.front()), expected_first_interior_count);
+ }
+}
+
+
+template <typename P>
+void test_all()
+{
+ test_ring<P>("POLYGON((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))", 5, 1, 5);
+ test_ring<P>("POLYGON((0 0,0 3,3 3,3 0,0 0),(1 1,2 2,2 1,1 1),(1 1,1 2,2 2,1 1))", 5, 2, 4);
+ test_ring<P>("POLYGON((0 0,0 3,3 3,3 0,0 0))", 5, 0, 0);
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<ggl::point<double, 2, ggl::cs::cartesian> >();
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/core/tag.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/core/tag.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,68 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/core/tag.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+
+#include <ggl/geometries/adapted/boost_array_as_linestring.hpp>
+#include <ggl/geometries/adapted/std_as_linestring.hpp>
+
+#include <vector>
+#include <deque>
+
+
+template <typename G, typename Expected>
+void test_geometry()
+{
+ BOOST_CHECK_EQUAL(typeid(typename ggl::tag<G>::type).name(),
+ typeid(Expected).name());
+}
+
+template <typename P, size_t D>
+void test_all()
+{
+ test_geometry<P, ggl::point_tag>();
+ test_geometry<const P, ggl::point_tag>();
+ test_geometry<ggl::linestring<P> , ggl::linestring_tag>();
+ test_geometry<ggl::linear_ring<P> , ggl::ring_tag>();
+ test_geometry<ggl::polygon<P> , ggl::polygon_tag>();
+ test_geometry<ggl::box<P> , ggl::box_tag>();
+ test_geometry<ggl::segment<P> , ggl::segment_tag>();
+ test_geometry<ggl::segment<const P> , ggl::segment_tag>();
+
+ test_geometry<std::vector<P>, ggl::linestring_tag>();
+ test_geometry<std::deque<P>, ggl::linestring_tag>();
+
+ test_geometry<boost::array<P, 5>, ggl::linestring_tag>();
+}
+
+int test_main(int, char* [])
+{
+ test_geometry<int[2], ggl::point_tag>();
+ test_geometry<float[2], ggl::point_tag>();
+ test_geometry<double[2], ggl::point_tag>();
+
+ test_geometry<int[3], ggl::point_tag>();
+ test_geometry<float[3], ggl::point_tag>();
+ test_geometry<double[3], ggl::point_tag>();
+
+ test_geometry<boost::tuple<double, double>, ggl::point_tag>();
+ test_geometry<boost::tuple<double, double, double>, ggl::point_tag>();
+
+ test_all<ggl::point<int, 2, ggl::cs::cartesian>, 2 >();
+ test_all<ggl::point<float, 2, ggl::cs::cartesian>, 2 >();
+ test_all<ggl::point<double, 2, ggl::cs::cartesian>, 2 >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/core/topological_dimension.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/core/topological_dimension.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,67 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/core/topological_dimension.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+
+#include <ggl/geometries/adapted/boost_array_as_linestring.hpp>
+#include <ggl/geometries/adapted/std_as_linestring.hpp>
+
+#include <vector>
+#include <deque>
+
+
+template <typename G, std::size_t Expected>
+void test_geometry()
+{
+ BOOST_CHECK_EQUAL(ggl::topological_dimension<G>::type::value, Expected);
+}
+
+template <typename P>
+void test_all()
+{
+ test_geometry<P, 0>();
+ test_geometry<const P, 0>();
+ test_geometry<ggl::linestring<P> , 1>();
+ test_geometry<ggl::linear_ring<P> , 2>(); // being discussed
+ test_geometry<ggl::polygon<P> , 2>();
+ test_geometry<ggl::box<P> , 2>();
+ test_geometry<ggl::segment<P> , 1>();
+ test_geometry<ggl::segment<const P> , 1>();
+
+ test_geometry<std::vector<P>, 1>();
+ test_geometry<std::deque<P>, 1>();
+
+ test_geometry<boost::array<P, 5>, 1>();
+}
+
+int test_main(int, char* [])
+{
+ test_geometry<int[2], 0>();
+ test_geometry<float[2], 0>();
+ test_geometry<double[2], 0>();
+
+ test_geometry<int[3], 0>();
+ test_geometry<float[3], 0>();
+ test_geometry<double[3], 0>();
+
+ test_geometry<boost::tuple<double, double>, 0>();
+ test_geometry<boost::tuple<double, double, double>, 0>();
+
+ test_all<ggl::point<int, 2, ggl::cs::cartesian> >();
+ test_all<ggl::point<float, 2, ggl::cs::cartesian> >();
+ test_all<ggl::point<double, 2, ggl::cs::cartesian> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/ggl_test_common.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/ggl_test_common.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,39 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#ifndef GGL_TEST_GGL_TEST_COMMON_HPP
+#define GGL_TEST_GGL_TEST_COMMON_HPP
+
+#if defined(_MSC_VER)
+// We deliberately mix float/double's so turn off warnings
+#pragma warning( disable : 4244 )
+//#pragma warning( disable : 4305 )
+#endif // defined(_MSC_VER)
+
+
+// Just include some always-included files
+
+#include <boost/test/floating_point_comparison.hpp>
+#include <boost/test/included/test_exec_monitor.hpp>
+
+
+#if defined(HAVE_CLN) || defined(HAVE_GMP)
+# include <boost/numeric_adaptor/numeric_adaptor.hpp>
+#endif
+
+
+#if defined(HAVE_GMP)
+# include <boost/numeric_adaptor/gmp_value_type.hpp>
+#endif
+#if defined(HAVE_CLN)
+# include <boost/numeric_adaptor/cln_value_type.hpp>
+#endif
+
+
+#endif // GGL_TEST_GGL_TEST_COMMON_HPP
Added: sandbox/ggl/formal_review/libs/ggl/test/iterators/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/iterators/Jamfile.v2 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,14 @@
+# ggl/test/iterators/Jamfile.v2
+#
+# Copyright (c) 2009 Mateusz Loskot <mateusz_at_[hidden]>
+#
+# Use, modification and distribution is subject to the Boost Software License,
+# Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+test-suite ggl-iterators
+ :
+ [ run circular_iterator.cpp ]
+ [ run ever_circling_iterator.cpp ]
+ [ run segment_iterator.cpp ]
+ ;
Added: sandbox/ggl/formal_review/libs/ggl/test/iterators/circular_iterator.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/iterators/circular_iterator.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,101 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <algorithm>
+#include <iterator>
+#include <sstream>
+#include <string>
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/iterators/circular_iterator.hpp>
+
+#include <ggl/core/coordinate_type.hpp>
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+#include <ggl/geometries/cartesian2d.hpp>
+
+template <typename G>
+void test_geometry(const std::string& wkt)
+{
+ G geo;
+ ggl::read_wkt(wkt, geo);
+ typedef typename boost::range_const_iterator<G>::type normal_iterator;
+ typedef ggl::circular_iterator<normal_iterator> circular_iterator;
+
+ circular_iterator end(boost::end(geo));
+
+ {
+ // 1: normal start position
+ normal_iterator start = boost::begin(geo);
+
+ std::ostringstream out;
+ for (circular_iterator it(boost::begin(geo), boost::end(geo), start);
+ it != end; ++it)
+ {
+ out << ggl::get<0>(*it);
+ }
+ BOOST_CHECK_EQUAL(out.str(), "12345");
+ }
+
+ {
+ // 2: start somewhere in the middle
+ normal_iterator start = boost::begin(geo) + 2;
+
+ std::ostringstream out;
+ for (circular_iterator it(boost::begin(geo), boost::end(geo), start);
+ it != end; ++it)
+ {
+ out << ggl::get<0>(*it);
+ }
+ BOOST_CHECK_EQUAL(out.str(), "34512");
+ }
+
+ {
+ // 3: start at end position
+ normal_iterator start = boost::begin(geo) + boost::size(geo) - 1;
+
+ std::ostringstream out;
+ for (circular_iterator it(boost::begin(geo), boost::end(geo), start);
+ it != end; ++it)
+ {
+ out << ggl::get<0>(*it);
+ }
+ BOOST_CHECK_EQUAL(out.str(), "51234");
+ }
+
+ {
+ // 4: check copy behaviour
+ G copy;
+
+ {
+ normal_iterator start = boost::begin(geo) + 2;
+ circular_iterator it(boost::begin(geo), boost::end(geo), start);
+ std::copy<circular_iterator>(it, end, std::back_inserter(copy));
+ }
+
+ std::ostringstream out;
+ for (normal_iterator cit = boost::begin(copy); cit != boost::end(copy); ++cit)
+ {
+ out << ggl::get<0>(*cit);
+ }
+ BOOST_CHECK_EQUAL(out.str(), "34512");
+ }
+}
+
+template <typename P>
+void test_all()
+{
+ test_geometry<ggl::linestring<P> >("linestring(1 1,2 2,3 3,4 4,5 5)");
+}
+
+int test_main(int, char* [])
+{
+ test_all<ggl::point_2d>();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/iterators/ever_circling_iterator.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/iterators/ever_circling_iterator.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,80 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <sstream>
+#include <string>
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/iterators/ever_circling_iterator.hpp>
+
+#include <ggl/core/coordinate_type.hpp>
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+#include <ggl/geometries/cartesian2d.hpp>
+
+template <typename G>
+void test_geometry(const std::string& wkt)
+{
+ G geo;
+ ggl::read_wkt(wkt, geo);
+ typedef typename boost::range_const_iterator<G>::type iterator_type;
+
+
+ // Run 3 times through the geometry
+ int n = boost::size(geo) * 3;
+
+ {
+ std::ostringstream out;
+ ggl::ever_circling_iterator<iterator_type> it(boost::begin(geo), boost::end(geo));
+ for (int i = 0; i < n; ++i, ++it)
+ {
+ out << ggl::get<0>(*it);
+ }
+ BOOST_CHECK_EQUAL(out.str(), "123451234512345");
+ }
+
+ {
+ std::ostringstream out;
+ // Start somewhere
+ ggl::ever_circling_iterator<iterator_type> it(
+ boost::begin(geo), boost::end(geo), boost::begin(geo) + 1);
+ for (int i = 0; i < n; ++i, ++it)
+ {
+ out << ggl::get<0>(*it);
+ }
+ BOOST_CHECK_EQUAL(out.str(), "234512345123451");
+ }
+
+ {
+ std::ostringstream out;
+
+ // Navigate to somewhere
+ ggl::ever_circling_iterator<iterator_type> it(boost::begin(geo), boost::end(geo));
+ for (int i = 0; i < n; ++i, ++it)
+ {
+ const int m = boost::size(geo);
+ it.moveto(boost::begin(geo) + m - (i % m) - 1);
+ out << ggl::get<0>(*it);
+ }
+ BOOST_CHECK_EQUAL(out.str(), "543215432154321");
+ }
+
+}
+
+template <typename P>
+void test_all()
+{
+ test_geometry<ggl::linestring<P> >("linestring(1 1,2 2,3 3,4 4,5 5)");
+}
+
+int test_main(int, char* [])
+{
+ test_all<ggl::point_2d>();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/iterators/segment_iterator.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/iterators/segment_iterator.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,77 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Copyright Mateusz Loskot 2009, mateusz_at_[hidden]
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <algorithm>
+#include <list>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/core/coordinate_type.hpp>
+#include <ggl/geometries/cartesian2d.hpp>
+#include <ggl/geometries/point.hpp>
+#include <ggl/geometries/segment.hpp>
+#include <ggl/iterators/segment_iterator.hpp>
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+
+template <typename C>
+void test_linestring(const std::string& wkt, const std::string& expected)
+{
+ typedef C point_list;
+ typedef typename C::value_type point;
+ typedef typename C::iterator base_iterator;
+ typedef ggl::segment_iterator<base_iterator, point> segment_iterator;
+ typedef typename segment_iterator::value_type segment;
+ typedef ggl::linestring<point> linestring;
+
+ linestring g;
+ ggl::read_wkt(wkt, g);
+
+ point_list v;
+ std::copy(g.begin(), g.end(), std::back_insert_iterator<point_list>(v));
+ BOOST_CHECK_EQUAL(g.size(), v.size());
+
+ segment_iterator it(v.begin(), v.end());
+ segment_iterator end(v.end());
+
+ std::ostringstream oss;
+ while (it != end)
+ {
+ segment const& s = *it;
+ oss << ggl::get<0>(s.first) << ggl::get<1>(s.first)
+ << ggl::get<0>(s.second) << ggl::get<1>(s.second);
+ ++it;
+ }
+ BOOST_CHECK_EQUAL(oss.str(), expected);
+}
+
+int test_main(int, char* [])
+{
+ // Test std::vector
+ typedef std::vector<ggl::point_2d> points_v;
+ test_linestring<points_v>("linestring empty", "");
+ test_linestring<points_v>("linestring ()", "");
+ test_linestring<points_v>("linestring (1 1)", "");
+ test_linestring<points_v>("linestring (1 1, 2 2, 3 3)", "11222233");
+ test_linestring<points_v>("linestring (1 1, 2 2, 3 3, 4 4)", "112222333344");
+ test_linestring<points_v>("linestring (1 1, 2 2, 3 3, 4 4, 5 5, 6 6)", "11222233334444555566");
+
+ // Test std::list
+ typedef std::list<ggl::point_2d> points_l;
+ test_linestring<points_l>("linestring empty", "");
+ test_linestring<points_l>("linestring ()", "");
+ test_linestring<points_l>("linestring (1 1)", "");
+ test_linestring<points_l>("linestring (1 1, 2 2, 3 3)", "11222233");
+ test_linestring<points_l>("linestring (1 1, 2 2, 3 3, 4 4)", "112222333344");
+ test_linestring<points_l>("linestring (1 1, 2 2, 3 3, 4 4, 5 5, 6 6)", "11222233334444555566");
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/multi/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/multi/Jamfile.v2 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,9 @@
+# test/arithmetic/Jamfile.v2
+#
+# Copyright (c) 2009 Barend Gehrels
+#
+# Use, modification and distribution is subject to the Boost Software License,
+# Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+build-project algorithms ;
\ No newline at end of file
Added: sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/Jamfile.v2 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,20 @@
+# test/arithmetic/Jamfile.v2
+#
+# Copyright (c) 2009 Mateusz Loskot <mateusz_at_[hidden]>
+#
+# Use, modification and distribution is subject to the Boost Software License,
+# Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+test-suite ggl-multi-algorithms
+ :
+ [ run multi_area.cpp ]
+ [ run multi_centroid.cpp ]
+ [ run multi_convex_hull.cpp ]
+ [ run multi_correct.cpp ]
+ [ run multi_envelope.cpp ]
+ [ run multi_for_each.cpp ]
+ [ run multi_length.cpp ]
+ [ run multi_perimeter.cpp ]
+ [ run multi_simplify.cpp ]
+ ;
Added: sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_area.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_area.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,32 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels, Geodan B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <algorithms/test_area.hpp>
+
+#include <ggl/multi/multi.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+
+#include <ggl/extensions/gis/io/wkt/wkt.hpp>
+
+
+
+
+template <typename P>
+void test_all()
+{
+ typedef ggl::multi_polygon<ggl::polygon<P> > mp;
+ test_geometry<mp>("MULTIPOLYGON(((0 0,0 7,4 2,2 0,0 0)))", 16.0);
+}
+
+int test_main( int , char* [] )
+{
+ test_all<ggl::point_xy<double> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_centroid.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_centroid.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,106 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <algorithms/test_centroid.hpp>
+
+#include <ggl/multi/algorithms/centroid.hpp>
+#include <ggl/multi/strategies/centroid.hpp>
+#include <ggl/multi/strategies/cartesian/centroid_average.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+
+#include <ggl/multi/geometries/multi_point.hpp>
+#include <ggl/multi/geometries/multi_polygon.hpp>
+#include <ggl/extensions/gis/io/wkt/read_wkt_multi.hpp>
+
+
+// #define REPORT_RESULTS
+
+
+template <typename P>
+void test_2d(bool is_integer = false)
+{
+ typedef typename ggl::coordinate_type<P>::type ct;
+#ifdef REPORT_RESULTS
+ std::cout << std::endl << "type: " << typeid(ct).name() << " size: " << sizeof(ct) << std::endl;
+#endif
+
+ if (! is_integer)
+ {
+ test_centroid<ggl::multi_point<P> >(
+ "MULTIPOINT((1 1),(2 3),(5 0))",
+ 2.666666666666667, 1.33333);
+
+
+
+ // Only working for floating point:
+ test_centroid<ggl::multi_polygon<ggl::polygon<P> > >(
+ "MULTIPOLYGON(((1 1,1 3,3 3,3 1,1 1)),((4 1,4 3,8 3,8 1,4 1)))",
+ 4.666666666666667, 2.0);
+
+ test_centroid<ggl::multi_polygon<ggl::polygon<P> > >(
+ "MULTIPOLYGON(((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2"
+ ",3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)),"
+ "((10 10,10 12,12 12,12 10,10 10)))",
+ 7.338463104108615, 6.0606722055552407);
+ }
+
+
+
+ // Test using real-world polygon with large (Y) coordinates
+ // (coordinates can be used for integer and floating point point-types)
+ // Note that this will fail (overflow) if centroid calculation uses float
+ test_centroid<ggl::multi_polygon<ggl::polygon<P> > >(
+ "MULTIPOLYGON(((426062 4527794,426123 4527731"
+ ",426113 4527700,426113 4527693,426115 4527671"
+ ",426133 4527584,426135 4527569,426124 4527558"
+ ",426103 4527547,426072 4527538,426003 4527535"
+ ",425972 4527532,425950 4527531,425918 4527528"
+ ",425894 4527517,425876 4527504,425870 4527484"
+ ",425858 4527442,425842 4527414,425816 4527397"
+ ",425752 4527384,425692 4527369,425658 4527349"
+ ",425624 4527307,425605 4527260,425598 4527213"
+ ",425595 4527167,425582 4527125,425548 4527064"
+ ",425535 4527027,425537 4526990,425534 4526943"
+ ",425525 4526904,425500 4526856,425461 4526811"
+ ",425450 4526798,425381 4526823,425362 4526830"
+ ",425329 4526848,425298 4526883,425291 4526897"
+ ",425268 4526923,425243 4526945,425209 4526971"
+ ",425172 4526990,425118 4527028,425104 4527044"
+ ",425042 4527090,424980 4527126,424925 4527147"
+ ",424881 4527148,424821 4527147,424698 4527125"
+ ",424610 4527121,424566 4527126,424468 4527139"
+ ",424426 4527141,424410 4527142,424333 4527130"
+ ",424261 4527110,424179 4527073,424024 4527012"
+ ",423947 4526987,423902 4526973,423858 4526961"
+ ",423842 4526951,423816 4526935,423799 4526910"
+ ",423776 4526905,423765 4526911,423739 4526927"
+ ",423692 4526946,423636 4526976,423608 4527008"
+ ",423570 4527016,423537 4527011,423505 4526996"
+ ",423480 4526994,423457 4527012,423434 4527021"
+ ",423367 4527008,423263 4526998,423210 4526993"
+ ",423157 4526996,423110 4526994,423071 4526984"
+ ",423048 4526984,423032 4526994,423254 4527613"
+ ",423889 4528156,424585 4528050,425479 4527974"
+ ",425795 4527867,426062 4527794)))",
+ 424530.6059719588, 4527519.619367547);
+}
+
+
+
+int test_main(int, char* [])
+{
+ //test_2d<ggl::point_xy<float> >();
+ test_2d<ggl::point_xy<double> >();
+ test_2d<ggl::point_xy<long int> >(true);
+ //test_2d<ggl::point_xy<long long> >(true);
+ test_2d<ggl::point_xy<long double> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_centroid1.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_centroid1.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,111 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/array.hpp>
+#include <boost/test/included/test_exec_monitor.hpp>
+#include <boost/test/floating_point_comparison.hpp>
+
+#include <ggl/core/is_linear.hpp>
+#include <ggl/core/point_type.hpp>
+
+#include <ggl/algorithms/assign.hpp>
+#include <ggl/algorithms/centroid.hpp>
+#include <ggl/algorithms/make.hpp>
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+#include <ggl/geometries/geometries.hpp>
+
+#include <ggl/multi/geometries/multi_polygon.hpp>
+#include <ggl/multi/algorithms/centroid.hpp>
+#include <ggl/extensions/gis/io/wkt/read_wkt_multi.hpp>
+
+
+#include <test_common.hpp>
+
+struct check_result
+{
+ template <typename Point, typename T>
+ static void apply(Point const& p, T const& x, T const& y)
+ {
+ BOOST_CHECK_CLOSE(double(ggl::get<0>(p)), double(x), 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<1>(p)), double(y), 0.001);
+ }
+};
+
+
+
+template <typename Geometry, typename T>
+void test_centroid(std::string const& wkt, T const& x, T const& y)
+{
+ Geometry geometry;
+ ggl::read_wkt(wkt, geometry);
+ typedef typename ggl::point_type<Geometry>::type point_type;
+ point_type c;
+ ggl::centroid(geometry, c);
+
+ check_result::apply(c, x, y);
+ std::cout << std::setprecision(16) << ggl::get<0>(c) << " " << ggl::get<1>(c) << std::endl;
+
+ ggl::centroid(geometry, c, ggl::strategy::centroid::bashein_detmer
+ <
+ point_type,
+ point_type,
+ float
+ >());
+ check_result::apply(c, x, y);
+}
+
+
+template <typename P>
+void test_2d()
+{
+ test_centroid<ggl::multi_polygon<ggl::polygon<P> > >(
+"MULTIPOLYGON(((426062.718750 4527794.500000,426123.593750 4527731.500000"
+",426113.000000 4527700.000000,426113.500000 4527693.500000,426115.156250 4527671.500000"
+",426133.562500 4527584.500000,426135.093750 4527569.000000,426124.781250 4527558.000000"
+",426103.531250 4527547.000000,426072.937500 4527538.000000,426003.500000 4527535.000000"
+",425972.125000 4527532.500000,425950.968750 4527531.000000,425918.750000 4527528.500000"
+",425894.031250 4527517.000000,425876.062500 4527504.500000,425870.718750 4527484.000000"
+",425858.406250 4527442.500000,425842.812500 4527414.500000,425816.343750 4527397.500000"
+",425752.687500 4527384.500000,425692.468750 4527369.500000,425658.312500 4527349.500000"
+",425624.781250 4527307.000000,425605.593750 4527260.500000,425598.218750 4527213.500000"
+",425595.968750 4527167.500000,425582.750000 4527125.000000,425548.187500 4527064.000000"
+",425535.843750 4527027.000000,425537.062500 4526990.000000,425534.812500 4526943.500000"
+",425525.843750 4526904.000000,425500.750000 4526856.000000,425461.031250 4526811.000000"
+",425450.468750 4526798.500000,425381.281250 4526823.500000,425362.468750 4526830.500000"
+",425329.531250 4526848.000000,425298.218750 4526883.500000,425291.375000 4526897.000000"
+",425268.781250 4526923.000000,425243.656250 4526945.500000,425209.218750 4526971.000000"
+",425172.312500 4526990.000000,425118.531250 4527028.000000,425104.062500 4527044.500000"
+",425042.250000 4527090.500000,424980.875000 4527126.500000,424925.312500 4527147.500000"
+",424881.250000 4527148.000000,424821.156250 4527147.000000,424698.937500 4527125.500000"
+",424610.843750 4527121.000000,424566.687500 4527126.500000,424468.906250 4527139.000000"
+",424426.312500 4527141.000000,424410.562500 4527142.000000,424333.343750 4527130.500000"
+",424261.093750 4527110.500000,424179.406250 4527073.000000,424024.593750 4527012.000000"
+",423947.250000 4526987.500000,423902.187500 4526973.500000,423858.093750 4526961.000000"
+",423842.156250 4526951.000000,423816.281250 4526935.000000,423799.000000 4526910.500000"
+",423776.968750 4526905.500000,423765.125000 4526911.500000,423739.093750 4526927.000000"
+",423692.781250 4526946.500000,423636.500000 4526976.500000,423608.093750 4527008.000000"
+",423570.937500 4527016.000000,423537.000000 4527011.500000,423505.500000 4526996.000000"
+",423480.875000 4526994.500000,423457.375000 4527012.000000,423434.656250 4527021.000000"
+",423367.625000 4527008.500000,423263.375000 4526998.000000,423210.843750 4526993.500000"
+",423157.531250 4526996.500000,423110.937500 4526994.000000,423071.031250 4526984.000000"
+",423048.968750 4526984.500000,423032.218750 4526994.500000,423254.968750 4527613.500000"
+",423889.906250 4528156.000000,424585.656250 4528050.500000,425479.375000 4527974.000000"
+",425795.562500 4527867.000000,426062.718750 4527794.500000)))",
+ 424531.181281519, 4527519.8123329);
+}
+
+
+
+int test_main(int, char* [])
+{
+ test_2d<ggl::point_xy<double> >();
+// test_2d<boost::tuple<float, float> >();
+ test_2d<ggl::point_xy<float> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_convex_hull.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_convex_hull.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,54 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <cstddef>
+#include <iterator>
+#include <string>
+
+#include <algorithms/test_convex_hull.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+
+#include <ggl/multi/core/point_type.hpp>
+
+#include <ggl/multi/iterators/range_type.hpp>
+
+#include <ggl/multi/algorithms/num_points.hpp>
+#include <ggl/multi/algorithms/convex_hull.hpp>
+
+#include <ggl/extensions/gis/io/wkt/wkt.hpp>
+
+#include <ggl/multi/geometries/multi_point.hpp>
+#include <ggl/multi/geometries/multi_linestring.hpp>
+#include <ggl/multi/geometries/multi_polygon.hpp>
+
+
+
+
+template <typename P>
+void test_all()
+{
+ typedef ggl::multi_point<P> mp;
+ typedef ggl::multi_linestring<ggl::linestring<P> > ml;
+ typedef ggl::multi_polygon<ggl::polygon<P> > mpoly;
+ test_geometry<mp>("multipoint((1.1 1.1), (2.5 2.1), (3.1 3.1), (4.9 1.1), (3.1 1.9))", 5, 4, 3.8);
+ test_geometry<ml>("multilinestring((2 4, 3 4, 3 5), (4 3,4 4,5 4))", 6, 5, 3.0);
+ test_geometry<mpoly>("multipolygon(((1 4,1 6,2 5,3 5,4 6,4 4,1 4)), ((4 2,4 3,6 3,6 2,4 2)))", 12, 7, 14.0);
+}
+
+
+int test_main(int, char* [])
+{
+ //test_all<ggl::point_xy<int> >();
+ //test_all<ggl::point_xy<float> >();
+ test_all<ggl::point_xy<double> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_correct.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_correct.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,58 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels, Geodan B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/correct.hpp>
+
+#include <ggl/strategies/strategies.hpp>
+
+#include <ggl/multi/algorithms/correct.hpp>
+
+#include <ggl/extensions/gis/io/wkt/wkt.hpp>
+
+#include <ggl/geometries/box.hpp>
+#include <ggl/geometries/linear_ring.hpp>
+#include <ggl/geometries/linestring.hpp>
+#include <ggl/geometries/point_xy.hpp>
+#include <ggl/geometries/point.hpp>
+#include <ggl/geometries/polygon.hpp>
+#include <ggl/multi/geometries/multi_polygon.hpp>
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt, std::string const& expected)
+{
+ Geometry geometry;
+
+ ggl::read_wkt(wkt, geometry);
+ ggl::correct(geometry);
+
+ std::ostringstream out;
+ out << ggl::wkt(geometry);
+
+ BOOST_CHECK_EQUAL(out.str(), expected);
+}
+
+template <typename P>
+void test_all()
+{
+ typedef ggl::multi_polygon<ggl::polygon<P> > cw_type;
+ std::string cw_mp =
+ "MULTIPOLYGON(((0 0,0 1,1 1,1 0,0 0)))";
+ test_geometry<cw_type>(cw_mp, cw_mp);
+
+ test_geometry<cw_type>("MULTIPOLYGON(((0 0,1 0,1 1,0 1,0 0)))",
+ cw_mp);
+}
+
+int test_main( int , char* [] )
+{
+ test_all<ggl::point_xy<double> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_distance.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_distance.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,141 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels, Geodan B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <string>
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/distance.hpp>
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+
+#include <ggl/strategies/strategies.hpp>
+
+
+#include <ggl/multi/algorithms/distance.hpp>
+#include <ggl/multi/geometries/multi_point.hpp>
+#include <ggl/multi/geometries/multi_linestring.hpp>
+#include <ggl/multi/geometries/multi_polygon.hpp>
+#include <ggl/extensions/gis/io/wkt/read_wkt_multi.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+#include <test_common/test_point.hpp>
+
+
+template <typename Geometry1, typename Geometry2>
+void test_distance(const std::string& wkt1, const std::string& wkt2, double expected)
+{
+ Geometry1 g1;
+ Geometry2 g2;
+ ggl::read_wkt(wkt1, g1);
+ ggl::read_wkt(wkt2, g2);
+ double d = ggl::distance(g1, g2);
+
+ BOOST_CHECK_CLOSE(d, expected, 0.0001);
+}
+
+template <typename Geometry1, typename Geometry2, typename Strategy>
+void test_distance(const Strategy& strategy, const std::string& wkt1,
+ const std::string& wkt2, double expected)
+{
+ Geometry1 g1;
+ Geometry2 g2;
+ ggl::read_wkt(wkt1, g1);
+ ggl::read_wkt(wkt2, g2);
+ double d = ggl::distance(g1, g2, strategy);
+
+ BOOST_CHECK_CLOSE(d, expected, 0.0001);
+}
+
+
+template <typename P>
+void test_2d()
+{
+ typedef ggl::multi_point<P> mp;
+ typedef ggl::multi_linestring<ggl::linestring<P> > ml;
+ test_distance<P, P>("POINT(0 0)", "POINT(1 1)", sqrt(2.0));
+ test_distance<P, mp>("POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+ test_distance<mp, P>("MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+ test_distance<mp, mp>("MULTIPOINT((1 1),(1 0),(0 2))", "MULTIPOINT((2 2),(2 3))", sqrt(2.0));
+ test_distance<P, ml>("POINT(0 0)", "MULTILINESTRING((1 1,2 2),(1 0,2 0),(0 2,0 3))", 1.0);
+ test_distance<ml, P>("MULTILINESTRING((1 1,2 2),(1 0,2 0),(0 2,0 3))", "POINT(0 0)", 1.0);
+ test_distance<ml, mp>("MULTILINESTRING((1 1,2 2),(1 0,2 0),(0 2,0 3))", "MULTIPOINT((0 0),(1 1))", 0.0);
+
+ // Test with a strategy
+ ggl::strategy::distance::pythagoras<P, P> pyth;
+ test_distance<P, P>(pyth, "POINT(0 0)", "POINT(1 1)", sqrt(2.0));
+ test_distance<P, mp>(pyth, "POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+ test_distance<mp, P>(pyth, "MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+}
+
+
+template <typename P>
+void test_3d()
+{
+ typedef ggl::multi_point<P> mp;
+ test_distance<P, P>("POINT(0 0 0)", "POINT(1 1 1)", sqrt(3.0));
+ test_distance<P, mp>("POINT(0 0 0)", "MULTIPOINT((1 1 1),(1 0 0),(0 1 2))", 1.0);
+ test_distance<mp, mp>("MULTIPOINT((1 1 1),(1 0 0),(0 0 2))", "MULTIPOINT((2 2 2),(2 3 4))", sqrt(3.0));
+}
+
+
+template <typename P1, typename P2>
+void test_mixed()
+{
+ typedef ggl::multi_point<P1> mp1;
+ typedef ggl::multi_point<P2> mp2;
+
+ test_distance<P1, P2>("POINT(0 0)", "POINT(1 1)", sqrt(2.0));
+
+ test_distance<P1, mp1>("POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+ test_distance<P1, mp2>("POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+ test_distance<P2, mp1>("POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+ test_distance<P2, mp2>("POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+
+ // Test automatic reversal
+ test_distance<mp1, P1>("MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+ test_distance<mp1, P2>("MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+ test_distance<mp2, P1>("MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+ test_distance<mp2, P2>("MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+
+ // Test multi-multi using different point types for each
+ test_distance<mp1, mp2>("MULTIPOINT((1 1),(1 0),(0 2))", "MULTIPOINT((2 2),(2 3))", sqrt(2.0));
+
+ // Test with a strategy
+ using namespace ggl::strategy::distance;
+
+ test_distance<P1, P2>(pythagoras<P1, P2>(), "POINT(0 0)", "POINT(1 1)", sqrt(2.0));
+
+ test_distance<P1, mp1>(pythagoras<P1, P1>(), "POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+ test_distance<P1, mp2>(pythagoras<P1, P2>(), "POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+ test_distance<P2, mp1>(pythagoras<P2, P1>(), "POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+ test_distance<P2, mp2>(pythagoras<P2, P2>(), "POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+
+ // Most interesting: reversal AND a strategy (note that the stategy must be reversed automatically
+ test_distance<mp1, P1>(pythagoras<P1, P1>(), "MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+ test_distance<mp1, P2>(pythagoras<P1, P2>(), "MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+ test_distance<mp2, P1>(pythagoras<P2, P1>(), "MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+ test_distance<mp2, P2>(pythagoras<P2, P2>(), "MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+}
+
+
+
+int test_main( int , char* [] )
+{
+ test_2d<boost::tuple<float, float> >();
+ test_2d<ggl::point_xy<float> >();
+ test_2d<ggl::point_xy<double> >();
+
+ test_3d<boost::tuple<float, float, float> >();
+ test_3d<ggl::point<double, 3, ggl::cs::cartesian> >();
+
+ test_mixed<ggl::point_xy<float>, ggl::point_xy<double> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_envelope.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_envelope.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,58 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <algorithms/test_envelope.hpp>
+
+
+#include <ggl/multi/algorithms/envelope.hpp>
+#include <ggl/multi/geometries/multi_point.hpp>
+#include <ggl/multi/geometries/multi_linestring.hpp>
+#include <ggl/multi/geometries/multi_polygon.hpp>
+
+#include <ggl/extensions/gis/io/wkt/read_wkt_multi.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+#include <test_common/test_point.hpp>
+
+
+
+
+template <typename P>
+void test_2d()
+{
+ /*test_envelope<ggl::multi_point<P> >(
+ "MULTIPOINT((1 1),(1 0),(1 2))", 1, 1, 0, 2);
+ test_envelope<ggl::multi_linestring<ggl::linestring<P> > >(
+ "MULTILINESTRING((0 0,1 1),(1 1,2 2),(2 2,3 3))", 0, 3, 0, 3);
+*/
+ test_envelope<ggl::multi_polygon<ggl::polygon<P> > >(
+ "MULTIPOLYGON(((1 1,1 3,3 3,3 1,1 1)),((4 4,4 6,6 6,6 4,4 4)))", 1, 6, 1, 6);
+}
+
+
+template <typename P>
+void test_3d()
+{
+ typedef ggl::multi_point<P> mp;
+}
+
+
+int test_main( int , char* [] )
+{
+ test_2d<boost::tuple<float, float> >();
+ test_2d<ggl::point_xy<float> >();
+ test_2d<ggl::point_xy<double> >();
+
+ test_3d<boost::tuple<float, float, float> >();
+ test_3d<ggl::point<double, 3, ggl::cs::cartesian> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_for_each.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_for_each.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,78 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels, Geodan B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/for_each.hpp>
+#include <ggl/multi/algorithms/for_each.hpp>
+
+#include <ggl/extensions/gis/io/wkt/wkt.hpp>
+
+#include <ggl/geometries/box.hpp>
+#include <ggl/geometries/linear_ring.hpp>
+#include <ggl/geometries/linestring.hpp>
+#include <ggl/geometries/point.hpp>
+#include <ggl/geometries/polygon.hpp>
+
+#include <ggl/multi/geometries/multi_point.hpp>
+#include <ggl/multi/geometries/multi_linestring.hpp>
+#include <ggl/multi/geometries/multi_polygon.hpp>
+
+#include <algorithms/test_for_each.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ test_geometry<ggl::multi_point<P> >
+ (
+ "MULTIPOINT((1 1))"
+
+ // per point
+ , 1
+ , "MULTIPOINT((101 1))"
+ , "MULTIPOINT((101 100))"
+ // per segment
+ , ""
+ , 0
+ , "MULTIPOINT((1 1))"
+ );
+
+ test_geometry<ggl::multi_linestring<ggl::linestring<P> > >
+ (
+ "MULTILINESTRING((1 1,2 2))"
+
+ , 3
+ , "MULTILINESTRING((101 1,102 2))"
+ , "MULTILINESTRING((101 100,102 200))"
+
+ , "((1, 1), (2, 2))"
+ , std::sqrt(2.0)
+ , "MULTILINESTRING((10 1,2 2))"
+ );
+
+ typedef ggl::multi_polygon<ggl::polygon<P> > mp;
+ test_geometry<mp>
+ (
+ "MULTIPOLYGON(((1 1,1 4,4 4,4 1,1 1)))"
+
+ , 11
+ , "MULTIPOLYGON(((101 1,101 4,104 4,104 1,101 1)))"
+ , "MULTIPOLYGON(((101 100,101 400,104 400,104 100,101 100)))"
+
+ , "((1, 1), (1, 4)) ((1, 4), (4, 4)) ((4, 4), (4, 1)) ((4, 1), (1, 1))"
+ , 4 * 3.0
+ , "MULTIPOLYGON(((10 1,10 4,4 4,4 1,1 1)))"
+ );
+}
+
+int test_main( int , char* [] )
+{
+ test_all<ggl::point_xy<double> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_length.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_length.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,31 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels, Geodan B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <algorithms/test_length.hpp>
+
+#include <ggl/multi/multi.hpp>
+
+#include <ggl/geometries/geometries.hpp>
+
+#include <ggl/extensions/gis/io/wkt/wkt.hpp>
+
+
+
+template <typename P>
+void test_all()
+{
+ test_geometry<ggl::multi_linestring<ggl::linestring<P> > >
+ ("MULTILINESTRING((0 0,3 4,4 3))", 5 + sqrt(2.0));
+}
+
+int test_main( int , char* [] )
+{
+ test_all<ggl::point_xy<double> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_perimeter.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_perimeter.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,33 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels, Geodan B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/perimeter.hpp>
+#include <ggl/multi/algorithms/perimeter.hpp>
+
+#include <ggl/extensions/gis/io/wkt/wkt.hpp>
+
+#include <ggl/geometries/polygon.hpp>
+#include <ggl/multi/geometries/multi_polygon.hpp>
+
+#include <algorithms/test_perimeter.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ test_geometry<ggl::multi_polygon<ggl::polygon<P> > >(
+ "MULTIPOLYGON(((0 0,0 1,1 0,0 0)))", 1.0 + 1.0 + sqrt(2.0));
+}
+
+int test_main( int , char* [] )
+{
+ test_all<ggl::point_xy<double> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_simplify.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_simplify.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,53 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels, Geodan B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/simplify.hpp>
+#include <ggl/multi/algorithms/simplify.hpp>
+
+#include <ggl/extensions/gis/io/wkt/wkt.hpp>
+
+#include <ggl/geometries/box.hpp>
+#include <ggl/geometries/linear_ring.hpp>
+#include <ggl/geometries/linestring.hpp>
+#include <ggl/geometries/point.hpp>
+#include <ggl/geometries/polygon.hpp>
+
+#include <ggl/multi/geometries/multi_point.hpp>
+#include <ggl/multi/geometries/multi_linestring.hpp>
+#include <ggl/multi/geometries/multi_polygon.hpp>
+
+#include <algorithms/test_simplify.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ test_geometry<ggl::multi_point<P> >(
+ "MULTIPOINT((0 0),(1 1))",
+ "MULTIPOINT((0 0),(1 1))", 1.0);
+
+ test_geometry<ggl::multi_linestring<ggl::linestring<P> > >(
+ "MULTILINESTRING((0 0,5 5,10 10))",
+ "MULTILINESTRING((0 0,10 10))", 1.0);
+
+ typedef ggl::multi_polygon<ggl::polygon<P> > mp;
+ test_geometry<mp>(
+ "MULTIPOLYGON(((4 0,8 2,8 7,4 9,0 7,0 2,2 1,4 0)))",
+ "MULTIPOLYGON(((4 0,8 2,8 7,4 9,0 7,0 2,4 0)))", 1.0);
+ test_geometry<mp>(
+ "MULTIPOLYGON(((4 0,8 2,8 7,4 9,0 7,0 2,2 1,4 0),(7 3,7 6,1 6,1 3,4 3,7 3)))",
+ "MULTIPOLYGON(((4 0,8 2,8 7,4 9,0 7,0 2,4 0),(7 3,7 6,1 6,1 3,7 3)))", 1.0);
+}
+
+int test_main( int , char* [] )
+{
+ test_all<ggl::point_xy<double> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_within.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/multi/algorithms/multi_within.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,55 @@
+// Generic Geometry Library
+//
+// Copyright Barend Gehrels, Geodan B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/extensions/gis/io/wkt/wkt.hpp>
+
+#include <ggl/algorithms/correct.hpp>
+#include <ggl/algorithms/within.hpp>
+
+#include <ggl/geometries/box.hpp>
+#include <ggl/geometries/polygon.hpp>
+
+#include <ggl/multi/algorithms/within.hpp>
+
+#include <ggl/multi/geometries/multi_polygon.hpp>
+
+#include <algorithms/test_within.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ typedef ggl::multi_polygon<ggl::polygon<P> > mp;
+
+ // trivial cases
+ test_geometry<P, mp>("POINT(1 1)", "MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0)))", true);
+ test_geometry<P, mp>("POINT(3 3)", "MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0)))", false);
+
+ // test if it is in one of them
+ test_geometry<P, mp>("POINT(4 4)", "MULTIPOLYGON("
+ "((0 0,0 2,2 2,2 0,0 0))"
+ "((3 3,3 6,6 6,6 3,3 3))"
+ ")",
+ true);
+}
+
+int test_main( int , char* [] )
+{
+ //test_all<ggl::point_xy<int> >();
+ test_all<ggl::point_xy<double> >();
+
+#if defined(HAVE_CLN)
+ test_all<ggl::point_xy<boost::numeric_adaptor::cln_value_type> >();
+#endif
+#if defined(HAVE_GMP)
+ test_all<ggl::point_xy<boost::numeric_adaptor::gmp_value_type> >();
+#endif
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/point_concept/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/point_concept/Jamfile.v2 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,20 @@
+# test/point_concept/Jamfile.v2
+#
+# Copyright (c) 2009 Mateusz Loskot <mateusz_at_[hidden]>
+#
+# Use, modification and distribution is subject to the Boost Software License,
+# Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+test-suite ggl-point-concept
+ :
+ [ compile concept_checker.cpp ]
+ [ compile well_formed_point.cpp ]
+ [ compile well_formed_point_traits.cpp ]
+ [ compile array_point.cpp ]
+ [ compile-fail point_without_coordinate_type.cpp ]
+ [ compile-fail point_without_dimension.cpp ]
+ [ compile-fail point_without_getter.cpp ]
+ [ compile-fail point_without_setter.cpp ]
+ [ compile-fail point_with_incorrect_dimension.cpp ]
+ ;
Added: sandbox/ggl/formal_review/libs/ggl/test/point_concept/array_point.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/point_concept/array_point.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,19 @@
+// Generic Geometry Library Point concept test file
+//
+// Copyright Bruno Lalande 2008, 2009
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <test_common/test_point.hpp>
+
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include "function_requiring_a_point.hpp"
+
+int main()
+{
+ float p1[3] = { 0, 0, 0 };
+ const float p2[3] = { 0, 0, 0 };
+ ggl::function_requiring_a_point(p1, p2);
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/point_concept/concept_checker.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/point_concept/concept_checker.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,70 @@
+// Generic Geometry Library Point concept test file
+//
+// Copyright Bruno Lalande 2008, 2009
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl/core/cs.hpp>
+#include <ggl/geometries/concepts/check.hpp>
+
+struct ro_point
+{
+ float x, y;
+};
+
+
+struct rw_point
+{
+ float x, y;
+};
+
+
+namespace ggl { namespace traits {
+
+template <> struct tag<ro_point> { typedef point_tag type; };
+template <> struct coordinate_type<ro_point> { typedef float type; };
+template <> struct coordinate_system<ro_point> { typedef ggl::cs::cartesian type; };
+template <> struct dimension<ro_point> { enum { value = 2 }; };
+
+template <> struct access<ro_point, 0>
+{
+ static float get(ro_point const& p) { return p.x; }
+};
+
+template <> struct access<ro_point, 1>
+{
+ static float get(ro_point const& p) { return p.y; }
+};
+
+
+
+
+template <> struct tag<rw_point> { typedef point_tag type; };
+template <> struct coordinate_type<rw_point> { typedef float type; };
+template <> struct coordinate_system<rw_point> { typedef ggl::cs::cartesian type; };
+template <> struct dimension<rw_point> { enum { value = 2 }; };
+
+template <> struct access<rw_point, 0>
+{
+ static float get(rw_point const& p) { return p.x; }
+ static void set(rw_point& p, float value) { p.x = value; }
+};
+
+template <> struct access<rw_point, 1>
+{
+ static float get(rw_point const& p) { return p.y; }
+ static void set(rw_point& p, float value) { p.y = value; }
+};
+
+
+}} // namespace ggl::traits
+
+
+int main()
+{
+ ggl::concept::check<const ro_point>();
+ ggl::concept::check<rw_point>();
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/point_concept/function_asserting_a_point.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/point_concept/function_asserting_a_point.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,28 @@
+// Generic Geometry Library Point concept unit tests
+//
+// Copyright Bruno Lalande 2008, 2009
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_POINT_CONCEPT_FUNCTION_ASSERTING_A_POINT_HPP
+#define GGL_TEST_POINT_CONCEPT_FUNCTION_ASSERTING_A_POINT_HPP
+
+#include <boost/concept/requires.hpp>
+
+#include <ggl/geometries/concepts/point_concept.hpp>
+
+namespace ggl
+{
+ template <typename P, typename CP>
+ void function_asserting_a_point(P& p1, const CP& p2)
+ {
+ BOOST_CONCEPT_ASSERT((concept::Point<P>));
+ BOOST_CONCEPT_ASSERT((concept::ConstPoint<P>));
+
+ get<0>(p1) = get<0>(p2);
+ }
+}
+
+#endif // GGL_TEST_POINT_CONCEPT_FUNCTION_ASSERTING_A_POINT_HPP
Added: sandbox/ggl/formal_review/libs/ggl/test/point_concept/function_requiring_a_point.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/point_concept/function_requiring_a_point.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,30 @@
+// Generic Geometry Library Point concept unit tests
+//
+// Copyright Bruno Lalande 2008, 2009
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_POINT_CONCEPT_FUNCTION_REQUIRING_A_POINT_HPP
+#define GGL_TEST_POINT_CONCEPT_FUNCTION_REQUIRING_A_POINT_HPP
+
+#include <boost/concept/requires.hpp>
+
+#include <ggl/geometries/concepts/point_concept.hpp>
+
+namespace ggl
+{
+ template <typename P, typename C>
+
+ inline BOOST_CONCEPT_REQUIRES(
+ ((concept::Point<P>))
+ ((concept::ConstPoint<C>)),
+ (void))
+ function_requiring_a_point(P& p1, const C& p2)
+ {
+ set<0>(p1, get<0>(p2));
+ }
+}
+
+#endif // GGL_TEST_POINT_CONCEPT_FUNCTION_REQUIRING_A_POINT_HPP
Added: sandbox/ggl/formal_review/libs/ggl/test/point_concept/point_with_incorrect_dimension.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/point_concept/point_with_incorrect_dimension.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,51 @@
+// Generic Geometry Library Point concept test file
+//
+// Copyright Bruno Lalande 2008, 2009
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <test_common/test_point.hpp>
+
+#include "function_asserting_a_point.hpp"
+#include "function_requiring_a_point.hpp"
+
+#include <ggl/core/cs.hpp>
+
+struct point
+{
+ float x, y;
+};
+
+namespace ggl { namespace traits {
+
+template <> struct tag<point> { typedef point_tag type; };
+template <> struct coordinate_type<point> { typedef float type; };
+template <> struct coordinate_system<point> { typedef ggl::cs::cartesian type; };
+template <> struct dimension<point> { enum { value = 3 }; };
+
+template <> struct access<point, 0>
+{
+ static float get(point const& p) { return p.x; }
+ static void set(point& p, float value) { p.x = value; }
+};
+
+template <> struct access<point, 1>
+{
+ static float get(point const& p) { return p.y; }
+ static void set(point& p, float value) { p.y = value; }
+};
+
+
+}} // namespace ggl::traits
+
+
+int main()
+{
+ point p1;
+ const point p2;
+ ggl::function_requiring_a_point(p1, p2);
+ ggl::function_asserting_a_point(p1, p2);
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/point_concept/point_without_coordinate_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/point_concept/point_without_coordinate_type.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,46 @@
+// Generic Geometry Library Point concept test file
+//
+// Copyright Bruno Lalande 2008, 2009
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include "function_requiring_a_point.hpp"
+
+#include <ggl/core/cs.hpp>
+
+struct point
+{
+ float x, y;
+};
+
+namespace ggl { namespace traits {
+
+template <> struct tag<point> { typedef point_tag type; };
+//template <> struct coordinate_type<point> { typedef float type; };
+template <> struct coordinate_system<point> { typedef ggl::cs::cartesian type; };
+template <> struct dimension<point> { enum { value = 2 }; };
+
+template <> struct access<point, 0>
+{
+ static float get(point const& p) { return p.x; }
+ static void set(point& p, float value) { p.x = value; }
+};
+
+template <> struct access<point, 1>
+{
+ static float get(point const& p) { return p.y; }
+ static void set(point& p, float value) { p.y = value; }
+};
+
+
+}} // namespace ggl::traits
+
+int main()
+{
+ point p1;
+ const point p2;
+ ggl::function_requiring_a_point(p1, p2);
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/point_concept/point_without_dimension.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/point_concept/point_without_dimension.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,48 @@
+// Generic Geometry Library Point concept test file
+//
+// Copyright Bruno Lalande 2008, 2009
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include "function_requiring_a_point.hpp"
+
+#include <ggl/core/cs.hpp>
+
+struct point
+{
+ float x, y;
+};
+
+
+namespace ggl { namespace traits {
+
+template <> struct tag<point> { typedef point_tag type; };
+template <> struct coordinate_type<point> { typedef float type; };
+template <> struct coordinate_system<point> { typedef ggl::cs::cartesian type; };
+//template <> struct dimension<point> { enum { value = 2 }; };
+
+template <> struct access<point, 0>
+{
+ static float get(point const& p) { return p.x; }
+ static void set(point& p, float value) { p.x = value; }
+};
+
+template <> struct access<point, 1>
+{
+ static float get(point const& p) { return p.y; }
+ static void set(point& p, float value) { p.y = value; }
+};
+
+
+}} // namespace ggl::traits
+
+
+int main()
+{
+ point p1;
+ const point p2;
+ ggl::function_requiring_a_point(p1, p2);
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/point_concept/point_without_getter.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/point_concept/point_without_getter.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,44 @@
+// Generic Geometry Library Point concept test file
+//
+// Copyright Bruno Lalande 2008, 2009
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include "function_requiring_a_point.hpp"
+
+#include <ggl/core/cs.hpp>
+
+struct point
+{
+ float x, y;
+};
+
+namespace ggl { namespace traits {
+
+template <> struct tag<point> { typedef point_tag type; };
+template <> struct coordinate_type<point> { typedef float type; };
+template <> struct coordinate_system<point> { typedef ggl::cs::cartesian type; };
+template <> struct dimension<point> { enum { value = 2 }; };
+
+template <> struct access<point, 0>
+{
+ static void set(point& p, float value) { p.x = value; }
+};
+
+template <> struct access<point, 1>
+{
+ static void set(point& p, float value) { p.y = value; }
+};
+
+
+}} // namespace ggl::traits
+
+int main()
+{
+ point p1;
+ const point p2;
+ ggl::function_requiring_a_point(p1, p2);
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/point_concept/point_without_setter.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/point_concept/point_without_setter.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,44 @@
+// Generic Geometry Library Point concept test file
+//
+// Copyright Bruno Lalande 2008, 2009
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include "function_requiring_a_point.hpp"
+
+#include <ggl/core/cs.hpp>
+
+struct point
+{
+ float x, y;
+};
+
+namespace ggl { namespace traits {
+
+template <> struct tag<point> { typedef point_tag type; };
+template <> struct coordinate_type<point> { typedef float type; };
+template <> struct coordinate_system<point> { typedef ggl::cs::cartesian type; };
+template <> struct dimension<point> { enum { value = 2 }; };
+
+template <> struct access<point, 0>
+{
+ static float get(point const& p) { return p.x; }
+};
+
+template <> struct access<point, 1>
+{
+ static float get(point const& p) { return p.y; }
+};
+
+
+}} // namespace ggl::traits
+
+int main()
+{
+ point p1;
+ const point p2;
+ ggl::function_requiring_a_point(p1, p2);
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/point_concept/well_formed_point.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/point_concept/well_formed_point.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,27 @@
+// Generic Geometry Library Point concept test file
+//
+// Copyright Bruno Lalande 2008, 2009
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/tuple/tuple.hpp>
+
+#include <ggl/core/cs.hpp>
+#include <ggl/geometries/register/point.hpp>
+
+#include "function_requiring_a_point.hpp"
+
+struct point: public boost::tuple<float, float>
+{
+};
+
+GEOMETRY_REGISTER_POINT_2D(point, float, cs::cartesian, get<0>(), get<1>())
+
+int main()
+{
+ point p1;
+ const point p2;
+ ggl::function_requiring_a_point(p1, p2);
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/point_concept/well_formed_point_traits.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/point_concept/well_formed_point_traits.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,81 @@
+// Generic Geometry Library Point concept test file
+//
+// Copyright Bruno Lalande 2008, 2009
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <ggl/core/cs.hpp>
+
+#include "function_requiring_a_point.hpp"
+
+struct point
+{
+ point(): x(), y() {}
+ float x, y;
+};
+
+namespace ggl { namespace traits {
+
+template <>
+struct tag<point>
+{
+ typedef point_tag type;
+};
+
+template <>
+struct coordinate_type<point>
+{
+ typedef float type;
+};
+
+template <>
+struct coordinate_system<point>
+{
+ typedef ggl::cs::cartesian type;
+};
+
+template <>
+struct dimension<point>
+{
+ enum { value = 2 };
+};
+
+template <>
+struct access<point, 0>
+{
+ static float get(point const& p)
+ {
+ return p.x;
+ }
+
+ static void set(point& p, float value)
+ {
+ p.x = value;
+ }
+};
+
+template <>
+struct access<point, 1>
+{
+ static float get(point const& p)
+ {
+ return p.y;
+ }
+
+ static void set(point& p, float value)
+ {
+ p.y = value;
+ }
+};
+
+
+}} // namespace ggl::traits
+
+int main()
+{
+ point p1;
+ const point p2;
+ ggl::function_requiring_a_point(p1, p2);
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/policies/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/policies/Jamfile.v2 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,12 @@
+# test/util/Jamfile.v2
+#
+# Copyright (c) 2009 Barend Gehrels
+#
+# Use, modification and distribution is subject to the Boost Software License,
+# Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+test-suite ggl-policies
+ :
+ [ run compare.cpp ]
+ ;
Added: sandbox/ggl/formal_review/libs/ggl/test/policies/compare.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/policies/compare.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,134 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <ggl_test_common.hpp>
+
+#include <algorithm>
+
+#include <ggl/algorithms/make.hpp>
+#include <ggl/util/write_dsv.hpp>
+
+#include <ggl/policies/compare.hpp>
+
+#include <ggl/strategies/strategies.hpp>
+
+#include <ggl/geometries/point.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+
+#include <test_common/test_point.hpp>
+
+
+template <typename Container>
+inline std::string coordinates(Container const& points)
+{
+ std::ostringstream out;
+ typedef typename boost::range_value<Container>::type point_type;
+ for (typename boost::range_const_iterator<Container>::type it = boost::begin(points);
+ it != boost::end(points);
+ ++it)
+ {
+ out << ggl::dsv(*it);
+ }
+ return out.str();
+}
+
+template <typename P>
+void test_2d()
+{
+ typedef typename ggl::coordinate_type<P>::type ct;
+
+ std::vector<P> v;
+ v.push_back(ggl::make<P>(3, 1));
+ v.push_back(ggl::make<P>(2, 3));
+ v.push_back(ggl::make<P>(2, 2));
+ v.push_back(ggl::make<P>(1, 3));
+
+ // Sort on coordinates in order x,y,z
+ std::sort(v.begin(), v.end(), ggl::less<P>());
+ std::string s = coordinates(v);
+ BOOST_CHECK_EQUAL(s, "(1, 3)(2, 2)(2, 3)(3, 1)");
+
+ // Reverse sort
+ std::sort(v.begin(), v.end(), ggl::greater<P>());
+ s = coordinates(v);
+ BOOST_CHECK_EQUAL(s, "(3, 1)(2, 3)(2, 2)(1, 3)");
+
+ // Sort backwards on coordinates in order x,y,z
+ //std::sort(v.begin(), v.end(), ggl::greater<P>());
+ //std::string s = coordinates(v);
+ //BOOST_CHECK_EQUAL(s, "(1, 3)(2, 2)(2, 3)(3, 1)");
+
+ // Refill to remove duplicate coordinates
+ v.clear();
+ v.push_back(ggl::make<P>(4, 1));
+ v.push_back(ggl::make<P>(3, 2));
+ v.push_back(ggl::make<P>(2, 3));
+ v.push_back(ggl::make<P>(1, 4));
+
+ // Sort ascending on only x-coordinate
+ std::sort(v.begin(), v.end(), ggl::less<P, 0>());
+ s = coordinates(v);
+ BOOST_CHECK_EQUAL(s, "(1, 4)(2, 3)(3, 2)(4, 1)");
+
+ // Sort ascending on only y-coordinate
+ std::sort(v.begin(), v.end(), ggl::less<P, 1>());
+ s = coordinates(v);
+ BOOST_CHECK_EQUAL(s, "(4, 1)(3, 2)(2, 3)(1, 4)");
+
+ // Sort descending on only x-coordinate
+ std::sort(v.begin(), v.end(), ggl::greater<P, 0>());
+ s = coordinates(v);
+ //BOOST_CHECK_EQUAL(s, "(4, 1)(3, 2)(2, 3)(1, 4)");
+
+ // Sort descending on only y-coordinate
+ std::sort(v.begin(), v.end(), ggl::greater<P, 1>());
+ s = coordinates(v);
+ BOOST_CHECK_EQUAL(s, "(1, 4)(2, 3)(3, 2)(4, 1)");
+}
+
+
+template <typename P>
+void test_spherical()
+{
+ typedef typename ggl::coordinate_type<P>::type ct;
+
+ std::vector<P> v;
+ v.push_back(ggl::make<P>( 179.73, 71.56)); // east
+ v.push_back(ggl::make<P>( 177.47, 71.23)); // less east
+ v.push_back(ggl::make<P>(-178.78, 70.78)); // further east, = west, this is the most right point
+
+ // Sort on coordinates in order x,y,z
+ std::sort(v.begin(), v.end(), ggl::less<P>());
+ std::string s = coordinates(v);
+ BOOST_CHECK_EQUAL(s, "(177.47, 71.23)(179.73, 71.56)(-178.78, 70.78)");
+
+ // Sort ascending on only x-coordinate
+ std::sort(v.begin(), v.end(), ggl::less<P, 0>());
+ s = coordinates(v);
+ BOOST_CHECK_EQUAL(s, "(177.47, 71.23)(179.73, 71.56)(-178.78, 70.78)");
+
+ // Sort ascending on only x-coordinate, but override with std-comparison,
+ // (so this is the normal sorting behaviour that would have been used
+ // if it would not have been spherical)
+ std::sort(v.begin(), v.end(), ggl::less<P, 0, std::less<ct> >());
+ s = coordinates(v);
+ BOOST_CHECK_EQUAL(s, "(-178.78, 70.78)(177.47, 71.23)(179.73, 71.56)");
+}
+
+
+int test_main(int, char* [])
+{
+ //test_2d<ggl::point<int, 2, ggl::cs::cartesian> >();
+ //test_2d<ggl::point<float, 2, ggl::cs::cartesian> >();
+ //test_2d<boost::tuple<double, double> >();
+ test_2d<ggl::point<double, 2, ggl::cs::cartesian> >();
+
+ test_spherical<ggl::point<double, 2, ggl::cs::spherical<ggl::degree> > >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/strategies/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/strategies/Jamfile.v2 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,16 @@
+# test/strategies/Jamfile.v2
+#
+# Copyright (c) 2009 Mateusz Loskot <mateusz_at_[hidden]>
+#
+# Use, modification and distribution is subject to the Boost Software License,
+# Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+test-suite ggl-strategies
+ :
+ [ run cross_track.cpp ]
+ [ run haversine.cpp ]
+ [ run projected_point.cpp ]
+ [ run pythagoras.cpp ]
+ [ run transformer.cpp ]
+ ;
Added: sandbox/ggl/formal_review/libs/ggl/test/strategies/cross_track.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/strategies/cross_track.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,71 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/assign.hpp>
+
+#include <ggl/strategies/spherical/distance_haversine.hpp>
+#include <ggl/strategies/spherical/distance_cross_track.hpp>
+
+#include <ggl/strategies/concepts/distance_concept.hpp>
+
+#include <ggl/geometries/point.hpp>
+#include <ggl/geometries/segment.hpp>
+
+
+template <typename Point>
+void test_distance(double lon1, double lat1,
+ double lon2, double lat2,
+ double lon3, double lat3,
+ double radius, double expected, double tolerance)
+{
+ typedef ggl::strategy::distance::cross_track
+ <
+ Point,
+ Point
+ > strategy_type;
+
+
+ BOOST_CONCEPT_ASSERT
+ (
+ (ggl::concept::PointSegmentDistanceStrategy<strategy_type>)
+ );
+
+
+ strategy_type strategy(radius);
+
+ Point p1, p2, p3;
+ ggl::assign(p1, lon1, lat1);
+ ggl::assign(p2, lon2, lat2);
+ ggl::assign(p3, lon3, lat3);
+ typename strategy_type::return_type d = strategy.apply(p1, p2, p3);
+
+ BOOST_CHECK_CLOSE((double) d, expected, tolerance);
+}
+
+template <typename Point>
+void test_all()
+{
+ double const average_earth_radius = 6372795.0;
+
+ // distance (Paris <-> Amsterdam/Barcelona), ~87 km
+ // should be is equal
+ // to distance (Paris <-> Barcelona/Amsterdam)
+ double const p_to_ab = 86.8 * 1000.0;
+ test_distance<Point>(2, 48, 4, 52, 2, 41, average_earth_radius, p_to_ab, 1.0);
+ test_distance<Point>(2, 48, 2, 41, 4, 52, average_earth_radius, p_to_ab, 1.0);
+}
+
+int test_main(int, char* [])
+{
+ test_all<ggl::point<double, 2, ggl::cs::spherical<ggl::degree> > >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/strategies/haversine.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/strategies/haversine.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,81 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+#include <boost/concept/requires.hpp>
+#include <boost/concept_check.hpp>
+
+#include <ggl/algorithms/assign.hpp>
+#include <ggl/strategies/spherical/distance_haversine.hpp>
+#include <ggl/strategies/concepts/distance_concept.hpp>
+
+
+#include <ggl/geometries/point.hpp>
+
+
+template <typename Point>
+struct test_distance
+{
+ typedef ggl::strategy::distance::haversine
+ <
+ Point,
+ Point
+ > haversine_type;
+
+
+ BOOST_CONCEPT_ASSERT
+ (
+ (ggl::concept::PointDistanceStrategy<haversine_type>)
+ );
+
+
+ static void test(double lon1, double lat1, double lon2, double lat2,
+ double radius, double expected, double tolerance)
+ {
+ haversine_type strategy(radius);
+
+ Point p1, p2;
+ ggl::assign(p1, lon1, lat1);
+ ggl::assign(p2, lon2, lat2);
+ typename haversine_type::return_type d1 = strategy.apply(p1, p2);
+
+ BOOST_CHECK_CLOSE((double) d1, expected, tolerance);
+ }
+};
+
+template <typename Point>
+void test_all()
+{
+ double const average_earth_radius = 6372795.0;
+
+ // earth to unit-sphere -> divide by earth circumference, then it is from 0-1,
+ // then multiply with 2 PI, so effectively just divide by earth radius
+ double e2u = 1.0 / average_earth_radius;
+
+ // ~ Amsterdam/Paris
+ double const a_p = 467.2704 * 1000.0;
+ test_distance<Point>::test(4, 52, 2, 48, average_earth_radius, a_p, 1.0);
+ test_distance<Point>::test(2, 48, 4, 52, average_earth_radius, a_p, 1.0);
+ test_distance<Point>::test(4, 52, 2, 48, 1.0, a_p * e2u, 0.001);
+
+ // ~ Amsterdam/Barcelona
+ double const a_b = 1232.9065 * 1000.0;
+ test_distance<Point>::test(4, 52, 2, 41, average_earth_radius, a_b, 1.0);
+ test_distance<Point>::test(2, 41, 4, 52, average_earth_radius, a_b, 1.0);
+ test_distance<Point>::test(4, 52, 2, 41, 1.0, a_b * e2u, 0.001);
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<ggl::point<double, 2, ggl::cs::spherical<ggl::degree> > >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/strategies/projected_point.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/strategies/projected_point.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,99 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/strategies/cartesian/distance_projected_point.hpp>
+#include <ggl/strategies/concepts/distance_concept.hpp>
+
+#include <ggl/extensions/gis/io/wkt/read_wkt.hpp>
+
+
+#include <ggl/geometries/point.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+#include <test_common/test_point.hpp>
+
+
+template <typename P1, typename P2>
+void test_all_2d()
+{
+ P1 p;
+ P2 sp1, sp2;
+ ggl::read_wkt("POINT(1 1)", p);
+ ggl::read_wkt("POINT(0 0)", sp1);
+ ggl::read_wkt("POINT(2 3)", sp2);
+
+ typedef typename ggl::strategy::distance::xy_point_segment
+ <
+ P1,
+ P2
+ > strategy_type;
+
+ BOOST_CONCEPT_ASSERT
+ (
+ (ggl::concept::PointSegmentDistanceStrategy<strategy_type>)
+ );
+
+
+ strategy_type strategy;
+ std::cout << strategy.apply(p, sp1, sp2) << std::endl;
+}
+
+
+template <typename P>
+void test_all_2d()
+{
+ using ggl::point;
+ using ggl::cs::cartesian;
+
+ //test_all_2d<P, int[2]>();
+ //test_all_2d<P, float[2]>();
+ //test_all_2d<P, double[2]>();
+ //test_all_2d<P, test::test_point>();
+ //test_all_2d<P, point<int, 2, cartesian> >();
+ //test_all_2d<P, point<float, 2, cartesian> >();
+ test_all_2d<P, point<double, 2, cartesian> >();
+}
+
+int test_main(int, char* [])
+{
+ using ggl::point;
+ using ggl::cs::cartesian;
+
+#if ! defined(_MSC_VER)
+ test_all_2d<int[2]>();
+ test_all_2d<float[2]>();
+ test_all_2d<double[2]>();
+#endif
+ //test_all_2d<test::test_point>();
+
+#if ! defined(_MSC_VER)
+ test_all_2d<point<int, 2, cartesian> >();
+#endif
+ test_all_2d<point<float, 2, cartesian> >();
+ test_all_2d<point<double, 2, cartesian> >();
+
+
+#if defined(HAVE_CLN)
+ // combination of CLN with normal types
+ typedef boost::numeric_adaptor::cln_value_type cln_type;
+ typedef point<cln_type, 2, cartesian> cln_point;
+ test_all_2d<cln_point>();
+
+#endif
+#if defined(HAVE_GMP)
+ typedef boost::numeric_adaptor::gmp_value_type gmp_type;
+ typedef point<gmp_type, 2, cartesian> gmp_point;
+ test_all_2d<gmp_point>();
+
+#endif
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/strategies/pythagoras.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/strategies/pythagoras.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,187 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/assign.hpp>
+#include <ggl/strategies/cartesian/distance_pythagoras.hpp>
+
+
+#include <ggl/geometries/point.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+#include <test_common/test_point.hpp>
+
+template <typename P1, typename P2>
+void test_null_distance_3d()
+{
+ typename ggl::strategy::distance::pythagoras<P1, P2> pythagoras;
+
+ P1 p1;
+ ggl::assign(p1, 1, 2, 3);
+ P2 p2;
+ ggl::assign(p2, 1, 2, 3);
+ BOOST_CHECK_EQUAL(double(
+ typename ggl::coordinate_type<P1>::type(pythagoras.apply(p1, p2))), 0);
+}
+
+template <typename P1, typename P2>
+void test_axis_3d()
+{
+ ggl::strategy::distance::pythagoras<P1, P2> pythagoras;
+
+ P1 p1;
+ ggl::assign(p1, 0, 0, 0);
+
+ P2 p2;
+ ggl::assign(p2, 1, 0, 0);
+ BOOST_CHECK_EQUAL(double(
+ typename ggl::coordinate_type<P1>::type(pythagoras.apply(p1, p2))), 1);
+ ggl::assign(p2, 0, 1, 0);
+ BOOST_CHECK_EQUAL(double(
+ typename ggl::coordinate_type<P1>::type(pythagoras.apply(p1, p2))), 1);
+ ggl::assign(p2, 0, 0, 1);
+ BOOST_CHECK_EQUAL(double(
+ typename ggl::coordinate_type<P1>::type(pythagoras.apply(p1, p2))), 1);
+}
+
+template <typename P1, typename P2>
+void test_arbitrary_3d()
+{
+ ggl::strategy::distance::pythagoras<P1, P2> pythagoras;
+
+ P1 p1;
+ ggl::assign(p1, 1, 2, 3);
+ P2 p2;
+ ggl::assign(p2, 9, 8, 7);
+ BOOST_CHECK_CLOSE(double(
+ typename ggl::coordinate_type<P1>::type(pythagoras.apply(p1, p2))),
+ sqrt((double)116), 0.001);
+}
+
+template <typename CoordinateType, typename CalculationType, typename AssignType>
+void test_big_2d_with(AssignType const& x1, AssignType const& y1,
+ AssignType const& x2, AssignType const& y2)
+{
+ typedef ggl::point<CoordinateType, 2, ggl::cs::cartesian> point_type;
+ typedef ggl::strategy::distance::pythagoras
+ <
+ point_type,
+ point_type,
+ CalculationType
+ > pythagoras_type;
+
+ pythagoras_type pythagoras;
+
+
+ point_type p1, p2;
+ ggl::assign(p1, x1, y1);
+ ggl::assign(p2, x2, y2);
+ typename pythagoras_type::return_type d1 = pythagoras.apply(p1, p2);
+
+ /*
+ std::cout << typeid(CalculationType).name()
+ << " " << std::fixed << std::setprecision(20) << d1.squared_value()
+ << std::endl << std::endl;
+ */
+
+ CalculationType d2 = d1;
+
+ BOOST_CHECK_CLOSE((double) d2,
+ 1076554.5485833955678294387789057, 0.001);
+}
+
+template <typename CoordinateType, typename CalculationType>
+void test_big_2d()
+{
+ test_big_2d_with<CoordinateType, CalculationType>
+ (123456.78900001, 234567.89100001,
+ 987654.32100001, 876543.21900001);
+}
+
+template <typename CoordinateType, typename CalculationType>
+void test_big_2d_string()
+{
+ test_big_2d_with<CoordinateType, CalculationType>
+ ("123456.78900001", "234567.89100001",
+ "987654.32100001", "876543.21900001");
+}
+
+
+
+template <typename P1, typename P2>
+void test_all_3d()
+{
+return;
+ test_null_distance_3d<P1, P2>();
+ test_axis_3d<P1, P2>();
+ test_arbitrary_3d<P1, P2>();
+}
+
+template <typename P>
+void test_all_3d()
+{
+ using ggl::point;
+ using ggl::cs::cartesian;
+
+ test_all_3d<P, int[3]>();
+ test_all_3d<P, float[3]>();
+ test_all_3d<P, double[3]>();
+ test_all_3d<P, test::test_point>();
+ test_all_3d<P, point<int, 3, cartesian> >();
+ test_all_3d<P, point<float, 3, cartesian> >();
+ test_all_3d<P, point<double, 3, cartesian> >();
+}
+
+int test_main(int, char* [])
+{
+ using ggl::point;
+ using ggl::cs::cartesian;
+
+#if ! defined(_MSC_VER)
+ test_all_3d<int[3]>();
+#endif
+ test_all_3d<float[3]>();
+ test_all_3d<double[3]>();
+ test_all_3d<test::test_point>();
+#if ! defined(_MSC_VER)
+ test_all_3d<point<int, 3, cartesian> >();
+#endif
+ test_all_3d<point<float, 3, cartesian> >();
+ test_all_3d<point<double, 3, cartesian> >();
+
+ test_big_2d<float, float>();
+ test_big_2d<double, double>();
+ test_big_2d<long double, long double>();
+ test_big_2d<float, long double>();
+
+
+#if defined(HAVE_CLN)
+ // combination of CLN with normal types
+ typedef boost::numeric_adaptor::cln_value_type cln_type;
+ typedef point<cln_type, 3, cartesian> cln_point;
+ test_all_3d<cln_point>();
+ test_all_3d<cln_point, cln_point>();
+
+ test_big_2d<cln_type, cln_type>();
+ test_big_2d_string<cln_type, cln_type>();
+
+#endif
+#if defined(HAVE_GMP)
+ typedef boost::numeric_adaptor::gmp_value_type gmp_type;
+ typedef point<gmp_type, 3, cartesian> gmp_point;
+ test_all_3d<gmp_point>();
+ test_all_3d<gmp_point, gmp_point>();
+
+ test_big_2d<gmp_type, gmp_type>();
+ test_big_2d_string<gmp_type, gmp_type>();
+#endif
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/strategies/segment_intersection.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/strategies/segment_intersection.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,362 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#if defined(_MSC_VER)
+// We deliberately mix float/double's here so turn off warning
+#pragma warning( disable : 4244 )
+#endif // defined(_MSC_VER)
+
+#define HAVE_MATRIX_AS_STRING
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/algorithms/assign.hpp>
+
+#include <ggl/strategies/cartesian/cart_intersect.hpp>
+#include <ggl/strategies/intersection_result.hpp>
+
+#include <ggl/policies/relate/intersection_points.hpp>
+#include <ggl/policies/relate/direction.hpp>
+#include <ggl/policies/relate/de9im.hpp>
+#include <ggl/policies/relate/tupled.hpp>
+
+#include <ggl/algorithms/intersection.hpp>
+
+
+#include <ggl/geometries/point.hpp>
+#include <ggl/geometries/segment.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+
+
+
+template <typename R>
+void print_is(R const& is)
+{
+#ifdef REPORT
+ for (int i = 0; i < is.count; i++)
+ {
+ std::cout
+ << " (" << ggl::get<0>(is.intersections[i])
+ << "," << ggl::get<1>(is.intersections[i])
+ << ")";
+ }
+#endif
+}
+
+void print_im(ggl::de9im const& im)
+{
+#ifdef REPORT
+ if (im.equals()) std::cout << " EQUALS";
+ if (im.disjoint()) std::cout << " DISJOINT";
+ if (im.intersects()) std::cout << " INTERSECTS";
+ if (im.touches()) std::cout << " TOUCHES";
+ if (im.crosses()) std::cout << " CROSSES";
+ if (im.overlaps()) std::cout << " OVERLAPS";
+ if (im.within()) std::cout << " WITHIN";
+ if (im.contains()) std::cout << " CONTAINS";
+
+ //std::cout << " ra=" << im.ra << " rb=" << im.rb;
+#endif
+}
+
+
+template <typename P>
+static void test_segment_intersection(int caseno,
+ int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4,
+ std::string const& expected_matrix,
+ std::string const& expected_characteristic,
+ std::string const& expected_direction_a = "",
+ std::string const& expected_direction_b = "",
+ int expected_x1 = -99, int expected_y1 = -99,
+ int expected_x2 = -99, int expected_y2 = -99)
+{
+ using namespace ggl;
+
+#ifdef REPORT
+ std::cout << "CASE " << caseno << std::endl;
+#endif
+
+ typedef typename ggl::coordinate_type<P>::type coordinate_type;
+ typedef segment<const P> segment_type;
+
+ P p1, p2, p3, p4;
+ ggl::assign(p1, x1, y1);
+ ggl::assign(p2, x2, y2);
+ ggl::assign(p3, x3, y3);
+ ggl::assign(p4, x4, y4);
+
+ segment_type s12(p1,p2);
+ segment_type s34(p3,p4);
+
+ // Get the intersection point (or two points)
+ segment_intersection_points<P> is
+ = strategy::intersection::relate_cartesian_segments
+ <
+ policies::relate::segments_intersection_points
+ <
+ segment_type,
+ segment_type,
+ segment_intersection_points<P>
+ >
+ >::relate(s12, s34);
+
+ // Get the Dimension Extended 9 Intersection Matrix (de9im) for Segments
+ // (this one is extended by GGL having opposite)
+ de9im_segment matrix = strategy::intersection::relate_cartesian_segments
+ <
+ policies::relate::segments_de9im<segment_type, segment_type>
+ >::relate(s12, s34);
+
+ // Get just a character for Left/Right/intersects/etc, purpose is more for debugging
+ policies::relate::direction_type dir = strategy::intersection::relate_cartesian_segments
+ <
+ policies::relate::segments_direction<segment_type, segment_type>
+ >::relate(s12, s34);
+
+ int expected_count = 0;
+
+ if (expected_x1 != -99 && expected_y1 != -99)
+ {
+ expected_count++;
+
+ BOOST_CHECK(is.count >= 1);
+ BOOST_CHECK_CLOSE(ggl::get<0>(is.intersections[0]),
+ coordinate_type(expected_x1), 0.001);
+ BOOST_CHECK_CLOSE(ggl::get<1>(is.intersections[0]),
+ coordinate_type(expected_y1), 0.001);
+ }
+ if (expected_x2 != -99 && expected_y2 != -99)
+ {
+ expected_count++;
+
+ BOOST_CHECK(is.count >= 2);
+ BOOST_CHECK_CLOSE(ggl::get<0>(is.intersections[1]),
+ coordinate_type(expected_x2), 0.001);
+ BOOST_CHECK_CLOSE(ggl::get<1>(is.intersections[1]),
+ coordinate_type(expected_y2), 0.001);
+ }
+ BOOST_CHECK_EQUAL(is.count, expected_count);
+
+ BOOST_CHECK_EQUAL(expected_matrix, matrix.matrix_as_string());
+
+ std::string characteristic;
+ characteristic += dir.how;
+
+ BOOST_CHECK_EQUAL(characteristic, expected_characteristic);
+
+ if (!expected_direction_a.empty())
+ {
+ BOOST_CHECK_EQUAL(dir.dir_a == 1 ? "L"
+ : dir.dir_a == -1 ? "R"
+ : "-", expected_direction_a);
+ }
+ if (!expected_direction_b.empty())
+ {
+ BOOST_CHECK_EQUAL(dir.dir_b == 1 ? "L"
+ : dir.dir_b == -1 ? "R"
+ : "-", expected_direction_b);
+ }
+
+
+
+ // Things can also be used together
+ // -> intersection is only once calculated, two results
+ typedef boost::tuple
+ <
+ de9im_segment,
+ policies::relate::direction_type
+ > tup;
+
+ tup t = strategy::intersection::relate_cartesian_segments
+ <
+ policies::relate::segments_tupled
+ <
+ policies::relate::segments_de9im<segment_type, segment_type>,
+ policies::relate::segments_direction<segment_type, segment_type>
+ >
+ >::relate(segment_type(p1,p2), segment_type(p3,p4));
+
+
+ BOOST_CHECK_EQUAL(t.get<0>().matrix_as_string(), matrix.matrix_as_string());
+ BOOST_CHECK_EQUAL(t.get<1>().how, dir.how);
+
+
+#ifdef REPORT
+ std::cout << std::endl << "\t" << matrix.as_string() << " ";
+ std::cout << "METHOD=" << c << " ";
+ print_is(is);
+ print_im(matrix);
+ std::cout << std::endl;
+#endif
+
+ /*
+ To check with a spatial database: issue this statement
+ std::cout << "select relate("
+ << "GeomFromText(LINESTRING('" << x1 << " " << y1 << "," << x2 << " " << y2 << ")')"
+ << ", "
+ << "GeomFromText(LINESTRING('" << x3 << " " << y3 << "," << x4 << " " << y4 << ")')"
+ << ");"
+ << std::endl;
+ */
+
+
+ // Now use generic intersection.
+ std::vector<P> out;
+ ggl::intersection_inserter<P>(s12, s34, std::back_inserter(out));
+
+ BOOST_CHECK_EQUAL(boost::size(out), expected_count);
+
+ if (expected_x1 != -99 && expected_y1 != -99
+ && is.count >= 1
+ && boost::size(out) >= 1)
+ {
+ BOOST_CHECK_CLOSE(ggl::get<0>(out[0]),
+ coordinate_type(expected_x1), 0.001);
+ BOOST_CHECK_CLOSE(ggl::get<1>(out[0]),
+ coordinate_type(expected_y1), 0.001);
+ }
+ if (expected_x2 != -99 && expected_y2 != -99
+ && is.count >= 2
+ && boost::size(out) >= 2)
+ {
+ BOOST_CHECK_CLOSE(ggl::get<0>(out[1]),
+ coordinate_type(expected_x2), 0.001);
+ BOOST_CHECK_CLOSE(ggl::get<1>(out[1]),
+ coordinate_type(expected_y2), 0.001);
+ }
+}
+
+
+template <typename P>
+void test_all()
+{
+ test_segment_intersection<P>( 1, 0,2, 2,0, 0,0, 2,2, "0-1--0102",
+ "i", "R", "L", 1, 1);
+ test_segment_intersection<P>( 2, 2,2, 3,1, 0,0, 2,2, "--1-00102",
+ "a", "R", "R", 2, 2);
+ test_segment_intersection<P>( 3, 3,1, 2,2, 0,0, 2,2, "--1-00102",
+ "t", "R", "L", 2, 2);
+ test_segment_intersection<P>( 4, 0,2, 1,1, 0,0, 2,2, "--10-0102",
+ "m", "L", "L", 1, 1);
+#ifdef REPORT
+ std::cout << std::endl;
+#endif
+
+ test_segment_intersection<P>( 5, 1,1, 0,2, 0,0, 2,2, "--10-0102",
+ "s", "L", "R", 1, 1);
+ test_segment_intersection<P>( 6, 0,2, 2,0, 0,0, 1,1, "-01--0102",
+ "m", "R", "R", 1, 1);
+ test_segment_intersection<P>( 7, 2,0, 0,2, 0,0, 1,1, "-01--0102",
+ "m", "L", "L", 1, 1);
+ test_segment_intersection<P>( 8, 2,3, 3,2, 0,0, 2,2, "--1--0102",
+ "d");
+#ifdef REPORT
+ std::cout << std::endl;
+#endif
+
+ test_segment_intersection<P>( 9, 0,0, 2,2, 0,0, 2,2, "1---0---2",
+ "e", "-", "-", 0, 0, 2, 2);
+ test_segment_intersection<P>(10, 2,2, 0,0, 0,0, 2,2, "1---0---2",
+ "e", "-", "-", 2, 2, 0, 0);
+ test_segment_intersection<P>(11, 1,1, 3,3, 0,0, 2,2, "1010-0102",
+ "c", "-", "-", 1, 1, 2, 2);
+ test_segment_intersection<P>(12, 3,3, 1,1, 0,0, 2,2, "1010-0102",
+ "c", "-", "-", 1, 1, 2, 2);
+#ifdef REPORT
+ std::cout << std::endl;
+#endif
+
+ test_segment_intersection<P>(13, 0,2, 2,2, 2,1, 2,3, "--10-0102",
+ "m", "L", "L", 2, 2);
+ test_segment_intersection<P>(14, 2,2, 2,4, 2,0, 2,2, "--1-00102",
+ "C", "-", "-", 2, 2);
+ test_segment_intersection<P>(15, 2,2, 2,4, 2,0, 2,1, "--1--0102",
+ "d");
+ test_segment_intersection<P>(16, 2,4, 2,2, 2,0, 2,1, "--1--0102",
+ "d");
+
+ test_segment_intersection<P>(17, 2,1, 2,3, 2,2, 2,4, "1010-0102",
+ "c", "-", "-", 2, 3, 2, 2);
+ test_segment_intersection<P>(18, 2,3, 2,1, 2,2, 2,4, "1010-0102",
+ "c", "-", "-", 2, 3, 2, 2);
+ test_segment_intersection<P>(19, 0,2, 2,2, 4,2, 2,2, "--1-00102",
+ "C", "-", "-", 2, 2);
+ test_segment_intersection<P>(20, 0,2, 2,2, 2,2, 4,2, "--1-00102",
+ "C", "-", "-", 2, 2);
+
+ test_segment_intersection<P>(21, 1,2, 3,2, 2,1, 2,3, "0-1--0102",
+ "i", "R", "L", 2, 2);
+ test_segment_intersection<P>(22, 2,4, 2,1, 2,1, 2,3, "101-00--2",
+ "c", "-", "-", 2, 1, 2, 3);
+ test_segment_intersection<P>(23, 2,4, 2,1, 2,3, 2,1, "101-00--2",
+ "c", "-", "-", 2, 3, 2, 1);
+ test_segment_intersection<P>(24, 1,1, 3,3, 0,0, 3,3, "1--00-102",
+ "c", "-", "-", 1, 1, 3, 3);
+
+ test_segment_intersection<P>(25, 2,0, 2,4, 2,1, 2,3, "101--0--2",
+ "c", "-", "-", 2, 1, 2, 3);
+ test_segment_intersection<P>(26, 2,0, 2,4, 2,3, 2,1, "101--0--2",
+ "c", "-", "-", 2, 3, 2, 1);
+ test_segment_intersection<P>(27, 0,0, 4,4, 1,1, 3,3, "101--0--2",
+ "c", "-", "-", 1, 1, 3, 3);
+ test_segment_intersection<P>(28, 0,0, 4,4, 3,3, 1,1, "101--0--2",
+ "c", "-", "-", 3, 3, 1, 1);
+
+ test_segment_intersection<P>(29, 1,1, 3,3, 0,0, 4,4, "1--0--102",
+ "c", "-", "-", 1, 1, 3, 3);
+ test_segment_intersection<P>(30, 0,0, 2,2, 2,2, 3,1, "--1-00102",
+ "a", "R", "R", 2, 2);
+ test_segment_intersection<P>(31, 0,0, 2,2, 2,2, 1,3, "--1-00102",
+ "a", "L", "L", 2, 2);
+ test_segment_intersection<P>(32, 0,0, 2,2, 1,1, 2,0, "-01--0102",
+ "s", "L", "R", 1, 1);
+
+ test_segment_intersection<P>(33, 0,0, 2,2, 1,1, 0,2, "-01--0102",
+ "s", "R", "L", 1, 1);
+ test_segment_intersection<P>(34, 2,2, 1,3, 0,0, 2,2, "--1-00102",
+ "a", "L", "L", 2, 2);
+ test_segment_intersection<P>(35, 2,2, 3,1, 0,0, 2,2, "--1-00102",
+ "a", "R", "R", 2, 2);
+ test_segment_intersection<P>(36, 0,0, 2,2, 0,2, 1,1, "-01--0102",
+ "m", "L", "L", 1, 1);
+
+ test_segment_intersection<P>(37, 0,0, 2,2, 2,0, 1,1, "-01--0102",
+ "m", "R", "R", 1, 1);
+ test_segment_intersection<P>(38, 1,1, 0,2, 0,0, 2,2, "--10-0102",
+ "s", "L", "R", 1, 1);
+ test_segment_intersection<P>(39, 1,1, 2,0, 0,0, 2,2, "--10-0102",
+ "s", "R", "L", 1, 1);
+ test_segment_intersection<P>(40, 2,0, 1,1, 0,0, 2,2, "--10-0102",
+ "m", "R", "R", 1, 1);
+
+ test_segment_intersection<P>(41, 1,2, 0,2, 2,2, 0,2, "1--00-102",
+ "c", "-", "-", 1, 2, 0, 2);
+ test_segment_intersection<P>(42, 2,1, 1,1, 2,2, 0,2, "--1--0102",
+ "p");
+ test_segment_intersection<P>(43, 4,1, 3,1, 2,2, 0,2, "--1--0102",
+ "p");
+ test_segment_intersection<P>(44, 4,2, 3,2, 2,2, 0,2, "--1--0102",
+ "d");
+
+ test_segment_intersection<P>(45, 2,0, 0,2, 0,0, 2,2, "0-1--0102",
+ "i", "L", "R", 1, 1);
+
+ // In figure: times 2
+ test_segment_intersection<P>(46, 8,2, 4,6, 0,0, 8, 8, "0-1--0102",
+ "i", "L", "R", 5, 5);
+}
+
+int test_main(int, char* [])
+{
+ test_all<boost::tuple<double, double> >();
+ test_all<ggl::point<float, 2, ggl::cs::cartesian> >();
+ test_all<ggl::point<double, 2, ggl::cs::cartesian> >();
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/strategies/transformer.cpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/strategies/transformer.cpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,106 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <ggl_test_common.hpp>
+
+#include <ggl/strategies/transform/inverse_transformer.hpp>
+#include <ggl/strategies/transform/map_transformer.hpp>
+#include <ggl/strategies/transform/matrix_transformers.hpp>
+
+
+#include <ggl/algorithms/make.hpp>
+#include <ggl/algorithms/transform.hpp>
+
+#include <ggl/geometries/point.hpp>
+#include <ggl/geometries/adapted/c_array_cartesian.hpp>
+#include <ggl/geometries/adapted/tuple_cartesian.hpp>
+
+
+
+
+template <typename P, typename T>
+void check_inverse(P const& p, T const& trans)
+{
+ ggl::strategy::transform::inverse_transformer<P, P> inverse(trans);
+
+ P i;
+ ggl::transform(p, i, inverse);
+
+ BOOST_CHECK_CLOSE(double(ggl::get<0>(i)), 1.0, 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<1>(i)), 1.0, 0.001);
+}
+
+template <typename P>
+void test_all()
+{
+ P p;
+ ggl::assign(p, 1, 1);
+
+ {
+ ggl::strategy::transform::translate_transformer<P, P> trans(1, 1);
+ P tp;
+ ggl::transform(p, tp, trans);
+
+ BOOST_CHECK_CLOSE(double(ggl::get<0>(tp)), 2.0, 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<1>(tp)), 2.0, 0.001);
+
+ check_inverse(tp, trans);
+ }
+
+ {
+ ggl::strategy::transform::scale_transformer<P, P> trans(10, 10);
+ P tp;
+ ggl::transform(p, tp, trans);
+
+ BOOST_CHECK_CLOSE(double(ggl::get<0>(tp)), 10.0, 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<1>(tp)), 10.0, 0.001);
+
+ check_inverse(tp, trans);
+ }
+
+ {
+ ggl::strategy::transform::rotate_transformer<P, P, ggl::degree> trans(90.0);
+ P tp;
+ ggl::transform(p, tp, trans);
+
+ BOOST_CHECK_CLOSE(double(ggl::get<0>(tp)), 1.0, 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<1>(tp)), -1.0, 0.001);
+ check_inverse(tp, trans);
+ }
+
+ {
+ // Map from 0,0,2,2 to 0,0,500,500
+ ggl::strategy::transform::map_transformer<P, P, false> trans
+ (
+ 0.0, 0.0, 2.0, 2.0, 500, 500
+ );
+ P tp;
+ ggl::transform(p, tp, trans);
+
+ BOOST_CHECK_CLOSE(double(ggl::get<0>(tp)), 250.0, 0.001);
+ BOOST_CHECK_CLOSE(double(ggl::get<1>(tp)), 250.0, 0.001);
+
+ check_inverse(tp, trans);
+ }
+}
+
+int test_main(int, char* [])
+{
+ //test_all<int[2]>();
+ test_all<float[2]>();
+ test_all<double[2]>();
+
+ test_all<boost::tuple<float, float> >();
+
+ //test_all<point<int, 2, cs::cartesian> >();
+ test_all<ggl::point<float, 2, ggl::cs::cartesian> >();
+ test_all<ggl::point<double, 2, ggl::cs::cartesian> >();
+
+ return 0;
+}
Added: sandbox/ggl/formal_review/libs/ggl/test/test_common/test_point.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/test_common/test_point.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,90 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#ifndef GGL_TEST_TEST_COMMON_TEST_POINT_HPP
+#define GGL_TEST_TEST_COMMON_TEST_POINT_HPP
+
+#include <ggl/core/access.hpp>
+#include <ggl/core/coordinate_type.hpp>
+#include <ggl/core/coordinate_system.hpp>
+#include <ggl/core/coordinate_dimension.hpp>
+#include <ggl/core/cs.hpp>
+#include <ggl/core/tag.hpp>
+
+
+namespace test
+{
+
+// Test point class
+
+struct test_point
+{
+ float c1, c2, c3;
+};
+
+
+} // namespace test
+
+
+namespace ggl { namespace traits {
+
+template<>
+struct tag<test::test_point> { typedef point_tag type; };
+
+template<>
+struct coordinate_type<test::test_point> { typedef float type; };
+
+template<>
+struct coordinate_system<test::test_point> { typedef cs::cartesian type; };
+
+template<>
+struct dimension<test::test_point>: boost::mpl::int_<3> {};
+
+template<> struct access<test::test_point, 0>
+{
+ static inline const float& get(const test::test_point& p)
+ {
+ return p.c1;
+ }
+
+ static inline void set(test::test_point& p, const float& value)
+ {
+ p.c1 = value;
+ }
+};
+
+template<> struct access<test::test_point, 1>
+{
+ static inline const float& get(const test::test_point& p)
+ {
+ return p.c2;
+ }
+
+ static inline void set(test::test_point& p, const float& value)
+ {
+ p.c2 = value;
+ }
+};
+
+template<> struct access<test::test_point, 2>
+{
+ static inline const float& get(const test::test_point& p)
+ {
+ return p.c3;
+ }
+
+ static inline void set(test::test_point& p, const float& value)
+ {
+ p.c3 = value;
+ }
+};
+
+}} // namespace ggl::traits
+
+#endif // GGL_TEST_TEST_COMMON_TEST_POINT_HPP
Added: sandbox/ggl/formal_review/libs/ggl/test/test_common/with_pointer.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/test_common/with_pointer.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,81 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#ifndef GGL_TEST_COMMON_WITH_POINTER_HPP
+#define GGL_TEST_COMMON_WITH_POINTER_HPP
+
+
+#include <ggl/core/access.hpp>
+#include <ggl/core/coordinate_type.hpp>
+#include <ggl/core/coordinate_system.hpp>
+#include <ggl/core/coordinate_dimension.hpp>
+#include <ggl/core/cs.hpp>
+#include <ggl/core/tag.hpp>
+
+
+namespace test
+{
+
+// Sample point, having x/y
+struct test_point_xy
+{
+ float x,y;
+};
+
+}
+
+
+namespace ggl { namespace traits {
+
+template<> struct tag<test::test_point_xy*>
+{ typedef point_tag type; };
+
+template<> struct coordinate_type<test::test_point_xy*>
+{ typedef double type; };
+
+template<> struct coordinate_system<test::test_point_xy*>
+{ typedef cs::cartesian type; };
+
+template<> struct dimension<test::test_point_xy*> : boost::mpl::int_<2> {};
+
+template<>
+struct access<test::test_point_xy*, 0>
+{
+ static double get(test::test_point_xy const* p)
+ {
+ return p->x;
+ }
+
+ static void set(test::test_point_xy* p, double const& value)
+ {
+ p->x = value;
+ }
+
+};
+
+
+template<>
+struct access<test::test_point_xy*, 1>
+{
+ static double get(test::test_point_xy const* p)
+ {
+ return p->y;
+ }
+
+ static void set(test::test_point_xy* p, double const& value)
+ {
+ p->y = value;
+ }
+
+};
+
+}} // namespace ggl::traits
+
+
+#endif // #ifndef GGL_TEST_COMMON_WITH_POINTER_HPP
Added: sandbox/ggl/formal_review/libs/ggl/test/test_util/svg_mapper.hpp
==============================================================================
--- (empty file)
+++ sandbox/ggl/formal_review/libs/ggl/test/test_util/svg_mapper.hpp 2009-11-04 12:13:47 EST (Wed, 04 Nov 2009)
@@ -0,0 +1,210 @@
+// Generic Geometry Library test file
+//
+// Copyright Barend Gehrels, 1995-2009, Geodan Holding B.V. Amsterdam, the Netherlands.
+// Copyright Bruno Lalande 2008, 2009
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef GGL_TEST_UTIL_SVG_MAPPER_HPP
+#define GGL_TEST_UTIL_SVG_MAPPER_HPP
+
+#include <cstdio>
+
+#include <ggl/ggl.hpp>
+#include <ggl/algorithms/transform.hpp>
+#include <ggl/geometries/box.hpp>
+#include <ggl/geometries/linestring.hpp>
+#include <ggl/geometries/linear_ring.hpp>
+#include <ggl/geometries/polygon.hpp>
+
+#include <ggl/multi/core/tags.hpp>
+
+#include <ggl/extensions/io/svg/write_svg.hpp>
+
+
+#ifndef DOXYGEN_NO_DISPATCH
+namespace dispatch
+{
+
+template <typename GeometryTag, bool IsMulti, typename Geometry>
+struct svg_map
+{
+};
+
+
+template <typename Point>
+struct svg_map<ggl::point_tag, false, Point>
+{
+ template <typename TransformStrategy>
+ static inline void apply(std::ostream& stream,
+ std::string const& style, int size,
+ Point const& point, TransformStrategy const& strategy)
+ {
+ ggl::point_xy<int> p;
+ ggl::transform(point, p, strategy);
+ stream << ggl::svg(p, style, size) << std::endl;
+ }
+};
+
+template <typename Box>
+struct svg_map<ggl::box_tag, false, Box>
+{
+ template <typename TransformStrategy>
+ static inline void apply(std::ostream& stream,
+ std::string const& style, int size,
+ Box const& box, TransformStrategy const& strategy)
+ {
+
+ typename ggl::point_type<Box>::type p1, p2;
+ ggl::set<0>(p1, ggl::get<ggl::min_corner, 0>(box));
+ ggl::set<1>(p1, ggl::get<ggl::min_corner, 1>(box));
+ ggl::set<0>(p2, ggl::get<ggl::max_corner, 0>(box));
+ ggl::set<1>(p2, ggl::get<ggl::max_corner, 1>(box));
+
+ ggl::box<ggl::point_xy<int> > ibox;
+ ggl::transform(box, ibox, strategy);
+
+ stream << ggl::svg(ibox, style, size) << std::endl;
+ }
+};
+
+
+template <typename Range1, typename Range2>
+struct svg_map_range
+{
+ template <typename TransformStrategy>
+ static inline void apply(std::ostream& stream,
+ std::string const& style, int size,
+ Range1 const& range, TransformStrategy const& strategy)
+ {
+ Range2 irange;
+ ggl::transform(range, irange, strategy);
+ stream << ggl::svg(irange, style, size) << std::endl;
+ }
+};
+
+
+
+template <typename Ring>
+struct svg_map<ggl::ring_tag, false, Ring>
+ : svg_map_range<Ring, ggl::linear_ring<ggl::point_xy<int> > >
+{};
+
+template <typename Linestring>
+struct svg_map<ggl::linestring_tag, false, Linestring>
+ : svg_map_range<Linestring, ggl::linestring<ggl::point_xy<int> > >
+{};
+
+
+template <typename Polygon>
+struct svg_map<ggl::polygon_tag, false, Polygon>
+{
+ template <typename TransformStrategy>
+ static inline void apply(std::ostream& stream,
+ std::string const& style, int size,
+ Polygon const& polygon, TransformStrategy const& strategy)
+ {
+ ggl::polygon<ggl::point_xy<int> > ipoly;
+ ggl::transform(polygon, ipoly, strategy);
+ stream << ggl::svg(ipoly, style, size) << std::endl;
+ }
+};
+
+template <typename Tag, typename Multi>
+struct svg_map<Tag, true, Multi>
+{
+ template <typename TransformStrategy>
+ static inline void apply(std::ostream& stream,
+ std::string const& style, int size,
+ Multi const& multi, TransformStrategy const& strategy)
+ {
+ for (typename boost::range_const_iterator<Multi>::type it
+ = boost::begin(multi);
+ it != boost::end(multi);
+ ++it)
+ {
+ svg_map
+ <
+ typename ggl::single_tag<Tag>::type,
+ false,
+ typename boost::range_value<Multi>::type
+ >::apply(stream, style, size, *it, strategy);
+ }
+ }
+};
+
+
+
+} // namespace dispatch
+#endif
+
+
+
+template <typename Geometry, typename TransformStrategy>
+inline void svg_map(std::ostream& stream,
+ std::string const& style, int size,
+ Geometry const& geometry, TransformStrategy const& strategy)
+{
+ dispatch::svg_map
+ <
+ typename ggl::tag<Geometry>::type,
+ ggl::is_multi<Geometry>::type::value,
+ typename boost::remove_const<Geometry>::type
+ >::apply(stream, style, size, geometry, strategy);
+}
+
+
+template <typename P>
+struct svg_mapper
+{
+ typedef ggl::strategy::transform::map_transformer<P, ggl::point_xy<int>, true, true> transformer_type;
+ ggl::box<P> bbox;
+ transformer_type* matrix;
+ std::ostream& stream;
+ int width, height;
+
+ svg_mapper(std::ostream& s, int w, int h)
+ : matrix(NULL)
+ , stream(s)
+ , width(w)
+ , height(h)
+ {
+ ggl::assign_inverse(bbox);
+ }
+
+ virtual ~svg_mapper()
+ {
+ stream << "</svg>" << std::endl;
+ if (matrix) delete matrix;
+ }
+
+ template <typename Geometry>
+ void add(Geometry const& geometry)
+ {
+ ggl::combine(bbox, ggl::make_envelope<ggl::box<P> >(geometry));
+ }
+
+
+ template <typename Geometry>
+ void map(Geometry const& geometry, std::string const& style, int size = -1)
+ {
+ if (! matrix)
+ {
+ matrix = new transformer_type(bbox, width, height);
+
+ stream << "<?xml version=\"1.0\" standalone=\"no\"?>" << std::endl;
+ stream << "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"" << std::endl;
+ stream << "\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">" << std::endl;
+
+ stream << "<svg width=\"100%\" height=\"100%\" version=\"1.1\"" << std::endl;
+ stream << "xmlns=\"http://www.w3.org/2000/svg\">" << std::endl;
+ }
+ svg_map(stream, style, size, geometry, *matrix);
+ }
+
+
+};
+
+
+#endif // GGL_TEST_UTIL_SVG_MAPPER_HPP
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk